Hoja excel con macros da fallo a veces al pasar una celda a mayúsculas

Tengo una hoja excel que a veces se bloquea cuando escribo en una celda y le doy al tabulador para pasar a la siguiente. La celda en cuestión solo tiene código para controlar que se introduce algún dato y salta una ventana emergente si se queda vacía y para pasar a mayúsculas las letras que estén en minúsculas.

If Target.Address = "$A$7" And Range("A7").Value <> "NÚMERO" Then
        Range("A7").Value = UCase(Range("A7").Value)
        Exit Sub
End If
ElseIf Range("A7").Value = "NÚMERO" Or Range("A7").Value = Empty Then
        Application.DisplayAlerts = True
        Cancel = True
        MsgBox "Inserta el NÚMERO de documento del cliente o de la empresa", vbInformation = vbOKOnly
        Range("A7").Select

Estos son los únicos trozos de código que hacen referencia a esa celda

1 respuesta

Respuesta
2

Hol.a

Pero ¿cuál es el fallo/error que mencionas? ¿Sale algún mensaje? ¿El error te marca alguna línea? ¿O más bien te refieres a que algo no sale como quieres o crees que debe quedar? Si el primer retazo de código corresponde al evento "Change" posiblemente estés entrando a un bucle por cambiar la misma celda.

Salu2

Abraham Valencia

Sale el error de forzar el cierre de Excel, y luego el típico mensaje de depurar o finalizar, pero le doy a depurar y se termina de cerrar el programa.

Coloca completa la rutina del primer retazo. Sí te adelanto que parece que es lo que te comentaba: Un bucle interminable del evento "Change" que "cuelga" el Excel.

Abraham Valencia

Private Sub Worksheet_Change(ByVal Target As Range)
    'Nombre en mayúsculas y cambia a la celda de Mes de cobro
    If Target.Address = "$D$7" And Range("D7").Value <> "NOMBRE" Then
        Range("D7").Value = UCase(Range("D7").Value)
        Target.Offset(2, -1).Select
        Exit Sub
    End If
   'Numero de documento en mayúsculas
    If Target.Address = "$A$7" And Range("A7").Value <> "NÚMERO" Then
        Range("A7").Value = UCase(Range("A7").Value)
        Exit Sub
    End If
    'Numero de documento en mayúsculas - EMPRESA Datos del viajero
    If Target.Address = "$J$3" Then
        Range("J3").Value = UCase(Range("J3").Value)
        Exit Sub
    End If
    'Nombre en mayúsculas - EMPRESA Datos del viajero
    If Target.Address = "$H$3" Then
        Range("H3").Value = UCase(Range("H3").Value)
        Exit Sub
    End If
End Sub

Creo que el fallo es que cuando pone el contenido de la celda en mayúsculas lo detecta como cambio y vuelve a convertir todo en mayúsculas y aunque esté en mayúsculas lo vuelve a convertir y lo detecta como cambio y vuelve a convertirlo... y así hasta el infinito.

La única opción que he podido darle es que me lo ponga en mayúscula antes de darle a un botón que hay que darle siempre.

Pues sí, es el "bucle interminable". Cámbialo por esto:

Private Sub Worksheet_Change(ByVal Target As Range)
'Nombre en mayúsculas y cambia a la celda de Mes de cobro
If Target.Address = "$D$7" And Range("D7").Value <> "NOMBRE" Then
    Application.EnableEvents = False
    Range("D7").Value = UCase(Range("D7").Value)
    Application.EnableEvents = True
    Target.Offset(2, -1).Select
    Exit Sub
End If
'Numero de documento en mayúsculas
If Target.Address = "$A$7" And Range("A7").Value <> "NÚMERO" Then
    Application.EnableEvents = False
    Range("A7").Value = UCase(Range("A7").Value)
    Application.EnableEvents = True
    Exit Sub
End If
'Numero de documento en mayúsculas - EMPRESA Datos del viajero
If Target.Address = "$J$3" Or Target.Address = "$H$3" Then
    Application.EnableEvents = False
    Target.Value = UCase(Target.Value)
    Application.EnableEvents = True
    Exit Sub
End If

Salu2

Abraham Valencia

Por ahora funciona perfecto, el caso es que lo que tenía antes también funcionó durante unos meses, pero de repente empezó a lanzar ese error de bucle infinito

¡Gracias por la solución! 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas