04 MacrosVBAExcelAvanzado EAA de 11

download 04 MacrosVBAExcelAvanzado EAA de 11

of 16

Transcript of 04 MacrosVBAExcelAvanzado EAA de 11

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    1/16

    Excel Avanzado con VBA 04

    Ing. Enrique Alfaro

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    2/16

    FUNCIONES DEFINIDAS POR EL USUARIO (UDF)

    No pueden ser grabadas, por lo tanto debemos escribirel cdigo VBA.

    Ejemplo:

    Function suma2numeros()

    N1 = Val(InputBox("1er Nmero:"))

    N2 = Val(InputBox("2do Nmero:"))

    suma2numeros = N1 + N2

    End FunctionSub usarfuncion()

    Range("A1").Value = suma2numeros

    End Sub

    17/02/2013Ing. Enrique Alfaro

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    3/16

    FUNCIONES DEFINIDAS POR EL USUARIO (UDF)

    Ejemplo con 1 parmetro:

    Function centigrados(gradosf)

    centigrados = (gradosf - 32) / 9 * 5

    End Function

    Sub usar()

    MsgBox (centigrados(100))

    End Sub

    Tambien podemos usarla directamente en una celda:

    =centigrados(referencia)

    17/02/2013Ing. Enrique Alfaro

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    4/16

    FUNCIONES DEFINIDAS POR EL USUARIO (UDF)

    Creamos la funcin en editor de VBA escribiendo:Function areacirculo(radio)

    areacirculo = WorksheetFunction.Pi * _

    WorksheetFunction.Power(radio, 2)

    End Function

    Function volumenesfera(radio)

    volumenesfera = 4 / 3 * WorksheetFunction.Pi * _ WorksheetFunction.Power(radio, 3)

    End Function

    17/02/2013Ing. Enrique Alfaro

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    5/16

    17/02/2013Ing. Enrique Alfaro

    SALTAR EL ERROR

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    6/16

    Un ejemplo de Solucin

    Sub convertir() cuotasoles = Range("c3").Value cotizac = Range("d5").Value participantes = Range("c8").Value OnError GoToerror cuotadolares = cuotasoles / cotizac recaudacion = participantes * cuotadolares Range("d3").Value = cuotadolares Range("d3").Style = "comma"

    Range("d8").Value = recaudacion Range("d8").Style = "comma" Exit Suberror:

    MsgBox ("Divisin por Cero falta cotizacin")End Sub

    17/02/2013Ing. Enrique Alfaro

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    7/16

    Funcin usada como libreraUsamos las funciones directamente en una celda y consu argumento respectivo en otra celda.

    17/02/2013Ing. Enrique Alfaro

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    8/16

    EJEMPLO DE UDF con 2 parmetros

    17/02/2013Ing. Enrique Alfaro

    17/02/2013I E i Alf

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    9/16

    EJEMPLO DE UDF con 2 parmetrosFunction consultaproducto(codigo, col)

    Set tabla = Sheets(1).Range("B3:D8") consultaproducto = WorksheetFunction.VLookup(codigo, tabla, col, False)

    End Function

    Sub consultar()

    On Error GoTo codigoerrado

    cod = Val(InputBox("Ingrese codigo producto:", "CONSULTANDO"))

    Range("D10").Value = consultaproducto(cod, 2)

    Range("D11").Value = consultaproducto(cod, 3)

    Range("D12").Value = cod

    Exit Sub codigoerrado:

    Range("D12").ClearContents

    MsgBox ("no es un codigo valido")

    End Sub

    17/02/2013Ing. Enrique Alfaro

    17/02/2013I E i Alf

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    10/16

    MANIPULACION DE OBJETOS YCOLECCIONES

    17/02/2013Ing. Enrique Alfaro

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    11/16

    OBJETOS Y COLECCIONES

    VBA ofrece dos importantes dos importantesestructuras que pueden simplificar el trabajocon objetos y colecciones:

    1. Estructuras With ...End With

    2. Estructuras For Each...next

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    12/16

    Sirve para ejecutar una serie de acciones sobre un mismo

    Objeto, sin tener que repetir toda su jerarqua Ej.: Propiedades del objeto Range

    Sub Escribe1()

    ActiveSheet.Range("C7").Value = "Cta. Resultados"

    ActiveSheet.Range("C7").Font.Bold = True

    ActiveSheet.Range("C7").Font.Color = RGB(0, 255, 0)

    End Sub

    Sub Escribe2()

    With ActiveSheet.Range("C7").Value = "Cta. Resultados"

    .Font.Bold = True

    .Font.Color = RGB(0, 255, 0)

    End With

    End Sub

    ESTRUCTURAS WITH END WITH

    17/02/2013Ing Enrique Alfaro

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    13/16

    ESTRUCTURAS WITH END WITH

    Sub CambiarFuente() With Selection.Font

    .Name = Times NewRoman

    .FontStyle = Bold Italic

    .Size = 12

    .Underline = xlSingle

    .ColorIndex = 5

    End WithEnd Sub

    17/02/2013Ing. Enrique Alfaro

    17/02/2013Ing Enrique Alfaro

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    14/16

    ESTRUCTURAS FOR EACH NEXT

    No es necesario saber la cantidad de elementos queexisten en una coleccin para usar la estructura ForEach...Next.

    Sub ContarHojas() Dim Item As Worksheet declarar el objeto

    For Each ItemIn ActiveWorkbook.Sheets

    MsgBox Item.Name Next Item

    End Sub

    17/02/2013Ing. Enrique Alfaro

    17/02/2013Ing Enrique Alfaro

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    15/16

    ESTRUCTURAS FOR EACH NEXT

    Sub VentanasAbiertas() Suma = 0

    For Each Item In Windows

    Suma = Suma + 1

    Next Item

    MsgBox Total de ventanas abiertas, & Suma

    End Sub

    17/02/2013Ing. Enrique Alfaro

    17/02/2013Ing. Enrique Alfaro

  • 7/29/2019 04 MacrosVBAExcelAvanzado EAA de 11

    16/16

    ESTRUCTURAS FOR EACH NEXT

    Sub nombresderango() For Each itemIn Names

    MsgBox (item.Name)

    Next item

    End Sub

    Si seleccionamos un rango de letras minsculas:

    Sub ConvertirMayus() For Each celda In Selection

    celda.Value = UCASE(celda.Value)

    Nextcelda

    End Sub

    17/02/2013Ing. Enrique Alfaro