Curso Macros en Excel – Cap. 80 – Agenda telefónica desde cero PARTE 3
En este capítulo daremos seguimiento a nuestro Proyecto de Agenda telefónica desde cero usando macros y VBA en Excel. En esta tercera parte veremos cómo implementar el Calendario de Andrés Rojas Moncada en nuestro propio Formulario de Alta, así como usar funciones VBA para restringir el ingreso de texto o número en ciertos controles de texto.
Ver video Capítulo 80 Excel VBA & Macros
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Avance del Proyecto
Como lo has notado, este es el tercer video del Proyecto de nuestra agenda telefónica, pero el número 80 de nuestro curso de macros. A continuación enlisto lo que ya hemos hecho y lo que haremos en este capítulo.
-
Calendario y permitir solo texto o números. PARTE 3.
Calendario en UserForm
Para poder insertar la fecha de nacimiento haremos uso del Calendario de Andrés Rojas Moncada, del cual ya hicimos una revisión en este mismo sitio.
Como vimos anteriormente, para usar el control de calendario de Office lo debemos instalar, pero si tenemos Excel de 64 bits entonces no hay manera de poder usarlo. Ante este inconveniente, mi amigo Andrés Rojas Moncada del canal Excel hecho fácil desarrolló un genial control de calendario que fácilmente podemos adecuar a nuestros desarrollos, sin necesidad e instalar nada.
-
En este video Andrés nos explica el funcionamiento de su calendario.
-
Descarga el control de calendario desde esta página: http://www.excelhechofacil.com/p/calendario.html.
-
Abrimos el archivo cCalendario.xlsm.
-
Ejecutar el editor de macros vba con [Alt] + [F11].
-
Ahora vamos a mover el módulo llamado ModuloCalendario y el formulario llamado frmCalendario a nuestro archivo donde queremos utilizar el calendario de Andrés.
Figura 1. Movemos los archivos frmCalendario y ModuloCalendario de un proyecto a otro.
Ahora podemos cerrar el archivo cCalendario.xlsm. Los elementos que hemos movido a nuestro archivo debemos de hacerles unas pocas modificaciones para que podamos mandar llamar al calendario.
Damos doble clic en el botón que insertamos, el que se ve en la Figura 1 con la imagen del calendario, y pegamos el siguiente código:
Private Sub CommandButton3_Click() frmCalendario.Show End Sub
-
Ahora nos vamos al editor de macros vba y damos doble clic sobre el Módulo ModuloCalendario.
-
Ubica una macro que se llama RecibeLaFecha y reemplaza la macro con el siguiente código:
Public Sub RecibeLaFecha(Dia As Long, Mes As Long, Ano As Long) Dim FechaRecibida As Date FechaRecibida = VBA.DateSerial((VBA.CInt(Ano)), (VBA.CInt(Mes)), (VBA.CInt(Dia))) 'DIRECCIONE LA FECHA AL CONTROL O CELDA QUE REQUIERA 'MsgBox FechaRecibida UserForm1.TextBox5.Value = FechaRecibida End Sub
Con los cambios anteriores, al dar clic en el botón, se mostrará el Calendario. Damos doble clic sobre cualquier número y la fecha se insertará en el TexBox5, de la fecha de nacimiento.
Figura 2. Calendario de Andrés Rojas Moncada del canal Excel Hecho Fácil.
Permitir sólo número o texto en Cuadros de texto
Ahora toca usar un par de funciones que tenemos en este mismo sitio, las cuales son SoloNumero y SoloTexto, que como sus nombres lo indican, van a restringir TextBoxes para que acepten o sólo número o sólo texto.
En este link, vamos a copiar las dos funciones y las pegamos en el Módulo1 de nuestro proyecto.
'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo Function SoloTexto(Texto As Variant) ' Dim Caracter As Variant Dim Largo As String Dim i As Integer On Error Resume Next Largo = Len(Texto) ' For i = 1 To Largo Caracter = CInt(Mid(Texto, i, 1)) ' If Caracter <> "" Then If Not Application.WorksheetFunction.IsText(Caracter) Then Texto = Replace(Texto, Caracter, "") SoloTexto = Texto Else End If End If ' Next i ' SoloTexto = Texto On Error GoTo 0 ' End Function ' Function SoloNumero(Texto As Variant) ' Dim Caracter As Variant Dim Largo As Integer Dim i As Integer On Error Resume Next Largo = Len(Texto) ' For i = 1 To Largo Caracter = Mid(CStr(Texto), i, 1) ' If Caracter <> "" Then If Caracter < Chr(48) Or Caracter > Chr(57) Then Texto = Replace(Texto, Caracter, "") SoloNumero = Texto Else End If End If ' Next i ' SoloNumero = Texto On Error GoTo 0 ' End Function
La ventaja de usar funciones en Excel y VBA, es que las podemos reutilizar las veces que deseemos sin necesidad de repetir todo el código cada vez que necesitemos usarlas en algún Cuadro de texto.
Usamos el siguiente código para mandar llamar las funciones y permitir sólo texto en los campos de nombre, y sólo número en los campos de teléfono y CP.
Private Sub TextBox1_Change() Me.TextBox1.Value = SoloTexto(Me.TextBox1.Value) End Sub Private Sub TextBox6_Change() Me.TextBox6.Value = SoloNumero(Me.TextBox6.Value) End Sub
Descarga el archivo de ejemplo
080 – Proyecto Agenda 03 -Insertar calendario, validar texto y números – EXCELeINFO.xlsm
Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.