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 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
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.