Ejecutar "x" macro cuando cambia valor"x" columna

Soy nuevo aquí, y tengo un dilema. Todas las respuestas que he mirado hablan de ejecutar una macro cuando se cambia una celda y no me sirven.
Pues bien, tengo 5 macros en una hoja, cada una asociada a una columna con sus respectivas celdas. Las macros son muy sencillas, tipo copiar-pegar en otra hoja. He conseguido que funcione con una celda en concreto:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "E5" Then
If Target.Value <> 0 Then Call Macro1
End If
End Sub
Lo que necesito es que cuando se introduzca un valor diferente de cero, en cualquier celda de la columna, se ejecute la macro. Y que esto mismo pase en otras 4 columnas.
Ejemplo: pongo 1 en A1, ejecuta la macro 1, pongo 34 en B40 ejecuta macro 2.

1 respuesta

Respuesta
1
Por momentos mencionas celdas y por momento columnas. No me queda claro si la 'macro1' se ejecuta al cambio en cualquier celda de col A, o solo en A1 (aunque tu rutina actual dice E5).
Te dejo algunas pautas, si no resuelven tu problema, escribime con las aclaraciones.
Private Sub Worksheet_Change(ByVal Target As Range)
'esta rutina controla contenidos en celdas específicas
If Target.Address(False, False) = "A1"  Then
      If target.value <> 0 Call Macro1
Elseif Target.Address(false, false) = "B40" Then
      If target.value <> 0 Call Macro2
Elseif Target.Address(false, false) = "E5" then
      If target.value <> 0 Call Macro3
Elseif   'repetir para macro4
End If
End Sub
Más o menos, lo de E5 es la la hoja de pruebas que tengo. Se ejecuta al cambio en cualquier celda de col A.
Te has acercado mucho, para lo poco preciso que lo he explicado, lo siento. Seria lo mismo que has puesto, pero que la rutina controle contenidos en columnas.
Saludos
Bien aquí va para col, falta que ajustes tus referencias:
Private Sub Worksheet_Change(ByVal Target As Range)
'esta rutina controla contenidos en columnas específicas
'primero omitimos que se ejecute cuando se trata de cambios en las
'2 primeras filas, generalmente de títulos:
If Target.Row < 3 Then exit sub
If Target.Column = 1 Then
      If target.value <> 0 Call Macro1
Elseif Target.Column = 2 Then
      If target.value <> 0 Call Macro2
Elseif Target.Column = 3 then
      If target.value <> 0 Call Macro3
Elseif   'repetir para macro4
End If
End Sub
Sdos
Elsa
Hola Elsa
Esta es la idea, lo de los títulos todo un detallazo.
Private Sub Worksheet_Change(ByVal Target As Range)
'esta rutina controla contenidos en columnas específicas
'primero omitimos que se ejecute cuando se trata de cambios en las
'2 primeras filas, generalmente de títulos:
If Target.Row < 5 Then Exit Sub
If Target.Column = 1 Then
      If Target.Value <> 0 Then Call Macro1
ElseIf Target.Column = 3 Then
      If Target.Value <> 0 Then Call Macro2
ElseIf Target.Column = 5 Then
      If Target.Value <> 0 Then Call Macro3
End If
End Sub
He tenido que poner "Then" antes de "Call" para que funcione. Ahora la ejecuta solo que me da un error:
Error '13' en tiempo de ejecución: No coinciden los tipos. Y al depurar me señala "If Target.Value <> 0 Then Call".
Alomejor tiene que ver con la macro?¿Te la pongo (es copiar-pegar entre hojas):
Sub Macro13()
    ActiveSheet.Unprotect
    Range("F5:F117").Select
    Selection.Copy
    Sheets("Cálculos Mejoras(No tocar)").Select
    Range("B1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Sheets("Mejoras").Select
    Range("E5:E117").Select
    Selection.Copy
    Sheets("Cálculos Mejoras(No tocar)").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Sheets("Mejoras").Select
    Range("E5:E117").Select
    Selection.ClearContents
    Range("F5").End(xlDown).Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveSheet.EnableSelection = xlUnlockedCells
End Sub
Muchísimas gracias por tu tiempo
Vale, ya se por donde falla la macro...
Me salta este error debido a (por el final de la macro):
    Range("E5:E117").Select
    Selection.ClearContents
Si le digo que borre solo una celda, lo hace, el problema viene cuando se trata de borrar un rango de celdas.
No se como solucionarlo
Lo del 'Then' fue un olvido mío... lo escribí sobre esta ventana en lugar de hacerlo en el Editor.
Si tu rutina del Worksheets_Change la tenés en la hoja 'Mejoras', es lógico que dé error, porque al borrar ese rango estás haciendo un 'cambio' en las celdas.
Entonces agregá esta otra línea al inicio, para evitar que se ejecute si la cant de celdas es > 1, es decir cuando seleccionas un rango:
Private Sub Worksheet_Change(ByVal Target As Range)
if Target.Count > 1 then exit sub
'y ahora todo el resto.....
Pruébala y comentame

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas