Excel 2007 tengo esta opción para convertir en mayúscula las celdas seleccionadas pero funciona lento

El problema que funciona lento y si pego arriba información de otra celda ya me deja de funcionar.

Alguien sabe como corregirla por favor.

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range(" f20:f211")) Is Nothing Then
        Target.Value = AMayusculas(Target.Value)
    End If
End Sub

1 Respuesta

Respuesta
1

No necesitas una función especial (Amayusculas) porque VBA ya la tiene y es UCASE.

El tema de la demora es que utilizas el evento CHANGE, pero debes considerar que al cambiar a mayúsculas nuevamente se ejecuta el evento por lo tanto hay que impedir esto inhabilitando momentáneamente las macros.

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
If Not Intersect(Target, Range("f20:f211")) Is Nothing Then
        Application.EnableEvents = False
        Target.Value = UCase(Target.Value)
        Application.EnableEvents = True
    End If
End Sub

Si esta respuesta resolvió tu consulta no olvides valorarla.

hola muchas gracias por tu pronta respuesta.

El problema que me surge ahora si lo aplico a la hoja luego no me funcionan las macros

Como tendría que hacer ? pegarlo en cada uno de los módulos de las macros que tengo....

¿Cómo sé yo qué OTRAS macros tenés?.,.. solo ajusté TU macro, en el mismo evento.

Dejame escritas aquí las otras o enviame tu libro para que vea cómo se afectan unas a otras. Mi correo aparece en el sitio que dejé al pie.

Sdos.

Elsa

Y por si TU macro estaba mal colocada aclaro dónde colocar y cómo se ejecuta el evento Change.

Se coloca en el Editor, en el objeto HOJA donde vayas a trabajar.

Se ejecuta cada vez que ingresas un dato en alguna de las celdas del rango F20:F211. No se ejecuta al seleccionar el rango, sino cuando escribis en alguna de esas celdas.

Hechas las aclaraciones espero tu libro o tus macros para revisar el resto de tus procesos.

Sdos!

Muchas gracias te envío el libro por mail para que lo evalúes.

Saludos

Ya te devolví el libro con ajustes en 1 de las otras macros, te queda por completar las de Correo.

El único cambio a realizar es colocar una instrucción que inhabilite la ejecución del evento Change cada vez que copias un rango sobre la col F. Y volver a habilitarla al finalizar, por ej:

Sub limpiar1()
'
' limpiar1 Macro
    ActiveSheet.Unprotect
    ActiveSheet.Range("$F$19:$F$211").AutoFilter Field:=1
    'se impide que se ejecute la macro CHANGE de la hoja
    Application.EnableEvents = False
        Range("BM20:BN211").Select
        Selection.Copy
        Range("F20:G211").Select
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        ActiveSheet.Range("$M$19:$M$211").AutoFilter Field:=1, Criteria1:="<>"
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
            , AllowSorting:=True, AllowFiltering:=True
    'se vuelve a habilitar la macro CHANGE de la hoja
    Application.EnableEvents = True
End Sub

En las de Correo dejá algo de espacio para que allí coloques la primera y la del valor en True iría luego del pegado del rango.... o cuando ya no hagas modificaciones en esa col F.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas