04 MacrosVBAExcelAvanzado EAA de 11
-
Upload
hermis-ramos-espinal -
Category
Documents
-
view
226 -
download
0
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