Vincular combobox sin repetir dato inicial
Hola!
Me pasaste este código:
Sub CopiaDistintos(colini As Integer, desde As Integer, hasta As Integer, _
colfin As Integer, desdefin As Integer)
Dim i As Integer
Dim j As Integer
Range(Cells(desdefin, colfin), Cells(65000, colfin)).Clear 'borra datos de la columna destino
j = desdefin
For i = desde To hasta
If Encuentra(Cells(i, colini).Value, colfin, desdefin, j) = 0 Then 'no esta y lo copio
Cells(j, colfin).Value = Cells(i, colini).Value
j = j + 1
End If
Next i
End Sub
Sub CargaCombo(col As Integer, com As ComboBox)
'Carga el combo con los elementos de una columa
Dim i As Integer
Dim maxi As Integer
com.Clear
maxi = Cells(1, col).End(xlDown).Row
For i = 1 To maxi 'cargo el combobox
com.AddItem (Cells(i, col).Value)
Next i
End Sub
Function Encuentra(s As String, col As Integer, desde As Integer, hasta As Integer) As Integer
'Indica la fila donde está lo buscado o 0 si no está
Dim esta As Boolean
Dim i As Integer
esta = False
i = desde - 1
While Not esta And (i < hasta)
i = i + 1
If Cells(i, col).Value = s Then
esta = True
End If
Wend
If esta Then Encuentra = i Else Encuentra = 0
End Function
Private Sub UserForm_Initialize()
Dim i As Integer
Dim maxi As Integer
Dim s As String
maxi = Cells(1, 1).End(xlDown).Row 'largo de la columna 1 donde está el origen
Call CopiaDistintos(1, 1, maxi, 20, 1) 'copia temporal a la celda (20,1) y sucesivas
Call CargaCombo(20, ComboBox1)
End Sub
Private Sub ComboBox1_Change()
Dim i As Integer
Dim maxi As Integer
ComboBox2.Clear
maxi = Cells(1, 2).End(xlDown).Row
For i = 1 To maxi 'cargo el combobox2
If Cells(i, 1).Value = ComboBox1.Text Then
ComboBox2.AddItem (Cells(i, 2).Value)
End If
Next i
End Sub
Que me funciona mejor que otro que me pasaron, tengo una pequeña duda sobre esto, si quiero que coja los datos del combobox1 de la columna G, y los datos del combobox2 de la columna L, ¿qué debo hacer?
Gracias por tu tiempo.
Saludos!
Me pasaste este código:
Sub CopiaDistintos(colini As Integer, desde As Integer, hasta As Integer, _
colfin As Integer, desdefin As Integer)
Dim i As Integer
Dim j As Integer
Range(Cells(desdefin, colfin), Cells(65000, colfin)).Clear 'borra datos de la columna destino
j = desdefin
For i = desde To hasta
If Encuentra(Cells(i, colini).Value, colfin, desdefin, j) = 0 Then 'no esta y lo copio
Cells(j, colfin).Value = Cells(i, colini).Value
j = j + 1
End If
Next i
End Sub
Sub CargaCombo(col As Integer, com As ComboBox)
'Carga el combo con los elementos de una columa
Dim i As Integer
Dim maxi As Integer
com.Clear
maxi = Cells(1, col).End(xlDown).Row
For i = 1 To maxi 'cargo el combobox
com.AddItem (Cells(i, col).Value)
Next i
End Sub
Function Encuentra(s As String, col As Integer, desde As Integer, hasta As Integer) As Integer
'Indica la fila donde está lo buscado o 0 si no está
Dim esta As Boolean
Dim i As Integer
esta = False
i = desde - 1
While Not esta And (i < hasta)
i = i + 1
If Cells(i, col).Value = s Then
esta = True
End If
Wend
If esta Then Encuentra = i Else Encuentra = 0
End Function
Private Sub UserForm_Initialize()
Dim i As Integer
Dim maxi As Integer
Dim s As String
maxi = Cells(1, 1).End(xlDown).Row 'largo de la columna 1 donde está el origen
Call CopiaDistintos(1, 1, maxi, 20, 1) 'copia temporal a la celda (20,1) y sucesivas
Call CargaCombo(20, ComboBox1)
End Sub
Private Sub ComboBox1_Change()
Dim i As Integer
Dim maxi As Integer
ComboBox2.Clear
maxi = Cells(1, 2).End(xlDown).Row
For i = 1 To maxi 'cargo el combobox2
If Cells(i, 1).Value = ComboBox1.Text Then
ComboBox2.AddItem (Cells(i, 2).Value)
End If
Next i
End Sub
Que me funciona mejor que otro que me pasaron, tengo una pequeña duda sobre esto, si quiero que coja los datos del combobox1 de la columna G, y los datos del combobox2 de la columna L, ¿qué debo hacer?
Gracias por tu tiempo.
Saludos!
1 Respuesta
Respuesta de prozac
1