domingo, 4 de diciembre de 2011

Crear un formulario (UserForm) en Excel y II.

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:

Crear un formulario (UserForm) en Excel.


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 Sub



Para 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 Sub



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:

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 Sub



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):

Sub formulario()
UserForm1.Show
End Sub


Crear un formulario (UserForm) en Excel.

No hay comentarios:

Publicar un comentario en la entrada