Dos Combobox relacionados muestran y copian datos en un Userform

En un formulario hay dos Combobox y un Label, el Combobox1 elije una hoja y el Combobox2 muestra Celdas de una única Columna, la idea es que si elijo ver la Celda C5 me muestre en el Label la Celda D5 y la copie a otra hoja, por ejemplo Hoja5 Celda H7.

El trabajo de los dos Combobox lo logre, lo que me falta es el resto, mostrar en el Label y copiar a otra hoja.

En todos los casos en el Label se mostrara la Celda que este a la par de la elegida en el Combobox2 (pej.: C7 - D7) y sera la que se copie a la otra Hoja, siempre la misma y a una misma Celda ya que el dato sera utilizado en una formula.

Si necesita mas información no dude en solicitarla.

1 Respuesta

Respuesta
1

¿Puedes poner cómo estás cargando el combo2?

Hola Dante

Aquí pegue el código que carga el Combobox2. Te agradeceré que también, si es posible, agregar una rutina que evite el movimiento de las hojas del libro mientras trabaja la macro o que lo oculte directamente.

Saludos

Eduardo

Private Sub ComboBox2_Enter()

'Cargar el combobox2 con el dato de la celda de la hojas elegida en el combobox1

'En caso de error, que continúe
On Error Resume Next

'Ocultamos el procedimiento
Application.ScreenUpdating = False

'Limpiamos lo que haya
ComboBox2.Clear

'Pasamos el dato de la hoja, a una variable
hoja_elegida = ComboBox1.List(ComboBox1.ListIndex)

'seleccionamos esa hoja
Sheets(hoja_elegida).Select

'seleccionamos la cela B4
Range("B4").Select

'Llenamos el combo con los datos del combobox1
'para lo cual supondremos que los datos de cada
'hoja están a partir desde B4 hacia abajo, y
'hasta encontrar una fila vacía
Do While Not IsEmpty(ActiveCell)

'Añadimos los nombres de las hojas al combobox
ComboBox2.AddItem ActiveCell

'bajamos una fila
ActiveCell.Offset(1, 0).Select
Loop

'Mostramos el procedimiento

Application.ScreenUpdating = True

End Sub

H o l a: Te anexo el código para cargar los 2 combos. Entiendo que ya tienes el código para cargar los 2 combos, pero te anexo la actualización.

1. Para cargar las hojas en el combo1, pon lo siguiente en el evento initialize. En el ejemplo puse la hoja5 y la hoja6 en un case para que no aparezcan en el combo, lo puse así, por si decides que no todas las hojas se deben cargar; si quieres que se carguen todas las hojas, simplemente quítalas de la línea.

Private Sub UserForm_Initialize()
'Por.Dante Amor
    For Each h In Sheets
        Select Case LCase(h.Name)
            Case "hoja5", "hoja6" 'no carga la hoja5 ni la hoja6 en el combo
            Case Else
                ComboBox1.AddItem h.Name
        End Select
    Next
End Sub

2. Tienes que quitar tu evento "ComboBox2_Enter"   , vamos a cargar el combobox2 con el evento Combobox1.change, es decir, cuando selecciones una hoja en el combo1, en automático se cargará el combo2

Private Sub ComboBox1_Change()
'Act.Por.Dante Amor
    ComboBox2.Clear
    'Revisa si seleccionó una hoja del combobox1
    If ComboBox1.Value = "" Or ComboBox1.ListIndex = -1 Then
        Exit Sub
    End If
    '
    'guarda en hoja el nombre de la hoja
    hoja = ComboBox1.List(ComboBox1.ListIndex)
    'empieza en al fila 4 hasta que ya no haya datos en la columna B
    fila = 4
    Do While Sheets(hoja).Cells(fila, "B").Value <> ""
        ComboBox2.AddItem Sheets(hoja).Cells(fila, "B").Value
        fila = fila + 1
    Loop
End Sub

3. Para actualizar el label, pon el evento Combobox2_Change, de esta forma cuando selecciones un dato del combo2, en automático se actualizará el label y la celda H7 de la hoja5

Private Sub ComboBox2_Change()
'Por.Dante Amor
    Label1.Caption = ""
    'Revisa si seleccionó un dato del combobox2
    If ComboBox2.Value = "" Or ComboBox2.ListIndex = -1 Then
        Exit Sub
    End If
    '
    hoja = ComboBox1.List(ComboBox1.ListIndex)
    fila = ComboBox2.ListIndex + 4
    Label1.Caption = Sheets(hoja).Cells(fila, "D")
    Sheets("Hoja5").Range("H7").Value = Sheets(hoja).Cells(fila, "D")
End Sub

Realiza los cambios en tu formulario.

De la forma en que está programado, no es necesario cambiarse de hoja, por lo tanto no hay movimiento de las hojas ni de las celdas.

Avísame cualquier duda.


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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas