Curso Macros en Excel – Cap. 82 – Agenda telefónica desde cero PARTE 5

<<CURSO COMPLETO EN YOUTUBE>>

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.

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.

Permitir sólo números a 10 dígitos.

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.

Validar controles vacíos antes de GUARDAR Formulario de Excel VBA.

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

<<CURSO COMPLETO EN YOUTUBE>>

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.

You may also like...