Curso Macros en Excel – Cap. 82 – Agenda telefónica desde cero PARTE 5
En este capítulo daremos seguimiento a nuestro Proyecto de Agenda telefónica desde cero usando macros y VBA en Excel. En esta quinta entrega haremos algunas modificaciones al código previamente escrito, además de poner una validación a los números telefónicos para que se acepten solo valores a 10 dígitos. Y lo más importante, vamos a escribir una macro para validar los campos vacíos del Formulario Alta, antes de guardar los valores en la hoja BASE.
Ver video Capítulo 81 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 quinto video del Proyecto de nuestra agenda telefónica, pero el número 82 de nuestro curso de macros. A continuación enlisto lo que ya hemos hecho y lo que haremos en este capítulo.
-
Validar números telefónicos a 10 dígitos. PARTE 5.
-
Validar controles vacíos antes de guardar los valores. PARTE 5.
Números telefónicos a 10 dígitos
En videos anteriores vimos cómo configurar los Cuadros de texto (TextBox) de teléfono celular y teléfono e contacto, para que solo acepten valores numéricos. Ahora lo que haremos es que sólo se acepten números con longitud de 10 dígitos y no permita avanzar hasta que se cumpla con esa condición.
Figura 1. Permitir sólo números a 10 dígitos.
Evento Exit para validar longitud de teléfono
Haremos uso del Evento Exit en los controles de teléfono celular (valor7) teléfono particular (valor8), para que mediante el método LEN, se evalúe si los números cumplen con la longitud de 10. En caso no cumplir esa condición no podremos avanzar, y para eso usamos Cancel = true.
'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo Private Sub valor7_Exit(ByVal Cancel As MSForms.ReturnBoolean) If VBA.Len(Me.valor7.Value) <> 10 Then MsgBox "El número debe estar a 10 dígitos", vbExclamation Cancel = True Else 'nada End If End Sub Private Sub valor8_Exit(ByVal Cancel As MSForms.ReturnBoolean) If VBA.Len(Me.valor8.Value) <> 10 Then MsgBox "El número debe estar a 10 dígitos", vbExclamation Cancel = True Else 'nada End If End Sub
Validar campos vacíos antes de GUARDAR
Recordemos que todos lo controles del Formulario tiene el nombre de “valor1” hasta “valor16”, para que mediante el ciclo FOR NEXT podamos recorrer todos los controles con poco código VBA en Excel. En esta ocasión vamos a escribir un Procedimiento que se llamará ValidarVacios, el cual nos ayudará a recorrer todos los controles del Formulario y cuando encuentre vacíos, les asignará un color naranja al fondo, para identificar que el campo está vacío. Hasta que no hay controles vacíos, ya se podrán guardar los datos.
Figura 2. Validar controles vacíos antes de GUARDAR Formulario de Excel VBA.
Código VBA para validar controles vacíos
El siguiente Procedimiento debe ir alojado en el Módulo1, para luego ser llamado desde el botón GUADAR.
Option Explicit Public ControlesVacios Sub ValidarVacios() 'Validamos controles vacíos Dim FormActivo As UserForm 'ControlesVacios es Public Dim i As Integer Set FormActivo = VBA.UserForms(0) ControlesVacios = 0 With FormActivo For i = 1 To 16 If .CheckBox1.Value = True And (i = 9 Or i = 10) Then 'nada .Controls("valor" & i).BackColor = VBA.vbWhite Else If .Controls("valor" & i).Value = "" Then .Controls("valor" & i).BackColor = VBA.RGB(237, 125, 49) ControlesVacios = ControlesVacios + 1 Else .Controls("valor" & i).BackColor = VBA.vbWhite End If End If Next i End With 'MsgBox ControlesVacios End Sub
También el botón GUARDAR recibe una modificación, ya que debe llamar a la macro ValidarVacios.
Private Sub CommandButton1_Click() Dim HojaBase As Worksheet Dim Rango As Range Dim NuevaFila As Integer Dim NuevoID As Integer Dim i As Integer Set HojaBase = ThisWorkbook.Sheets("Base") Set Rango = HojaBase.Range("A1").CurrentRegion NuevaFila = Rango.Rows.Count + 1 '''''''''''''''''''''''' 'Validar campos vacíos Call ValidarVacios If ControlesVacios > 0 Then MsgBox "Hay " & ControlesVacios & " campos vacíos. No se puede continuar", vbExclamation Me.valor1.SetFocus Else If Rango.Rows.Count = 1 Then NuevoID = 1 Else NuevoID = HojaBase.Cells(NuevaFila - 1, 1) + 1 End If With HojaBase .Cells(NuevaFila, 1).Value = NuevoID For i = 1 To 16 .Cells(NuevaFila, i + 1).Value = Me.Controls("valor" & i).Value Next i .Cells(NuevaFila, 18).Value = Me.LabelRuta.Caption End With MsgBox "Alta exitosa", vbInformation Unload Me End If End Sub
Descargar el archivo de ejemplo
082 – Proyecto Agenda 05 – Validar campos vacíos antes de guardar – EXCELeINFO
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.