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.

