Convertir a mayusculas

10/09/2007 - 18:27 por Jaime Javier Hernández M. | Informe spam
Hola:
Estoy usando esta macro para convertir a mayusculas lo que el usuario
introduce en la Columna K (11)
Funciona bien excepto cuando el usuario elimina el contenido de la celda en
esa columna
Pues a partir de ese momento ninguna celda de la columna se vuelve a
convirtir a mayusculas

¿Como puede hacerse para que funcione bien aun despues de borrar una celda
de la columna 11?

Es un Excel 2007 en windows xp

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error GoTo Err_Change
If Target.Column = 11 Then
Target.Value = UCase(Target.Value)
End If
Err_Change:
Err.Clear
End Sub

Saludos
 

Leer las respuestas

#1 David
10/09/2007 - 19:10 | Informe spam
Creo que el detectar el error está de más.

El problema ocurre cuando el mismo código altera el contenido de la celda,
lo que da origen a una ejecución en bucle del mismo. Me explico. Si pones
"a", VBA lo cambia a "A", y se dispara nuevamente el evento, cambiando el
contenido de la celda a "A", y se vuelve a disparar el evento, etc, y etc, y
etc, hasta producir un desbordamiento, que es lo que te detecta el "On Error"

Te sugeriría utilizar una variable de control, local en el módulo, para
detectar cuándo el cambio se ha producido por el usuario, y cuándo por el
evento. Algo así:


'--
Private x As Boolean

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Column = 11 Then
If x = False Then
x = True
Target.Value = UCase(Target.Value)
Else
x = False
End If
End If
End Sub
'

Comentas los resultados.



"Jaime Javier Hernández M." escribió:

Hola:
Estoy usando esta macro para convertir a mayusculas lo que el usuario
introduce en la Columna K (11)
Funciona bien excepto cuando el usuario elimina el contenido de la celda en
esa columna
Pues a partir de ese momento ninguna celda de la columna se vuelve a
convirtir a mayusculas

¿Como puede hacerse para que funcione bien aun despues de borrar una celda
de la columna 11?

Es un Excel 2007 en windows xp

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error GoTo Err_Change
If Target.Column = 11 Then
Target.Value = UCase(Target.Value)
End If
Err_Change:
Err.Clear
End Sub

Saludos



Preguntas similares