Simplificar lineas en el código de un Formulario

Hola

Dispongo de un Formulario en el que, mediante un CommandButton, deseo eliminar un rango de datos ( no toda la fila). Pero la secuencia que tengo para ello resulta muy larga. Se podría simplificar algo?

Muchas gracias

Private Sub CommandButton4_Click()
If Not ListBox1.ListIndex = -1 Then
   Range("A" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("B" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("C" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("D" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("E" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("F" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("G" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("H" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("I" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("J" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("K" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("L" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("M" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("N" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("O" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("P" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("Q" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("R" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("S" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("T" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("U" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("V" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("W" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("X" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("Y" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("Z" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("AA" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("AB" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   Range("AC" & ListBox1.List(ListBox1.ListIndex, 16)) = ""
   If Range("B" & ListBox1.List(ListBox1.ListIndex + 1, 16)).Value = "" Then
   Range("A" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("C" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("D" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("E" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("F" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("I" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("J" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("M" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("Q" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("R" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("S" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("T" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("U" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("V" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("W" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("X" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("Y" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("Z" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("AA" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("AB" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   Range("AC" & ListBox1.List(ListBox1.ListIndex + 1, 16)) = ""
   End If
 End If
UserForm_Initialize
End Sub

Respuesta
1

Se pueden escribir rangos como en estos ejemplos:

Range("A1:AC1")= ""

Range("A2, E3:J3, AB5:AC5") = ""

Range("A1:AC4") = ""

Para tu caso, donde la fila la da el valor del listbox, sería para el primer caso:

 Range("A" & ListBox1.List(ListBox1.ListIndex , 16) & ":AC" & ListBox1.List(ListBox1.ListIndex , 16)) = ""

Y lo mismo para cuando se cumpla la 2da condición incrementando en 1 el listindex.

PD) Podés encontrar más ejemplos de selección de rangos en la sección Macros de mi sitio.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas