Combinar 4 hojas en un solo listbox

Para dante

Buena noche

Te molesto a ver si es posible esto:

Tengo 4 hojas (datos, datos2, datos3 y datos4) y lo que deseo es combinar las 4 listas en un solo listbox en el userform

En el userform tengo un optionbutton para que al darle click ahí se muestres las 4 listas de un solo y ordenadas alfabéticamente.

Y que se pueda realizar una búsqueda entre fechas como esta en el archivo que te envío.

1 Respuesta

Respuesta
1

Te anexo la macro con los cambios

Private Sub CommandButton1_Click()
'Por.Dante Amor
    Dim fec1 As Date, fec2 As Date
    Set hm = Sheets("datosm")
    '
    hm.Cells.Clear
    Sheets("datos").Rows(1).Copy hm.Rows(1)
    '
    fec1 = TextBox2
    fec2 = TextBox3
    If OptionButton1 Then
        hs = Array("datos", "datos2", "datos3", "datos4")
    Else
        hs = Array("datos")
    End If
    For h = LBound(hs) To UBound(hs)
        hoja = hs(h)
        For i = 2 To Sheets(hoja).Range("A" & Rows.Count).End(xlUp).Row
            For j = Sheets(hoja).Columns("G").Column To Sheets(hoja).Columns("W").Column Step 2
                If Sheets(hoja).Cells(i, j) >= fec1 And Sheets(hoja).Cells(i, j) <= fec2 Then
                    u = hm.Range("A" & Rows.Count).End(xlUp).Row + 1
                    Sheets(hoja).Rows(i).Copy hm.Rows(u)
                    hm.Cells(u, j).Interior.ColorIndex = 4
                End If
            Next
        Next
    Next
    '
    With hm.Cells
        .Borders(xlEdgeLeft).LineStyle = xlNone
        .Borders(xlEdgeTop).LineStyle = xlNone
        .Borders(xlEdgeBottom).LineStyle = xlNone
        .Borders(xlEdgeRight).LineStyle = xlNone
        .Borders(xlInsideVertical).LineStyle = xlNone
        .Borders(xlInsideHorizontal).LineStyle = xlNone
    End With
    With hm.UsedRange
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
    End With
    '
    u = hm.Range("A" & Rows.Count).End(xlUp).Row
    With hm.Sort
        .SortFields.Clear
        .SortFields.Add Key:=hm.Range("A2:A" & u), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange hm.Range("A1:X" & u)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    'mostramos el resultado del filtro avanzado en el textbox
    ListBox1.RowSource = Empty
    ListBox1.RowSource = hm.Name & "!A2:X" & u
End Sub

Saludos.Dante Amor

me gusta

pero lo que busco primero es que

En el userform al darle click en el optionbutton se muestres las 4 listas de un solo y ordenadas alfabéticamente.

la idea es que se muestren las 4 listas completas primero en el listbox (que se vean las 4 listas juntas y ordenadas en el listbox), y luego opcionalmente que se pueda buscar por entre fechas.

Podrías crear otra pregunta, esta pregunta la tomo para poner las 4 listas en el listbox cuando presionas el optionbutton; y en la pregunta metemos lo del filtro por fecha, recuerda que es una pregunta por cada petición.

Private Sub OptionButton1_Click()
'Por.Dante Amor
    Dim fec1 As Date, fec2 As Date
    Set hm = Sheets("datosm")
    '
    hm.Cells.Clear
    Sheets("datos").Rows(1).Copy hm.Rows(1)
    '
    hs = Array("datos", "datos2", "datos3", "datos4")
    For h = LBound(hs) To UBound(hs)
        hoja = hs(h)
        For i = 2 To Sheets(hoja).Range("A" & Rows.Count).End(xlUp).Row
            If Sheets(hoja).Cells(i, "A") <> "" Then
                u = hm.Range("A" & Rows.Count).End(xlUp).Row + 1
                Sheets(hoja).Rows(i).Copy hm.Rows(u)
            End If
        Next
    Next
    '
    With hm.Cells
        .Borders(xlEdgeLeft).LineStyle = xlNone
        .Borders(xlEdgeTop).LineStyle = xlNone
        .Borders(xlEdgeBottom).LineStyle = xlNone
        .Borders(xlEdgeRight).LineStyle = xlNone
        .Borders(xlInsideVertical).LineStyle = xlNone
        .Borders(xlInsideHorizontal).LineStyle = xlNone
    End With
    With hm.UsedRange
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
    End With
    '
    u = hm.Range("A" & Rows.Count).End(xlUp).Row
    With hm.Sort
        .SortFields.Clear
        .SortFields.Add Key:=hm.Range("A2:A" & u), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange hm.Range("A1:X" & u)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    'mostramos el resultado del filtro avanzado en el textbox
    ListBox1.RowSource = Empty
    ListBox1.RowSource = hm.Name & "!A2:X" & u
End Sub

Saludos.Dante Amor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas