Visual Basic para Aplicaciones - target.address

Life is soft - evento anual de software empresarial
 
Vista:

target.address

Publicado por ringo (3 intervenciones) el 13/05/2018 19:22:15
Hola,

agradecería algún tipo de ayuda para resolver un problema con una instrucción de Visual Basic. Primero de todo decir que mis conocimientos de Visual Basic son casi nulos, utilizo instrucciones que busco por Internet sin muchas veces acabar de comprender totalmente su funcionamiento, pero a base de ir probando, más o menos, consigo hacer lo que buscaba. Cosas sencillas, obviamente.

Voy al tema, estoy utilizando la instrucción Target.Address de la siguiente manera:

1
2
3
If Target.Address = "$F$49" Then
Range("H51, J53, J67, N69").ClearContents
End If

Me funciona perfectamente en la casilla indicada F4 (y otras similares) donde escojo el contenido a partir de una validación de datos por lista. El problema es cuando esta instrucción está aplicada a una celda donde el contenido se cambia a partir de otras instrucciones de Visual Basic, es decir, no la cambio yo manualmente, si no que se cambia a partir del resultado de la instrucción.

Resumiendo, lo que busco es que el rango de celdas indicado quede en blanco siempre que haya cambios en las celdas del IF, independientemente de que el cambio se haga manualmente o automáticamente por otra instrucción.

Esperando alguna respuesta que me lo aclare, muchas gracias y saludos

Ringo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

target.address

Publicado por Antoni Masana (498 intervenciones) el 15/05/2018 12:08:45
Si entiendo lo que explicas lo que necesitas es esto

Con este Evento en la hoja en cuestión (Ojo: NO en un modulo) cada vez que se modifique la Celda F4 se borrada el contenido de las celdas
H51, J53, J67, N69"

1
2
3
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$F$4" Then Range("H51, J53, J67, N69").ClearContents
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

target.address

Publicado por ringo (3 intervenciones) el 15/05/2018 18:13:20
Gracias Antoni por atender mi consulta. Sí, el evento lo tengo en la hoja en cuestión y no en un módulo, tal cual tú indicas. Lo tengo en diferentes celdas y me funciona perfectamente en las celdas que yo realizo un cambio manualmente, es decir, me sitúo en la celda y cambio el contenido o lo borro, y en consecuencia se borra el contenido de las celdas que he indicado en el "THEN RANGE". El problema surge en las celdas que yo no cambio manualmente, porque en estas celdas se produce el cambio a partir de una función de excel que las afecta. En este caso las celdas del rango del Then no quedan en blanco. No sé cómo solucionarlo. Si se te ocurre alguna cosa más te agradeceré cualquier idea.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

target.address

Publicado por Antoni Masana (498 intervenciones) el 15/05/2018 22:29:10
No se si entiendo bien lo que explicas.

Deduzco que la celda F4 tiene una función y su contenido es el resultado de la modificación de otras celdas.
En este caso la solución es esta:

1
2
3
4
5
6
7
8
9
Dim Celda_F4
 
Private Sub Worksheet_Change(ByVal Target As Range)
    If Celda_F4 <> Range("F4") Then Range("H1, J3, J6, N6").ClearContents
End Sub
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Celda_F4 = Range("F4")
End Sub

¿Como funciona?

Hay una serie de eventos que se ejecutan en diferentes y en este caso hay tres a tener en cuenta:

1.- Cuando se entra en una celda se ejecuta Worksheet_SelectionChange, como no lo se ni me interesa tener que saberlo le digo Guarda el contenido de F4 antes de hacer una modificación

2.- Al salir de la celda se ejecuta Worksheet_Calculate para evaluar todos los cálculos de funciones del libro.

3.- Por último ejecuta Worksheet_Change y como el contenido de la celda F4 puede haber cambiado lo comparo con el que tenia antes y procedo borrar.

Abras observado que después del borrar no se actualiza la variable Celda_F4 porque no es necesario, ya que se repite el ciclo y la secuencia es siempre la misma

Y si no funciona envíame el libro, en la cabecera esta mi correo.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

target.address

Publicado por ringo (3 intervenciones) el 16/05/2018 18:01:47
Hola, el evento que me envías funciona perfectamente si hago una prueba fuera del resto de eventos que tengo en la hoja de excel. Lo que no sé es como integrarlo con el resto de eventos que hay, porque cuando intento aplicarlo acaba dando error. Ya comenté que mis conocimientos de visual basic son escasos. Acepto tu ofrecimiento y te envío por e-mail el libro por si me puedes echar ayudarme un poco más.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

target.address

Publicado por Daniel Zedan (1 intervención) el 07/04/2020 16:03:57
https://riptutorial.com/es/excel-vba/example/5925/desactivar-propiedades-durante-la-ejecucion-de-macro

Esto te puede servir, desactiva todas las propiedades mientras está andando la macro, por lo que no se activará la macro cuando cambies el valor de la celda F49 en otra macro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

target.address en Rangos

Publicado por Mauricio (1 intervención) el 13/08/2020 01:12:23
Buenos días,

Solicito de su amable colaboración con el siguiente problema:

Estoy utilizando este código que me funciona para dejar en blanco una celda debido a la modificación de otra:

1
2
3
4
Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Address = "$E$3" Then Range("F3") = ""
End If
End Sub

Sin embargo, necesito que esto mismo se realice en un rango de celdas pero no lo logro, es decir, algo como esto:

1
2
3
4
Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Address = "$E$3:$E$10" Then Range("F3:F10") = ""
End If
End Sub

Lo que no quiero es hacer el primer código celda por celda ya que el rango puede ser de hasta 1000 registros.

Agradezco su ayuda ya que no tengo muchos conocimientos en Visual, saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 3
Ha aumentado su posición en 6 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

target.address en Rangos

Publicado por Andres (2 intervenciones) el 13/11/2020 17:41:08
Hola Me pasa exactamente lo mismo, tengo el siguiente codigo:

1
2
3
4
5
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$4" Then
Range("G4:H4") = ""
End If
End Sub

Quisiera que esta dinamica me lo haga para cada una de las filas de una hoja de excel, es decir: cuando este en F5 me deje en blanco de G5 a H5. y al pasar a la fila 6 me haga lo mismo sin modificarme las anteriores.

Agradezco infinitamente la ayuda.
Captura
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de David
Val: 40
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

target.address en Rangos

Publicado por David (10 intervenciones) el 14/11/2020 04:52:56
Prueba esto:
1
2
3
4
5
6
Private Sub Worksheet_Change(ByVal Target As Range)
 
    If Not Application.Intersect(Target, Range("F5:F10")) Is Nothing Then
        Target.Offset(0, 1).Resize(1, 2).Value = ""
    End If
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

target.address en Rangos

Publicado por Andres (2 intervenciones) el 16/11/2020 22:30:52
Super! Parece funcionar bien. Muchas gracias me ahorraste muchas lineas de codigo. Good bless u !
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

target.address en Rangos p

Publicado por edwin (1 intervención) el 17/04/2022 03:40:39
puedes mostrar como quedó el código?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

target.address en Rangos

Publicado por Donaldo (1 intervención) el 30/03/2022 21:36:09
Bro, me salvaste, la neta busque por todo you tube y nada.

Gracia Totales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

target.address en Rangos

Publicado por Ghadiel (1 intervención) el 22/10/2021 23:09:17
Hola buen día tengo el siguiente código:

1
2
3
4
5
6
Private Sub Worksheet_Change(ByVal Target As Range)
 
    If Target.Address = "$Q$10" Then Range("E11:J11") = ""
    End If
 
End Sub

Sin embargo no pone el rango en blanco, cabe aclarar que el rango son celdas combinadas por cuestión del formato de impresióna además que Q10 es una celda .


De antemano muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar