Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Visual Basic for Applications Leonel Morales Díaz Ingeniería Simple [email_address] Disponible en: http://www.ingenieriasi...
Archivo en Excel <ul><li>Son 600 nombres </li></ul><ul><li>Separar las columnas </li></ul><ul><li>Separar los nombres en v...
VBA <ul><li>Visual Basic en aplicaciones </li></ul><ul><ul><li>Todo office </li></ul></ul><ul><ul><li>Algunos otros </li><...
Diferencias VBA - VBScript <ul><li>VBA </li></ul><ul><ul><li>Variables con tipo </li></ul></ul><ul><ul><ul><li>Integer, Lo...
VBA en Excel <ul><li>Principales Objetos </li></ul><ul><ul><li>Worksheet </li></ul></ul><ul><ul><ul><li>Todas las hojas de...
Archivo en Excel <ul><li>¿Cómo hacerlo? </li></ul>
Primera Aproximación <ul><li>Sub ArreglaDatos() </li></ul><ul><li>'Variables a utilizar y posiciones iniciales de proceso ...
Primera Aproximación <ul><li>Sub ArreglaDatos() </li></ul><ul><li>'Variables a utilizar y posiciones iniciales de proceso ...
Primera Aproximación <ul><li>Sub ArreglaDatos() </li></ul><ul><li>'Variables a utilizar y posiciones iniciales de proceso ...
Función CheckCedula <ul><li>Function CheckCedula(UnString As String) As Boolean </li></ul><ul><li>CheckCedula = False </li...
Modelo COM <ul><li>Component Object Model de Microsoft </li></ul><ul><li>Acceso a aplicaciones como objetos </li></ul><ul>...
Ejemplo COM desde VBScript <ul><li>'Variables a utilizar y posiciones iniciales de proceso </li></ul><ul><li>Document.Writ...
Upcoming SlideShare
Loading in …5
×

Clase24

645 views

Published on

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

Published in: Education, Technology

Clase24

  1. 1. Visual Basic for Applications Leonel Morales Díaz Ingeniería Simple [email_address] Disponible en: http://www.ingenieriasimple.com/introprogra Copyright 2008 by Leonel Morales Díaz – Ingeniería Simple. Derechos reservados
  2. 2. Archivo en Excel <ul><li>Son 600 nombres </li></ul><ul><li>Separar las columnas </li></ul><ul><li>Separar los nombres en varias columnas </li></ul><ul><li>¿Cómo hacerlo? </li></ul>
  3. 3. VBA <ul><li>Visual Basic en aplicaciones </li></ul><ul><ul><li>Todo office </li></ul></ul><ul><ul><li>Algunos otros </li></ul></ul><ul><li>Acceso a los objetos expuestos por la aplicación </li></ul><ul><ul><li>En Excel: Worksheet, Range, Cell, Graph </li></ul></ul><ul><ul><li>En Word: Textrange, Paragraph </li></ul></ul><ul><ul><li>En PowerPoint: Slide, Shape, Image </li></ul></ul><ul><li>Con la sintáxis de Visual Basic </li></ul>
  4. 4. Diferencias VBA - VBScript <ul><li>VBA </li></ul><ul><ul><li>Variables con tipo </li></ul></ul><ul><ul><ul><li>Integer, Long, String </li></ul></ul></ul><ul><ul><li>Arrays con índice inferior diferente de cero </li></ul></ul><ul><ul><li>Compilación condicional </li></ul></ul><ul><ul><li>DoEvents, GoSub, etiquetas, números de línea </li></ul></ul><ul><ul><li>Operador Like </li></ul></ul><ul><ul><li>Otros </li></ul></ul><ul><li>VBScript </li></ul><ul><ul><li>Variables sin tipo </li></ul></ul><ul><ul><ul><li>Todas son Variant </li></ul></ul></ul><ul><ul><li>Todos los arrays empiezan en cero </li></ul></ul><ul><ul><li>No hay compilación condicional </li></ul></ul><ul><ul><li>No existe DoEvents, GoSub, etiquetas o números de línea </li></ul></ul><ul><ul><li>No hay operador Like </li></ul></ul>
  5. 5. VBA en Excel <ul><li>Principales Objetos </li></ul><ul><ul><li>Worksheet </li></ul></ul><ul><ul><ul><li>Todas las hojas del libro (workbook) </li></ul></ul></ul><ul><ul><li>Range </li></ul></ul><ul><ul><ul><li>Una celda o conjunto de celdas </li></ul></ul></ul><ul><ul><li>Colecciones </li></ul></ul><ul><ul><ul><li>Cells, Columns, Rows </li></ul></ul></ul>
  6. 6. Archivo en Excel <ul><li>¿Cómo hacerlo? </li></ul>
  7. 7. Primera Aproximación <ul><li>Sub ArreglaDatos() </li></ul><ul><li>'Variables a utilizar y posiciones iniciales de proceso </li></ul><ul><li>Dim OriR As Range </li></ul><ul><li>Set OriR = Hoja1.Range(&quot;A1&quot;) </li></ul><ul><li>Dim DestR As Range </li></ul><ul><li>Set DestR = Hoja2.Range(&quot;A1&quot;) </li></ul><ul><li>'Ciclo para procesarlo todo </li></ul><ul><li>Dim i As Long </li></ul><ul><li>Do Until OriR.Value = &quot;&quot; </li></ul><ul><li>DestR.Value = OriR.Value </li></ul><ul><li>i = 1 </li></ul><ul><li>If IsNumeric(OriR.Offset(1, 0).Value) Then </li></ul><ul><li>DestR.Offset(0, 1).Value = OriR.Offset(1, 0).Value </li></ul><ul><li>i = i + 1 </li></ul><ul><li>End If </li></ul><ul><li>If InStr(OriR.Offset(i, 0).Value, &quot;M-13&quot;) = 1 Then </li></ul><ul><li>DestR.Offset(0, 2).Value = OriR.Offset(i, 0).Value </li></ul><ul><li>i = i + 1 </li></ul><ul><li>End If </li></ul><ul><li>Set OriR = OriR.Offset(i, 0) </li></ul><ul><li>Set DestR = DestR.Offset(1, 0) </li></ul><ul><li>Loop </li></ul><ul><li>End Sub </li></ul>EjVBA01.xls
  8. 8. Primera Aproximación <ul><li>Sub ArreglaDatos() </li></ul><ul><li>'Variables a utilizar y posiciones iniciales de proceso </li></ul><ul><li>Dim OriR As Range </li></ul><ul><li>Set OriR = Hoja1.Range(&quot;A1&quot;) </li></ul><ul><li>Dim DestR As Range </li></ul><ul><li>Set DestR = Hoja2.Range(&quot;A1&quot;) </li></ul><ul><li>'Ciclo para procesarlo todo </li></ul><ul><li>Dim i As Long </li></ul><ul><li>Do Until OriR.Value = &quot;&quot; </li></ul><ul><li>DestR.Value = OriR.Value </li></ul><ul><li>i = 1 </li></ul><ul><li>If IsNumeric(OriR.Offset(1, 0).Value) Then </li></ul><ul><li>DestR.Offset(0, 1).Value = OriR.Offset(1, 0).Value </li></ul><ul><li>i = i + 1 </li></ul><ul><li>End If </li></ul><ul><li>If InStr(Replace(OriR.Offset(i, 0).Value, &quot; &quot;, &quot;&quot;), &quot;M-13&quot;) = 1 Then </li></ul><ul><li>DestR.Offset(0, 2).Value = OriR.Offset(i, 0).Value </li></ul><ul><li>i = i + 1 </li></ul><ul><li>End If </li></ul><ul><li>Set OriR = OriR.Offset(i, 0) </li></ul><ul><li>Set DestR = DestR.Offset(1, 0) </li></ul><ul><li>Loop </li></ul><ul><li>End Sub </li></ul>EjVBA02.xls
  9. 9. Primera Aproximación <ul><li>Sub ArreglaDatos() </li></ul><ul><li>'Variables a utilizar y posiciones iniciales de proceso </li></ul><ul><li>Dim OriR As Range </li></ul><ul><li>Set OriR = Hoja1.Range(&quot;A1&quot;) </li></ul><ul><li>Dim DestR As Range </li></ul><ul><li>Set DestR = Hoja2.Range(&quot;A1&quot;) </li></ul><ul><li>'Ciclo para procesarlo todo </li></ul><ul><li>Dim i As Long </li></ul><ul><li>Do Until OriR.Value = &quot;&quot; </li></ul><ul><li>DestR.Value = OriR.Value </li></ul><ul><li>i = 1 </li></ul><ul><li>If IsNumeric(OriR.Offset(1, 0).Value) Then </li></ul><ul><li>DestR.Offset(0, 1).Value = OriR.Offset(1, 0).Value </li></ul><ul><li>i = i + 1 </li></ul><ul><li>End If </li></ul><ul><li>If CheckCedula(OriR.Offset(i, 0).Value) Then </li></ul><ul><li>DestR.Offset(0, 2).Value = OriR.Offset(i, 0).Value </li></ul><ul><li>i = i + 1 </li></ul><ul><li>End If </li></ul><ul><li>Set OriR = OriR.Offset(i, 0) </li></ul><ul><li>Set DestR = DestR.Offset(1, 0) </li></ul><ul><li>Loop </li></ul><ul><li>End Sub </li></ul><ul><li>Function CheckCedula(UnString As String) As Boolean </li></ul><ul><li>CheckCedula = False </li></ul><ul><li>Dim TmpR As Range </li></ul><ul><li>For Each TmpR In Range(&quot;Cedulas&quot;) </li></ul><ul><li>If InStr(Trim(Replace(UnString, &quot; &quot;, &quot;&quot;)), TmpR.Value) = 1 Then </li></ul><ul><li>CheckCedula = True </li></ul><ul><li>Exit For </li></ul><ul><li>End If </li></ul><ul><li>Next </li></ul><ul><li>End Function </li></ul>EjVBA03.xls
  10. 10. Función CheckCedula <ul><li>Function CheckCedula(UnString As String) As Boolean </li></ul><ul><li>CheckCedula = False </li></ul><ul><li>Dim TmpR As Range </li></ul><ul><li>For Each TmpR In Range(&quot;Cedulas&quot;) </li></ul><ul><li>If InStr(Trim(Replace(UnString, &quot; &quot;, &quot;&quot;)), TmpR.Value) = 1 Then </li></ul><ul><li>CheckCedula = True </li></ul><ul><li>Exit For </li></ul><ul><li>End If </li></ul><ul><li>Next </li></ul><ul><li>End Function </li></ul>
  11. 11. Modelo COM <ul><li>Component Object Model de Microsoft </li></ul><ul><li>Acceso a aplicaciones como objetos </li></ul><ul><ul><li>O cualquier “componente” </li></ul></ul><ul><li>Acceso desde otros lenguajes </li></ul><ul><ul><li>Por ejemplo VBScript </li></ul></ul>
  12. 12. Ejemplo COM desde VBScript <ul><li>'Variables a utilizar y posiciones iniciales de proceso </li></ul><ul><li>Document.Write &quot;<P>Creando el objeto Excel.</P>&quot; </li></ul><ul><li>Dim XLApp </li></ul><ul><li>Set XLApp = CreateObject(&quot;Excel.Application&quot;) </li></ul><ul><li>Document.Write &quot;<P>Abriendo el archivo.</P>&quot; </li></ul><ul><li>Dim XLBk </li></ul><ul><li>Set XLBk = XLApp.WorkBooks.Open(&quot;EjVBA04.XLS&quot;) </li></ul><ul><li>Document.Write &quot;<P>Estableciendo rangos de celdas de operación.</P>&quot; </li></ul><ul><li>Dim OriR </li></ul><ul><li>Set OriR = XLBk.WorkSheets(&quot;Hoja1&quot;).Range(&quot;A1&quot;) </li></ul><ul><li>Dim DestR </li></ul><ul><li>Set DestR = XLBk.WorkSheets(&quot;Hoja2&quot;).Range(&quot;A1&quot;) </li></ul>ej089.html

×