Clase24

623 views
590 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
1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total views
623
On SlideShare
0
From Embeds
0
Number of Embeds
22
Actions
Shares
0
Downloads
33
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

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

×