Jump to content
Milton Cordova

Limpia dinamicamnte filas de rango

Recommended Posts

Saludos disculpas por hacer una consulta sobre una macro que me ayudaron, la cual con clic derecho en fila K del rango K15:V70 Limpia lo que este en la fila desde K hasta V.

Lo que deseo es que al hacer clic en cualquier celda de la columna K:V de la fila respectiva se limpie todo lo que esta hacia la derecha.

Ejemplo si hago clic derecho en K15 limpia todo desde K15:V15

clic derecho L15 limpia todo desde L15:N15

clic derecho 15 limpia todo desde M15:N15.......................

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range("k15:k70 ")) Is Nothing Then
With Target
    If VBA.IsNumeric(Target) Then If .Value > 0 Then Range(Cells(.Row, "K"), Cells(.Row, "V")).ClearContents
End With
Cancel = True
End If

End Sub

 

 

Limpia dinamicamente datos en Rango de Fila.xls

Edited by Milton Cordova

Share this post


Link to post
Share on other sites

Para ti Milton, que usas VBA desde hace años, esto es realmente muy sencillo; entiendo que los foros, te van a colaborar... pero esto es demasiado útil para ti, para que no le dediques un poco de tiempo

Vamos animos que nada es dificil, si nos dedicamos a lo que nos es muy util

Ademas por favor envuelve los códigos con las etiquetas del foro

 

Saludos cordiales!

Share this post


Link to post
Share on other sites

Saludos he intentado con esta macro. no funciona

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range("k15:k70 ")) Is Nothing Then
With Target

Fila = ActiveCell.Rows.Row
columna = ActiveCell.Columns.Column
    If VBA.IsNumeric(Target) Then If .Value > 0 Then Range(Cells(fila, columna), Cells(fila, "V")).ClearContents
End With
Cancel = True
End If

End Sub

 

Share this post


Link to post
Share on other sites

Saludos solucione de la siguiente forma:

Como lo que queria hacer es limpiar borrar datos valores de las filas del rango K:V haciendo clic derecho en la primera celda de la fila que tenga valor para lo cual debia seleccionar la celda inicial ya sea K, L, M, N……,V.

Lo logre con la siguiente aplicación >= 0

If VBA.IsNumeric(Target) Then If .Value >= 0 Then Range(Cells(.Row, "K"), Cells(.Row, "V")).ClearContents

Con lo cual siempre voy a dar clic desde K y va limpiar la fila desde K:V no importa en que columna  comience el dato.

 

Agradezco si hay alguna forma mas interesante se solucion.

Share this post


Link to post
Share on other sites
Hace 43 minutos , Milton Cordova dijo:

Saludos solucione de la siguiente forma:

Como lo que queria hacer es limpiar borrar datos valores de las filas del rango K:V haciendo clic derecho en la primera celda de la fila que tenga valor para lo cual debia seleccionar la celda inicial ya sea K, L, M, N……,V.

Lo logre con la siguiente aplicación >= 0

If VBA.IsNumeric(Target) Then If .Value >= 0 Then Range(Cells(.Row, "K"), Cells(.Row, "V")).ClearContents

 

Con lo cual siempre voy a dar clic desde K y va limpiar la fila desde K:V no importa en que columna  comience el dato.

 

 

Agradezco si hay alguna forma mas interesante se solucion.

Por lo menos ya se ve un intento de tu parte, solo mencionarte que mi idea no es molestar, si no ayudar

Te explico brevemente: 

Cuanto utilizas macros de evento, estas generalmente traen ya predefinidos ciertos objetos

Para tu caso, el evento que utilizas contiene Target [(ByVal Target As Range], que es cualquier celda/rango de tu hoja/libro

No es necesario utilizar activecell pues Target es el objeto en cuestión

Por lo que tu duda, se resuelve con declarar o escribir directamente la columna activa, es decir cambiar la "k" por .Column del Target

Range(Cells(.Row, .column), Cells(.Row, "V")).ClearContents

 

Saludos 

Share this post


Link to post
Share on other sites

Saludos inserte lo que me indicas pero no funciona, para mejor comprension adjunto Documento.

Veo que esta seria la forma adecuada para la macro ya que la solucion que encontre es muy limitada y directa Then If .Value >= 0

Gracias por su seguimiento

Macro actualizada

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("k15:k70 ")) Is Nothing Then
With Target

fila = ActiveCell.Rows.Row
columna = ActiveCell.Columns.Column
    If VBA.IsNumeric(Target) Then If .Value > 0 Then Range(Cells(.Row, .Column), Cells(.Row, "V")).ClearContents
End With
Cancel = True
End If

End Sub

 

Limpia dinamicamente datos en Rango de Fila xx.xls

Share this post


Link to post
Share on other sites

Hola @Milton Cordova,

Quiero hacerte una sugerencia ya que ya te solucionaron tu duda pero tu no la vez, te recomiendo que empieces con ejemplos sencillos, pero cada cosa nueva que veas trata de entender que es lo que hace e investiga sobre ello y has tus ejemplos pequeños y particulares, de modo que poco a poco vayas entendiendo a VBA.

Te explico, Target es un Objeto tipo Range, que puede ser una Celda o un Rango de Celdas. Con el cual puedes obtener información sobre una Celda o un Rango de Celdas y también puedes darle valores a la Celda y muchas cosas más. Por ejemplo si haces:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
	With Target' Sabes lo que hace  WITH?
        MsgBox .Row 'Te mostraría  la Fila Ej. 15
        MsgBox .Column 'Te mostraría la Columna. Ej. 11
        MsgBox .Value 'Te muestra el valor que hay en la celda. Ej. 10
        MsgBox .Address ' Te muestra la dirección de la celda. Ej. $K$15
        MsgBox .Value = 200 ' Va a poner el valor de 200 en la celda donde le diste Click Derecho.
	End With
End Sub

Y lo que hace @Gerson Pineda, es armar el rango

Range(Cells(.Row, .Column), Cells(.Row, "V")) dependiendo donde hagas el Click Derecho.

para borrar el contenido con .ClearContents, y es por eso que te puso esto:

 

Hace 23 horas, Gerson Pineda dijo:

 

Range(Cells(.Row, .column), Cells(.Row, "V")).ClearContents

 

Y con solo poner:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("k15:k70 ")) Is Nothing Then
        With Target
            Range(Cells(.Row, .Column), Cells(.Row, "V")).ClearContents
        End With
    End If
End Sub

Ya esta solucionado tu duda.

Y es por eso que ya no te contestan, ya que el problema es tuyo ya no de ellos.

Saludos.

P.D.: Yo también estoy en el aprendizaje, pero es poco a poco.

Share this post


Link to post
Share on other sites

Saludos estimado Master la verdad que yi solucione de la manera quiza mas simple, es en verdad esta solucion la que funicona muy bien.

Estas ayudas son las que espero si es posible para aplicar conocimientos cada vez con mas excelencia.

Es incomod estar molestando por situaciones que para un grna conocimiento deben ser tan simples y básicas.

Por todo ello Gracias siempre.

 

Share this post


Link to post
Share on other sites
Hace 11 horas, Milton Cordova dijo:

Es incomod estar molestando por situaciones que para un grna conocimiento deben ser tan simples y básicas

Esta duda tuya es básica, no es para nada avanzada, para alguien como tu... [y de paso lo explique y puse un ejemplo]

 

Saludos 

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.



×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png