PASO 1

Anuncio
068-070
21/11/02 23:53
Página 1
PROGRAMACIÓN
MACROS EXCEL
Controles y formularios en las hojas de cálculo
Félix Alberto Jiménez curro@bpe.es
Como lenguaje de programación visual que es, Visual Basic nos va a permitir
insertar controles y formularios en las hojas de cálculo para hacer visualmente
más atractivas nuestras macros.
N
PASO 3
adie discutirá que, por muy eficaz que sea,
todo programa resulta muchísimo más atractivo con un buen diseño. Basándonos en los
criterios para hacer más efectivos nuestros
formularios que ya explicamos en las primeras entregas del curso, nos ha llegado la hora de aprender
a insertar los controles más comunes en los documentos
de Excel para hacer que nuestras macros sean aún más
efectivas.
Con lo visto a lo largo del curso, todos los controles que
utilizábamos iban insertados en formularios. Esto ocurría, entre otras cosas, porque no contábamos con otros
objetos que fuesen capaces de contener dichos controles.
En esta ocasión, veremos que las hojas de cálculo pueden
contener controles al igual que ocurría con los formularios, si bien, en muchas ocasiones, resultará más cómodo
seguir utilizando formularios para realizar algunas de las
tareas más cotidianas.
Hasta ahora, para poder ejecutar una macro,
teníamos que acudir al diálogo Macro, donde seleccionábamos aquella que queríamos
activar. En esta ocasión, lo que haremos, será insertar un botón de
comando en la propia hoja de cálculo que, al ser pulsado, cargará
el formulario que utilizaremos para insertar los datos. Para ello, lo
primero que debemos hacer es pasar a Modo Diseño (a través del
▼
Realizar un formulario para adquirir y validar valores
PASO 1
Lo primero que debemos hacer es adaptar
una hoja de hoja de cálculo a nuestras necesidades. Para ello, abriremos un nuevo documento de Microsoft Excel y
sobre él haremos las siguientes modificaciones
con el fin de preparar la cabecera de los datos:
escribimos el texto DATOS PERSONALES en la
celda A1, CCC en la celda C1, Nombre en la A2,
Apellidos en la B2, y Entidad, Oficina, Control y
Número de cuenta en las celdas C2, D2, E2 y F2
respectivamente; después, combinamos y centramos las celdas A1 y B1 por un lado y C1, D1,
E1 y F1 por otro. Para finalizar la preparación del documento, podemos
modificar el tamaño de las columnas que ubicarán cada uno de los
campos, cambiar el formato del texto, añadir líneas y bordes, etc.
▼
PASO 2
Private Sub cmdTomarDatos_Click()
‘Al pulsar el botón mostrar el formulario
frmTomarDatos.Show
End Sub
Después de esto, para que nos resulte más
cómodo el trabajo con controles, lo más recomendable es mostrar las barras de herramientas relacionadas con el trabajo que nos ocupa.
Para ello, activamos las entradas Cuadro de controles
y Visual Basic de submenú Barras de herramientas en
el menú Ver. La primera de ellas contiene una colección de controles básicos de Visual Basic con los que
nos resultará más sencillo añadir funcionalidad a la
hoja de cálculo, así como un botón que nos muestra u
oculta las propiedades del control activo y otro para
entrar y salir del Modo de Diseño (aquel en el que
podemos insertar y modificar los controles sobre la
hoja de cálculo). La segunda de las barras contiene,
▼
computer!dea
botón correspondiente de cualquiera de las dos nuevas barras de
herramientas). Ya en modo de diseño, seleccionamos el botón de
comando de la barra de controles y dibujamos un botón en la hoja
de cálculo (fuera del área de datos). Una vez dibujado, cambiamos
a nuestro criterio sus propiedades con la única condición de que el
nombre que reciba el botón sea cmdTomarDatos. Estando en modo
de diseño, con un doble clic sobre el control pasamos a la ventana
de Microsoft Visual Basic (concretamente al código de la hoja 1 del
libro) donde tendremos que añadir la sentencia
fmrTomarDatos.Show al código del procedimiento asociado al
evento Click del botón. Dicho procedimiento ha de quedar del
siguiente modo:
PASO 4
Ahora debemos insertar un formulario en el
proyecto, añadirle los controles necesarios y
programarlos correctamente. Para ello, debemos acudir a la ventana de Microsoft Visual Basic (si nos encontramos ante la hoja de cálculo pulsamos el botón Editor de Visual Basic
de la barra de herramientas Visual Basic). Una vez allí, añadimos el
formulario con la función UserForm del menú Insertar. Para mostrar
la ventana de propiedades de los formulario y los controles, basta
con pulsar la tecla F4. En dicha ventana, adjudicamos al nuevo formulario el nombre frmTomarDatos.
68
diciembre 2002
068-070
21/11/02 23:53
Página 2
PASO 5
Dentro del nuevo formulario
hemos de insertar una serie de
controles a los que cada uno puede dar su toque personal. Para que el código propuesto
funcione correctamente es imprescindible insertar 6 cuadros de texto con los nombres txtNombre, txtApellidos,
txtEntidad, txtOficina, txtControl y txtCuenta. Es recomendable utilizar etiquetas para que el usuario pueda distinguirlos. También es necesario añadir 2 botones de
comando con los nombres cmdAceptar y cmdTerminar.
Para que la movilidad por el formulario sea óptima, es
recomendable utilizar el siguiente orden de tabulación:
Nombre del control
txtNombre
txtApellidos
txtEntidad
txtOficina
txtControl
txtCuenta
cmdAceptar
cmdTerminar
Valor de la propiedad TabIndex
0
1
2
3
4
5
6
7
PASO 6
Por último, tan sólo tenemos que
añadir el código del formulario
que, como podréis observar, interactúa continuamente con la hoja de cálculo:
‘Forzamos la declaración de variables
Option Explicit
Private Sub UserForm_Activate()
‘Activamos la primera celda
‘susceptible de contener datos
ActiveSheet.Range(“a3”).Activate
‘Buscamos la primera fila sin
‘datos en la columna nombre
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate
Loop
End Sub
Private Sub cmdAceptar_Click()
‘Antes de ingresar los datos
‘comprobamos que sean correctos
ValidarCampos
End Sub
Private Sub cmdTerminar_Click()
‘Descargamos el formulario
Unload frmTomarDatos
End Sub
Private Sub txtEntidad_Change()
‘Al escribir los 4 dígitos de la entidad
‘pasamos al siguiente campo
If Len(txtEntidad.Text) = 4 Then
txtOficina.SetFocus
End If
End Sub
Private Sub txtOficina_Change()
‘Al escribir los 4 dígitos de la oficina
‘pasamos al siguiente campo
If Len(txtOficina.Text) = 4 Then
txtControl.SetFocus
End If
End Sub
▼
MACROS EXCEL
Private Sub txtControl_Change()
‘Al escribir los 2 dígitos de control
‘pasamos al siguiente campo
If Len(txtControl.Text) = 2 Then
txtCuenta.SetFocus
End If
End Sub
Private Sub txtCuenta_Change()
‘Al escribir los 10 dígitos del número
‘de cuenta situamos el foco sobre el
‘botón cmdAceptar
If Len(txtCuenta.Text) = 10 Then
cmdAceptar.SetFocus
End If
End Sub
Private Sub ValidarCampos()
‘Declaramos el procedimiento como privado
‘porque es específico del formulario
‘Declaramos una variable de tipo String
Dim Error As String
Dim ValorMensaje As Integer
‘Inicializamos el valor del mensaje de error
Error = “Error en los datos del formulario”
‘Si el campo Nombre está vacío
If Len(txtNombre.Text) = 0 Then
‘Mostramos mensaje de error
ValorMensaje = MsgBox(“El campo Nombre está vacío”, _
vbOKOnly, Error)
‘Situamos el foco sobre el campo Nombre
txtNombre.SetFocus
Else
‘Si el campo Apellidos está vacío
If Len(txtApellidos.Text) = 0 Then
‘Mostramos el mensaje de error
ValorMensaje = MsgBox _
(“El campo Apellidos está vacío”, vbOKOnly,
Error)
‘Situamos el foco sobre el campo Apellidos
txtApellidos.SetFocus
Else
‘Si no hubo fallos
‘insertamos
With ActiveCell
‘Sobre la celda activa el Nombre
.Value = txtNombre
‘Sobre la de la columna siguiete
‘los apellidos
.Offset(0, 1).Value = txtApellidos
‘2 columnas después de la activa
‘el código de la entidad
.Offset(0, 2).Value = txtEntidad
‘3 columnas después de la activa
‘el código de la oficina
.Offset(0, 3).Value = txtOficina
‘a continuación el de control
.Offset(0, 4).Value = txtControl
computer!dea
70
diciembre 2002
‘y por último el de la cuenta
.Offset(0, 5).Value = txtCuenta
End With
‘Pasamos a la siguiente fila
‘por si se ingresan más datos
ActiveCell.Offset(1, 0).Activate
‘Borramos el formulario
BorrarFormulario
End If
End If
End Sub
Private Sub BorrarFormulario()
‘Ponemos la cadena vacía
‘a todos los campos
txtNombre.Text = “”
txtApellidos.Text = “”
txtEntidad.Text = “”
txtOficina.Text = “”
txtControl.Text = “”
txtCuenta.Text = “”
‘Situamos el foco en el campo Nombre
txtNombre.SetFocus
End Sub
Propuesta
Como objetivo antes de la próxima entrega del curso, deberemos tratar de validar los 4 campos numéricos de la cuenta, de modo que si el usuario escribe
un carácter no numérico en cualquiera de ellos el
ordenador emita un sonido y desprecie dicho carácter. También habrá que controlar el tamaño de los
campos de modo que los 4 numéricos estén vacíos o
contengan los 20 números de la cuenta correctamente repartidos. Como ayuda, si recordáis, algo parecido a la primera parte de la propuesta ya lo resolvimos en la calculadora de euros. Por último,
debemos tener en cuenta que para que el botón de
comando cmdTomarDatos sea operativo hemos de
salir del modo de diseño.
Descargar