Duda cambio ejecuta macro

Tengo el siguiente código:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 2 Then Exit Sub
Call actualiza
End Sub
Cualquier cambio en la columna 2 ejecuta actualiza.
Mi duda es simple, ¿cómo escribir el target para que los cambios en lugar de ser en la columna 2 sean en toda una hoja, y que no sea la activa?
Muchas gracias.

1 respuesta

Respuesta
1
Entiendo que esa macro solo hace su efecto en la columna 2. La siguiente te permitirá realizar en cualquier parte de la hoja:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Activate Then
Call Actualiza
End If
End Sub
========
Espero haberte ayudado. Funciona y esta probado previamente.
Funciona bien para cambios en la misma hoja, ¿cómo sería para que cambios en otra hoja del libro hicieran el Call?
Entiendo!. Hagamos lo siguiente!
===
1.- Entra a tu libro, luego pulsas ALT+F11. Se abrirá en Editor de VBA. En la parte izquierda hay un panel. En ese panel hay una opción que dice "ThisWorkbook". Selecciona dicha opción. Haces click derecho y eliges "Ver código". En esa ventana copia y pega el siguiente código:
======
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Activate then
Call Actualiza
End if
End sub
=======
El siguiente código como veras tienes que pegarlo en el objeto Workbook en el evento SheetChange
Lo he escrito en ThisWorkbook. Funcionar funciona, el problema que tengo es que el SUb Actualiza lo tengo dentro de unas de las páginas, y el Call no lo encuentra, ¿debo hacerlo public o algo así no? ¿Cómo sería?
Muchas gracias por tu ayuda.
Entiendo. Vamos de nuevo.
Abre el editor y entra a la ventana que pertenece a ThisWorkbook
Si hay código ahí borra todo hasta que no haya "nada" (completamente blanco la ventana)
Allí copia y pega el siguiente código
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Activate Then
Call Actualiza
End If
End Sub

Sub Actualiza()
MsgBox "Hola"
End Sub

====
En realidad hay dos códigos, incluyendo la macro que se llama Actualiza() el cual te devuelve un mensaje cada vez que realizas un cambio en cualquier hoja de calculo dentro del libro. Lo he probado y funciona. Con esto quiero decir que Actualiza() recomendaría que también este en ThisWorkbook
===
Muchas gracias por tu ayuda.
Sin embargo tengo un problema, es que tengo una macro elaborada en una hoja concreta, digamos "Hoja1". Cambiarla aquí la trastoca totalmente. ¿Se puede llamar desde ThisWorkbook a una Sub declarada en Hoja1?
Muchas gracias de nuevo.
Además al ser cambios en Workbook hace Call a actualiza cualquier cambio en cualquier página, y mi función actualiza hace cosas, por lo que hay un bucle, solo funciona para un mensaje, no para un código que hace cambios en casillas.
Quiero que cambios en Hoja1, lance una Sub declarada en Hoja2. No en todo el libro, ya que hace bucle.
Honestamente no entiendo. Si mal no recuerdo estabas solicitando una macro que funcione en cualquiera de las hojas del libro. LO tuyo primero era que funciona en una sola columna, luego pediste en todo en libro cuando se hagan cambios. Te ofrecí una macro la cual esta probado y funciona!
Mi primera duda me la resolviste perfectamente.
Después me surgió una segunda, que quizás no me expresé bien cuando pregunté:
¿Cómo sería para que cambios en otra hoja del libro hicieran el Call?
Cuando decía otra hoja, me refería a una sola hoja. Es decir, cambios en Hoja1 ejecutar macro en Hoja2 como te decía.
Siento el malentendido, pero agradezco enormemente tu ayuda.
Bueno hagamos un ejemplo sencillo:
====
1.- Abre el editor con ALT+F11. Inserta un nuevo "modulo". En ese modulo copia y pega esta macro:
Sub Actualiza()
Sheets(3).Range("A1").Value = 12
End Sub

====
2.- Como ves la macro hace referencia a la celda A1 de Hoja3. Es decir desde la hoja donde la ejecutemos hará esto en Hoja3. Si estas editando en Hoja1 jalara la macro y lo hará en Hoja3, tal como quieres.
Ahora haz doble click en donde dice "Hoja1 (Hoja1)" en el panel de la derecha. Esto hará que se abra la ventana de código. Ahí copia y pega este code:
Private Sub Worksheet_Change(ByVal Target As Range)
Call Actualiza
End Sub

====
Al cambiar en Hoja1 hara Actualiza en Hoja3. Probado y funciona
===
No olvides de finalizar y puntuar al final de esta página. Recuerda que es válido realizar solo una consulta por post.
Christian

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas