Continuando con la entrada anterior (ver), donde empezamos a explicar cómo construir un UserForm en el Editor de VBA de Excel, empezaremos por recordar el aspecto logrado para nuestro Formulario:
Los códigos que debemos añadir para cada uno de los controles son.
Para el ComboBox1 que desplegará los nombres de las Hojas (Países), salvo la hoja 'Consolidado':
Para el ComboBox2 que desplegará los nombres de los clientes:
Para que el TextBox1 sólo admita valores numéricos:
Para que el CommandButton1 ejecute la búsqueda e introduzca el valor del TextBox1 en la hoja seleccionada con el ComboBox1 (País) y asociada al cliente elegido con el ComboBox2:
Ya sólo nos falta llamar a nuestro formulario desde nuestra hoja de trabajo 'Consolidado', lo que haremos, por ejemplo, asignando la siguiente macro a un botón (macro insertada en un Módulo del Explorador de proyecto dentro del Editor de VBA):
Los códigos que debemos añadir para cada uno de los controles son.
Para el ComboBox1 que desplegará los nombres de las Hojas (Países), salvo la hoja 'Consolidado':
Private Sub ComboBox1_enter()
'En caso de error, que continúe
On Error Resume Next
'limpiamos el ComboBox
ComboBox1.Clear
'Vamos a llenar dinámicamente el combobox
pais = ActiveWorkbook.Worksheets.Count
For i = 1 To pais
'Añadimos todas las hojas del libro al Combobox, excepto la llamada 'Consolidado'
If Sheets(i).Name <> "Consolidado" Then ComboBox1.AddItem Sheets(i).Name
Next
End SubPara el ComboBox2 que desplegará los nombres de los clientes:
Private Sub ComboBox2_enter() 'En caso de error, que continúe On Error Resume Next 'limpiamos el ComboBox ComboBox2.Clear 'Añadimos los valores de las celdas del rango A2:A6 de la hoja 'Consolidado' ComboBox2.RowSource = "'Consolidado'!A2:A6" End Sub
Para que el TextBox1 sólo admita valores numéricos:
Private Sub TextBox1_Change()
'verificamos que el valor introducido es numérico
If Not IsNumeric(TextBox1.Value) And TextBox1.Value <> vbNullString Then
MsgBox "Solo números!!!"
TextBox1.Value = vbNullString
End If
End SubPara que el CommandButton1 ejecute la búsqueda e introduzca el valor del TextBox1 en la hoja seleccionada con el ComboBox1 (País) y asociada al cliente elegido con el ComboBox2:
Private Sub CommandButton1_Click()
Dim fila As Integer
'buscamos la celda correspondiente a la hoja seleccionada en el ComboBox1
'y el cliente seleccionado en el ComboBox2
For i = 2 To 6
If Worksheets(ComboBox1.Value).Cells(i, 1).Value = ComboBox2.Value Then fila = i
Next i
'comprobamos si está rellena la celda o no
If Worksheets(ComboBox1.Value).Cells(fila, 2).Value = "" Then
Worksheets(ComboBox1.Value).Cells(fila, 2).Value = TextBox1.Value
Else
mensaje = MsgBox("La celda está ya rellena.", vbOKCancel, "Atención!!")
If mensaje = vbCancel Then
UserForm1.ComboBox1.SetFocus
End If
End If
End SubYa sólo nos falta llamar a nuestro formulario desde nuestra hoja de trabajo 'Consolidado', lo que haremos, por ejemplo, asignando la siguiente macro a un botón (macro insertada en un Módulo del Explorador de proyecto dentro del Editor de VBA):
Sub formulario() UserForm1.Show End Sub




No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.