Enviar datos a una celda de varios combobox

Hola
Tengo un un userform con varios combobox (al rededor de 10), quiero que al seleccionar los combobox me envíe lo seleccionado en él a unas determinadas celdas de la hoja de excel
Yo tengo que hacer una búsqueda con los nombres de los combobox de tal manera que determine la fila y en la columna siguiente colocar el contenido de su correspondiente combobox, algo muy parecido hago con los checkbox
el código que uso para los checkbox es:
Private Sub marcar()
Dim ctl As Control
Dim mytext As String
Dim ctrl As Control
Dim buscar As String
buscar = 0
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.CheckBox Then
            If ctrl.Value = True Then
            On Error Resume Next
            buscar = ctrl.Caption
            fil = Cells.Find(What:=buscar, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                        False).Row
                Sheets("hoja1").Range("d" & fil).FormulaR1C1 = "x"
            End If
        End If
    Next
End Sub
Pero no se como hacerlo para los combobox, ¿sabiendo qué lo que debe buscar es el nombre de el y así determinar la columna y después enviar lo seleccionado en el combobox
alguna sugerencia?

1 respuesta

Respuesta
1
Puedes usar la Propiedad ControlSource del ComboBox para determinar en que celda debe colocar su contenido.
Si esta solución no es la que buscas, entonces puedes usar este truco:
Nombra a cada ComboBox con el nombre de la celda donde quieres colocar su contenido. Por ejemplo, si un ComboBox debe colocar su contenido en B20 entonces dale el nombre "B020" y mediante los comandos left y right, capturas la celda que tiene vinculada ese ComboBox.
Este seria el código :
Private Sub CommandButton1_Click()
    For Each ctrl In Me.Controls
    If TypeOf ctrl Is MSForms.ComboBox Then
    Columna = Left(ctrl.Name, 1)
    Fila = Val(Right(ctrl.Name, 3))
    Range(Columna & Fila) = ctrl
    End If
    Next
End Sub
Observa que el numero (020) tiene tres dígitos por si la celda esta por encima de la celda 99.
Gracias por responder
Las dos maneras funcionan perfectamente, aunque lo que necesito es que no sea dependiente de la posición de la celda puesto que al agregar una fila tendría que hacer los cambios a todos los comboboxes, por eso tengo la función cells.find
Con su ejemplo caí en cuenta de un error que estaba cometiendo con la utilización de los combobox y lo he resuelto sencillamente con el código a continuación:
For Each ctrl In Me.Controls
    If TypeOf ctrl Is MSForms.ComboBox Then
            On Error Resume Next
            buscar = ctrl.Name
            fil = Cells.Find(What:=buscar, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                        False).Row
                Sheets("hoja1").Range("b" & fil).FormulaR1C1 = ctrl
            End If
    Next
Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas