Como usar If Then Else en macro




La instrucción If ...Then...Else se utiliza para ejecutar uno o varios códigos determinados,  pero dependiendo de una condición; se puede anidar tantas funciones If ...Then...Else como se necesiten, pero es más eficiente cuando se debe analizar muchas condiciones utilizar Select Case, que se verá en otro post.

Cuando se debe ejecutar una sola instrucción después de evaluar una condición se puede usar una forma sencilla como: If condición Then código a realizar.

Antes de continuar, recomiendo que leas un excelente libro sobre Excel el que te ayudará operar las planillas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

Ahora bien, cuando después de evaluar la condición, se deben realizar varias condiciones se debe usar la siguiente forma:

If condición Then

código 

Else (opcional)

código

End If


En caso que no se cumpla la condición se puede establecer que se debe realizar en caso contrario, para ello se utiliza Else; es decir se evalúa la condición en caso verdadero se ejecuta un código en caso contrario (Else) se ejecuta otro código, para terminar se debe utilizar End If, caso contrario el código podría no comportarse como se requiere o podría producir un error de sintaxis.


  

En los siguientes link encontrarás ejemplos del uso de If ...Then...Else:

Instrucción If ...Then...Else anidada

Formulario Ingreso y Egreso de Stock, encontraras en varias partes del código el uso de la Instrucción If ...Then...Else 

En este link encontrarás otra gran cantidad de ejemplos que usan la Instrucción If ...Then...Else 

El código que se encuentra a continuación pertenece a un ejemplo de macro que tiene por finalidad llenar un combobox y luego sumar los datos repetidos, descargar desde este link, se podrá observar también el uso de la instrucción bajo estudio, donde también se usa otra instrucción For...Next.

Suscribe al blog para recibir en tu correo todas las actualizaciones, dispones también de un canal de You Tube donde encontrarás explicaciones de macros con mayor detalle.

Código que se inserta en un módulo



Public nomlibro, dire, dire1, p As String 
Private Sub ComboBox1_Change()
Range("r2:u3") = ClearContents
If ComboBox2 = Empty Then
MsgBox ("Debe seleccionar Nombre"), vbInformation, "AVISO"
ComboBox2.SetFocus
Exit Sub
End If
ComboBox2_Change
End Sub
Private Sub ComboBox2_Change()
On Error Resume Next
Application.ScreenUpdating = False
Dim uf, ufcat, filadir, filacat, contad, contap, contadc, contamc As Integer
Range("r2:u3") = ClearContents

If ComboBox1 = Empty Then
MsgBox ("Debe seleccionar Nombre"), vbInformation, "AVISO"
ComboBox1.SetFocus
Exit Sub
End If

dire = ComboBox2
nomlibro = ActiveWorkbook.Name
p = ActiveWorkbook.Path
dire1 = p & "\" & nomlibro

If dire = dire1 Then
        TextBox1 = Clear
        TextBox2 = Clear
        TextBox3 = Clear
        TextBox4 = Clear
        
        
        contad = 0
        contap = 0
        contadc = 0
        contamc = 0
        perfind = ComboBox1
        ufcat = Sheets("Proyectos").Range("H" & Rows.Count).End(xlUp).Row
        
        For i = 2 To ufcat
        a = Sheets("Proyectos").Cells(i, 6)
        If a = perfind Then contad = contad + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 19) Then contap = contap + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 20) Then contadc = contadc + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 21) Then contamc = contamc + 1
        Next i
        
        If nomlibro <> dire Then
        Sheets("Proyectos").Cells(2, 18) = contad
        Sheets("Proyectos").Cells(2, 19) = contap
        Sheets("Proyectos").Cells(2, 20) = contadc
        Sheets("Proyectos").Cells(2, 21) = contamc
        
        Else
        
        Sheets("Proyectos").Cells(3, 18) = contad
        Sheets("Proyectos").Cells(3, 19) = contap
        Sheets("Proyectos").Cells(3, 20) = contadc
        Sheets("Proyectos").Cells(3, 21) = contamc
        End If
        
        TextBox1 = contad
        TextBox2 = contap
        TextBox3 = contadc
        TextBox4 = contamc
Else
  Application.Workbooks.Open dire
  Sheets("Proyectos").Select
        TextBox1 = Clear
        TextBox2 = Clear
        TextBox3 = Clear
        TextBox4 = Clear
            
        contad = 0
        contap = 0
        contadc = 0
        contamc = 0
        
        perfind = ComboBox1
        ufcat = Sheets("Proyectos").Range("H" & Rows.Count).End(xlUp).Row
        
        For i = 2 To ufcat
        a = Sheets("Proyectos").Cells(i, 6)
        If a = perfind Then contad = contad + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 19) Then contap = contap + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 20) Then contadc = contadc + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 21) Then contamc = contamc + 1
        Next i
        
        If dire = dire1 Then
        Sheets("Proyectos").Cells(2, 18) = contad
        Sheets("Proyectos").Cells(2, 19) = contap
        Sheets("Proyectos").Cells(2, 20) = contadc
        Sheets("Proyectos").Cells(2, 21) = contamc
        
        Else
        ActiveWorkbook.Close False
        Sheets("Proyectos").Cells(3, 18) = contad
        Sheets("Proyectos").Cells(3, 19) = contap
        Sheets("Proyectos").Cells(3, 20) = contadc
        Sheets("Proyectos").Cells(3, 21) = contamc
        End If
        
        TextBox1 = contad
        TextBox2 = contap
        TextBox3 = contadc
        TextBox4 = contamc
End If
Application.ScreenUpdating = True
End Sub


Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
ComboBox1.Clear
Sheets("Nom").Select
Range("A2").Select
While ActiveCell <> Empty
ComboBox1.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Wend
ComboBox2.Clear
Sheets("Archivo").Select
Range("A2").Select
While ActiveCell <> Empty
ComboBox2.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Wend
Sheets("Proyectos").Select
Application.ScreenUpdating = True
End Sub

Código a insertar en un módulo

Sub cargaform()
UserForm1.Show
End Sub


Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends