Borrar una Fila de una HojaX de un Libro elegida en un ListBox

Tengo un UserForm que realizara varias operaciones en un Libro de Excel, en este, existe un ListBox que me muestra el contenido de una Hoja elegida en un ComboBox, me gustaría aprovechar este mismo ListBox para eliminar una Fila elegida en este, realizando la operación con un Botón. Cabe aclarar que no tengo grandes conocimientos de programación y esto lo he realizado recopilando información de esta página y de otras similares. Desde ya les agradezco su colaboración. De necesitar más información solo solicítenla.

1 Respuesta

Respuesta
1

H o l a: Para saber cuál es la fila a borrar, puedes decirme lo siguiente:

  • Cómo se llama la hoja
  • Pon el código que utilizas para cargar el combobox
  • Y también pon el código que utilizas para cargar el listbox

Este es el código que llena el ComboBox con los nombres de las Hojas (30 o más) del Libro y carga el ListBox con el contenido de la Hoja elegida en el ComboBox.

Private Sub ComboBox1_Enter()

 'codigo del combobox que muestra el nombre de las hojas

    'En caso de error, que continúe

    On Error Resume Next

 'Esto se producirá cuando nos situemos sobre el combobox1

    'antes quitaremos todo lo que haya en el combobox1

    ComboBox1.Clear

 Vamos a llenar dinámicamente el combobox

'con los nombres de las hojas

For i = 1 To Sheets.Count

 'Añadimos los nombres de las hojas al combobox

ComboBox1.AddItem Sheets(i).Name

Next

 End Sub

 Private Sub ComboBox1_Click()

    ListBox1.Clear

    ListBox1.SetFocus

     'carga la informacion en el ComboBox

    Set h = Sheets(ComboBox1.Value)

    uc = h.[B3].SpecialCells(xlLastCell).Column

    uf = h.[B3].SpecialCells(xlLastCell).Row

   'carga la informacion en el ListBox

    ListBox1.ColumnCount = uc

    ColumnWidths = "80 pt; 100 pt; 50 pt; 120 pt"

    ListBox1.List = h.Range(h.[B3], h.Cells(uf, uc)).Value

    End Sub

Como se llama la Hoja: la Hoja puede ser cualquiera de las 30 del Libro elegida en el ComboBox.

La Fila a borrar puede ser cualquiera de las mostradas en el ListBox y elegida alli, sin importar cuál es la Hoja elegida.

No se como se puede agregar un gráfico ya que podría de ser necesario agregar una captura del UserForm.

Si necesita mas información le le agradeceré que la solicite.

Te anexo las macros actualizadas:

Private Sub ComboBox1_Enter()
    'codigo del combobox que muestra el nombre de las hojas
    'En caso de error, que continúe
    On Error Resume Next
    'Esto se producirá cuando nos situemos sobre el combobox1
 'antes quitaremos todo lo que haya en el combobox1
    ComboBox1. Clear
    'con los nombres de las hojas
    For i = 1 To Sheets.Count
        'Añadimos los nombres de las hojas al combobox
        ComboBox1. AddItem Sheets(i). Name
    Next
End Sub
'
Private Sub ComboBox1_Click()
    ListBox1.Clear
    ListBox1.SetFocus
    'carga la informacion en el ComboBox
    Set h = Sheets(ComboBox1.Value)
    uc = h.[B3].SpecialCells(xlLastCell).Column
    uf = h.[B3].SpecialCells(xlLastCell).Row
    If uf < 3 Then uf = 3
    'carga la informacion en el ListBox
    ListBox1.ColumnCount = uc
    ColumnWidths = "80 pt; 100 pt; 50 pt; 120 pt"
    ListBox1.List = h.Range(h.[B3], h.Cells(uf, uc)).Value
End Sub
'
Private Sub CommandButton1_Click()
'Por.Dante Amor
    If ComboBox1.ListIndex = -1 Or ComboBox1.Value = "" Then
        MsgBox "Selecciona una hoja", vbExclamation
        Exit Sub
    End If
    If ListBox1.ListIndex = -1 Then
        MsgBox "Selecciona una línea del listbox", vbExclamation
        Exit Sub
    End If
    '
    hoja = ComboBox1.Value
    fila = ListBox1.ListIndex + 3
    '
    Sheets(hoja).Rows(fila).Delete
    MsgBox "Fila eliminada", vbInformation
End Sub

Nota: En el evento ComboBox1_Click,solamente agregué esta línea:

If uf < 3 Then uf = 3

Es para asegurar que solamente se carguen las filas desde la fila 3 hacia adelante, de lo contrario perderíamos el número de fila que se quiere borra.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas