Esta macro de mayúsculas me esta dando problemas

Esta macro de mayúsculas me esta dando problemas al eliminar celdas se me borran las celdas o líneas:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Range("A12:D41, H12:H46")) Is Nothing Then
Application.EnableEvents = False
Target.Value = VBA.UCase(Target.Text)
Application.EnableEvents = True
End If
End Sub

Al eliminar cuatro líneas, las líneas que suben más unas cuantas se me borran, también me borran las fórmulas y no me deja volver a escribirlas.

2 Respuestas

Respuesta
1

Utiliza el evento Change

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A12:D41, H12:H46")) Is Nothing Then
Application.EnableEvents = False
Target.Value = UCase(Target)
Application.EnableEvents = True
End If
End Sub

Si lo que quieres es poner en mayúsculas, los textos de esos rangos.

Si te ha valido la respuesta.

No me escribe en mayúsculas.

Un saludo

Si quieres pásame el fichero, a ver si tienes algún formato condicional en esas celdas o algo raro, pero a mi, se me ejecuta correctamente.

Respuesta
1

Te anexo completo el código del evento thisworkbook, hay que verificar que no tengas fórmula, para que no borre el contenido.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Select Case Sh.Name
        Case "Contado", "Adra Paco", "Balerma Trini", "El Ejido Adelina", "Berja Gador", "Adra Maria", "Iznajar Pepa", "Lucena Rafaela", "Lucena Carmen", "Benameji Juan", "Badolatosa Mª Jose", "Casariche Carmen", "Gilena Aurelia", "F. Piedra Antonia", "Humilladero Victoria", "Benameji Sole", "Galerias Fernandez", "Fuengirola Paco", "Fuengirola Charo", "Fuengirola Rosalia", "La Cala Antonia", "Marbella Juani", "Marbella Sara", "Flores Carmen", "Asuncion Maria", "Asuncion Pepi", "Asuncion Inma", "Asuncion Maria", "Asuncion Pepi", "Asuncion Inma", "Delicias Amparo", "La Paz Cris", "La Paz Paco", "La Luz J. Manuel", "Chapas Virginia Toñi", "P Sur Toñi", "Molinillo Meli", "Union Ramona Gema", "Huetor Mª Luisa", "Salar Carmen", "Loja Maribel", "Loja Paqui", "Loja Paqui", "Loja Mª Jose", "Moraleda Paqui", "Loja Pepa Marengo", "V Trabuco Charo", "A. Miel Manolo", "A. Miel Conchi Tere", "Torremolinos Paqui", "Torremolinos Fina", "Churriana Eva", "Pima", "Viajante PACO", "Viajante ORTIGOSA"
            If Not Intersect(Target, Range("A12:D41, H12:H46")) Is Nothing Then
                For Each c In Target
                    If c.HasFormula = False Then
                        Application.EnableEvents = False
                        c.Value = UCase(c.Value)            '  MAYUSCULAS TODO
                        Application.EnableEvents = True
                    End If
                Next
            End If
        Case "Listado", "Listado"
            If Not Intersect(Target, Range("A10:E6000")) Is Nothing Then
                For Each c In Target
                    If c.HasFormula = False Then
                        Application.EnableEvents = False
                        Target.Value = VBA.UCase(Target.Text)            '  MAYUSCULAS TODO
                        Application.EnableEvents = True
                    End If
                Next
            End If
    End Select
End Sub

Saludos.Dante Amor

Me faltó un detalle en la hoja "listado", Utiliza la siguiente, por favor:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Act.Por.Dante Amor
    Select Case Sh.Name
        Case "Contado", "Adra Paco", "Balerma Trini", "El Ejido Adelina", "Berja Gador", "Adra Maria", "Iznajar Pepa", "Lucena Rafaela", "Lucena Carmen", "Benameji Juan", "Badolatosa Mª Jose", "Casariche Carmen", "Gilena Aurelia", "F. Piedra Antonia", "Humilladero Victoria", "Benameji Sole", "Galerias Fernandez", "Fuengirola Paco", "Fuengirola Charo", "Fuengirola Rosalia", "La Cala Antonia", "Marbella Juani", "Marbella Sara", "Flores Carmen", "Asuncion Maria", "Asuncion Pepi", "Asuncion Inma", "Asuncion Maria", "Asuncion Pepi", "Asuncion Inma", "Delicias Amparo", "La Paz Cris", "La Paz Paco", "La Luz J. Manuel", "Chapas Virginia Toñi", "P Sur Toñi", "Molinillo Meli", "Union Ramona Gema", "Huetor Mª Luisa", "Salar Carmen", "Loja Maribel", "Loja Paqui", "Loja Paqui", "Loja Mª Jose", "Moraleda Paqui", "Loja Pepa Marengo", "V Trabuco Charo", "A. Miel Manolo", "A. Miel Conchi Tere", "Torremolinos Paqui", "Torremolinos Fina", "Churriana Eva", "Pima", "Viajante PACO", "Viajante ORTIGOSA"
            If Not Intersect(Target, Range("A12:D41, H12:H46")) Is Nothing Then
                For Each c In Target
                    If c.HasFormula = False Then
                        Application.EnableEvents = False
                        c.Value = UCase(c.Value)            '  MAYUSCULAS TODO
                        Application.EnableEvents = True
                    End If
                Next
            End If
        Case "Listado", "Listado"
            If Not Intersect(Target, Range("A10:E6000")) Is Nothing Then
                For Each c In Target
                    If c.HasFormula = False Then
                        Application.EnableEvents = False
                        Target.Value = UCase(c.Value)            '  MAYUSCULAS TODO
                        Application.EnableEvents = True
                    End If
                Next
            End If
    End Select
End Sub

Buenas tar des Dante.
En la hoja de "Listado" he puesto, la macro así:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Act.Por.Dante Amor
Case "Listado", "Listado"
If Not Intersect(Target, Range("A10:E6000")) Is Nothing Then
For Each c In Target
If c.HasFormula = False Then
Application.EnableEvents = False
Target.Value = UCase(c.Value) ' MAYUSCULAS TODO
Application.EnableEvents = True
End If
Next
End If
End Select
End Sub

Por que le he quitado, lo correspondiente a las facturas, pero la hoja listado, es una hoja que tengo que agregar líneas o quitarlas bastantes veces, entonces, ahora como me la has pasado mejora la anterior, al eliminar 4 filas me elimina las filas, pero las líneas que la sustituyen quedan borradas.
En cuanto a la de las facturas, te pongo otra pregunta, más especifica, si me lo permites.
Un saludo

Pon lo siguiente en el evento de la hoja "listado"

Private Sub Worksheet_Change(ByVal Target As Range)
'Act.Por.Dante Amor
    If Not Intersect(Target, Range("A10:E6000")) Is Nothing Then
        For Each c In Target
            If c.HasFormula = False Then
                Application.EnableEvents = False
                c.Value = UCase(c.Value) ' MAYUSCULAS TODO
                Application.EnableEvents = True
            End If
        Next
    End If
End Sub

Decía target.value = y debe decir c.value=

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas