Clase24

12
Visual Basic for Applications Leonel Morales Díaz Ingeniería Simple [email protected] Disponible en: http://www.ingenieriasimple.com/introprogra Copyright 2008 by Leonel Morales Díaz – Ingeniería Simple. Derechos reservados

description

Introducción a Visual Basic for Applications. Problemas en Excel. Diferencias con VBScript. Ejemplos con VBA. Modelo COM, ejemplos con VBA.

Transcript of Clase24

Page 1: Clase24

Visual Basic for Applications

Leonel Morales DíazIngeniería Simple

[email protected]

Disponible en: http://www.ingenieriasimple.com/introprograCopyright 2008 by Leonel Morales Díaz – Ingeniería Simple.

Derechos reservados

Page 2: Clase24

Archivo en Excel Son 600 nombres Separar las

columnas Separar los nombres

en varias columnas ¿Cómo hacerlo?

Page 3: Clase24

VBA Visual Basic en aplicaciones

Todo office Algunos otros

Acceso a los objetos expuestos por la aplicación En Excel: Worksheet, Range, Cell, Graph En Word: Textrange, Paragraph En PowerPoint: Slide, Shape, Image

Con la sintáxis de Visual Basic

Page 4: Clase24

Diferencias VBA - VBScript VBA

Variables con tipo Integer, Long, String

Arrays con índice inferior diferente de cero

Compilación condicional DoEvents, GoSub,

etiquetas, números de línea

Operador Like Otros

VBScript Variables sin tipo

Todas son Variant Todos los arrays

empiezan en cero No hay compilación

condicional No existe DoEvents,

GoSub, etiquetas o números de línea

No hay operador Like

Page 5: Clase24

VBA en Excel Principales Objetos

Worksheet Todas las hojas del libro (workbook)

Range Una celda o conjunto de celdas

Colecciones Cells, Columns, Rows

Page 6: Clase24

Archivo en Excel ¿Cómo hacerlo?

Page 7: Clase24

Primera AproximaciónSub ArreglaDatos() 'Variables a utilizar y posiciones iniciales de proceso Dim OriR As RangeDim OriR As Range Set OriR = Hoja1.Range("A1") Dim DestR As RangeDim DestR As Range Set DestR = Hoja2.Range("A1") 'Ciclo para procesarlo todo Dim i As LongDim i As Long Do Until OriR.Value = "" DestR.Value = OriR.Value i = 1 If IsNumeric(OriR.Offset(1, 0).Value) Then DestR.Offset(0, 1).Value = OriR.Offset(1, 0).Value i = i + 1 End If

If InStr(OriR.Offset(i, 0).Value, "M-13") = 1 Then DestR.Offset(0, 2).Value = OriR.Offset(i, 0).Value i = i + 1 End If Set OriR = OriR.Offset(i, 0) Set DestR = DestR.Offset(1, 0) LoopEnd Sub

EjVBA01.xls

Page 8: Clase24

Primera AproximaciónSub ArreglaDatos() 'Variables a utilizar y posiciones iniciales de proceso Dim OriR As RangeDim OriR As Range Set OriR = Hoja1.Range("A1") Dim DestR As RangeDim DestR As Range Set DestR = Hoja2.Range("A1") 'Ciclo para procesarlo todo Dim i As LongDim i As Long Do Until OriR.Value = "" DestR.Value = OriR.Value i = 1 If IsNumeric(OriR.Offset(1, 0).Value) Then DestR.Offset(0, 1).Value = OriR.Offset(1, 0).Value i = i + 1 End If

If InStr(Replace(OriR.Offset(i, 0).Value, " ", If InStr(Replace(OriR.Offset(i, 0).Value, " ", ""), "M-13") = 1 Then""), "M-13") = 1 Then

DestR.Offset(0, 2).Value = OriR.Offset(i, 0).Value i = i + 1 End If Set OriR = OriR.Offset(i, 0) Set DestR = DestR.Offset(1, 0) LoopEnd Sub

EjVBA02.xls

Page 9: Clase24

Primera AproximaciónSub ArreglaDatos() 'Variables a utilizar y posiciones iniciales de proceso Dim OriR As RangeDim OriR As Range Set OriR = Hoja1.Range("A1") Dim DestR As RangeDim DestR As Range Set DestR = Hoja2.Range("A1") 'Ciclo para procesarlo todo Dim i As LongDim i As Long Do Until OriR.Value = "" DestR.Value = OriR.Value i = 1 If IsNumeric(OriR.Offset(1, 0).Value) Then DestR.Offset(0, 1).Value = OriR.Offset(1, 0).Value i = i + 1 End If

If CheckCedula(OriR.Offset(i, 0).Value) ThenIf CheckCedula(OriR.Offset(i, 0).Value) Then DestR.Offset(0, 2).Value = OriR.Offset(i, 0).Value i = i + 1 End If Set OriR = OriR.Offset(i, 0) Set DestR = DestR.Offset(1, 0) LoopEnd Sub

Function CheckCedula(UnString As String) As Boolean CheckCedula = False Dim TmpR As Range For Each TmpR In Range("Cedulas") If InStr(Trim(Replace(UnString, " ", "")),

TmpR.Value) = 1 Then CheckCedula = True Exit For End If NextEnd Function

EjVBA03.xls

Page 10: Clase24

Función CheckCedulaFunction CheckCedula(UnString As String) As BooleanFunction CheckCedula(UnString As String) As Boolean CheckCedula = False Dim TmpR As Range For Each TmpR In Range("Cedulas") If InStr(Trim(Replace(UnString, " ", "")), TmpR.Value) = 1 Then CheckCedula = True Exit For End If NextEnd FunctionEnd Function

Page 11: Clase24

Modelo COM Component Object Model de Microsoft Acceso a aplicaciones como objetos

O cualquier “componente” Acceso desde otros lenguajes

Por ejemplo VBScript

Page 12: Clase24

Ejemplo COM desde VBScript'Variables a utilizar y posiciones iniciales de procesoDocument.Write "<P>Creando el objeto Excel.</P>"Dim XLAppSet XLApp = CreateObject("Excel.Application")

Document.Write "<P>Abriendo el archivo.</P>"Dim XLBkSet XLBk = XLApp.WorkBooks.Open("EjVBA04.XLS")

Document.Write "<P>Estableciendo rangos de celdas de operación.</P>"Dim OriRSet OriR = XLBk.WorkSheets("Hoja1").Range("A1")Dim DestRSet DestR = XLBk.WorkSheets("Hoja2").Range("A1")

ej089.html