Excel - 1004: método Range del objeto "_Global" error

 
Vista:
sin imagen de perfil
Val: 3
Ha aumentado su posición en 9 puestos en Excel (en relación al último mes)
Gráfica de Excel

1004: método Range del objeto "_Global" error

Publicado por Erick (3 intervenciones) el 04/07/2017 03:29:20
soy nuevo con las macros en excel hice este pequeño codigo


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 
Dim comparar As String
comparar = Range("D13").Value
 
 
If comparar = "carla" Then
comparar = "JEFE"
 
Else
 
    If comparar = "juan" Then
    comparar = "AUXILIAR "
 
    Else
 
    End If
    Range("e8").Value = comparar
 
End If
Range("e8").Value = comparar
 
End Sub

es una macro que se ejecuta cada que haga un cambio a una celda o eso es lo que intento hacer y si hace el cambio pero de inmediato excel deja de funcionar y me manda el error
error

por favor si me ayudan a identificar en donde estoy mal se lo agredecería
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.148
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

1004: método Range del objeto '_Global' error

Publicado por Antoni Masana (1476 intervenciones) el 04/07/2017 08:12:22
Esta macro la ejecutas cuando cambias cualquier Celda y en principio esto en si mismo ya es un error. Deberías ejecutarla solo cuando modifique la celda D13 y si me apuras la E8, para el resto no tiene sentido.

En segundo lugar se puede hacer más simple:

Y por último:cuando modificas una celda se ejecuta este evento, como el evento modifica una celda vuelve a llamar al evento y así hasta el infinito o hasta que sale el error.

Y te añado otra cosa: Acepta CARLA, Carla, carla, cArLa, etc y JUAN, Juan, juan, JuAn, jUaN, etc

El evento corregido al completo:

1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim comparar As String
 
    If Target.Address = "$D$13" Or Target.Address = "$E$8" Then
       comparar = Range("D13").Value
 
       If UCase$(comparar) = "CARLA" Then comparar = "JEFE"
       If UCase$(comparar) = "JUAN" Then comparar = "AUXILIAR "
 
       Application.EnableEvents = False: Range("E8").Value = comparar
       Application.EnableEvents = True
    End If
End Sub

Y funciona perfectamente (Probado y testeado)

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar