Macro buscar dato en hoja que cumpla dos condicine
Buenas Tardes... En días pasados obtuve una respuesta similar acerca de buscar un dato en una columna y que a la vez esta cumpliera con una condición en la columna siguiente en la misma dirección de la fila. De ser encontrado el dato ejecutara un bucle hasta que encontrara dicho dato con la condición.
El inconveniente se presenta cuando hace la segunda búsqueda solo aplica la primera condición y no tiene en cuenta la segunda condición. Osea en la instrucción
Set busca = .FindNext(busca)
Es espera de sul colaboración:
Este es el código que tengo:
Private Sub CommandButton14_Click()
Dim valor2 As String
Dim valor3 As String
valor2 = ComboBox3
valor3 = ComboBox4
Dim busca As Object
Dim hojaBusc As String, quebusco As String, mihoja As String
Dim filalibre As Integer
Dim filalibre2 As Integer
Dim filalibre3 As Integer
Dim filalibre4 As Integer
Dim quebusco3 As String
Dim primero As String
filalibre = 2
filalibre2 = 14
filalibre3 = 26
filalibre4 = 93
hojaBusc = "L_RECIBOS"
quebusco = valor2
quebusco3 = valor3
'ORDENAR TABLA
Columns("A:AB").Select
ActiveWorkbook.Worksheets("L_RECIBOS").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("L_RECIBOS").Sort.SortFields.Add Key:=Range( _
"D2:D28"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("L_RECIBOS").Sort
.SetRange Range("A1:AB28")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' YA ORDENO LA TABLA
With Sheets(hojaBusc).Range("H1:H65000")
Set busca = .Find(quebusco, LookIn:=xlValues, LookAt:=xlWhole)
If Not busca Is Nothing Then
primero = busca.Address
If busca.Offset(0, -6) = quebusco3 Then
Do
Controls("Textbox" & CStr(filalibre)).Value = busca.Offset(0, 13) 'dato de col A
Controls("Textbox" & CStr(filalibre2)).Value = busca.Offset(0, 19) 'dato de col A
Controls("Textbox" & CStr(filalibre3)).Value = busca.Offset(0, 20) 'dato de col A
Controls("Label" & CStr(filalibre4)).Caption = busca.Offset(0, -5) 'dato de col A
filalibre = filalibre + 1
filalibre2 = filalibre2 + 1
filalibre3 = filalibre3 + 1
filalibre4 = filalibre4 + 1
Set busca = .FindNext(busca)
Loop While Not busca Is Nothing And busca.Address <> primero
End If
Else
MsgBox "No Hay dato para Mostrar"
ComboBox3.SetFocus
End If
End With
Set busca = Nothing
End Sub
El inconveniente se presenta cuando hace la segunda búsqueda solo aplica la primera condición y no tiene en cuenta la segunda condición. Osea en la instrucción
Set busca = .FindNext(busca)
Es espera de sul colaboración:
Este es el código que tengo:
Private Sub CommandButton14_Click()
Dim valor2 As String
Dim valor3 As String
valor2 = ComboBox3
valor3 = ComboBox4
Dim busca As Object
Dim hojaBusc As String, quebusco As String, mihoja As String
Dim filalibre As Integer
Dim filalibre2 As Integer
Dim filalibre3 As Integer
Dim filalibre4 As Integer
Dim quebusco3 As String
Dim primero As String
filalibre = 2
filalibre2 = 14
filalibre3 = 26
filalibre4 = 93
hojaBusc = "L_RECIBOS"
quebusco = valor2
quebusco3 = valor3
'ORDENAR TABLA
Columns("A:AB").Select
ActiveWorkbook.Worksheets("L_RECIBOS").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("L_RECIBOS").Sort.SortFields.Add Key:=Range( _
"D2:D28"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("L_RECIBOS").Sort
.SetRange Range("A1:AB28")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' YA ORDENO LA TABLA
With Sheets(hojaBusc).Range("H1:H65000")
Set busca = .Find(quebusco, LookIn:=xlValues, LookAt:=xlWhole)
If Not busca Is Nothing Then
primero = busca.Address
If busca.Offset(0, -6) = quebusco3 Then
Do
Controls("Textbox" & CStr(filalibre)).Value = busca.Offset(0, 13) 'dato de col A
Controls("Textbox" & CStr(filalibre2)).Value = busca.Offset(0, 19) 'dato de col A
Controls("Textbox" & CStr(filalibre3)).Value = busca.Offset(0, 20) 'dato de col A
Controls("Label" & CStr(filalibre4)).Caption = busca.Offset(0, -5) 'dato de col A
filalibre = filalibre + 1
filalibre2 = filalibre2 + 1
filalibre3 = filalibre3 + 1
filalibre4 = filalibre4 + 1
Set busca = .FindNext(busca)
Loop While Not busca Is Nothing And busca.Address <> primero
End If
Else
MsgBox "No Hay dato para Mostrar"
ComboBox3.SetFocus
End If
End With
Set busca = Nothing
End Sub
1 Respuesta
Respuesta de Elsa Matilde
1