Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/05/2011, 16:51
Stackado
 
Fecha de Ingreso: junio-2009
Mensajes: 75
Antigüedad: 15 años, 6 meses
Puntos: 0
Simplificar el cidogo de una macro realizada con el grabador de macros

Hola,

Bueno hace poco empece a trabajar con macros y parecen ser bastante útiles, entre mis deberes tengo que realizar una forma en Excel para extraer la información desde algunas tablas con la extensión .dbf, lo logre después de leer algunos manuales y utilizando el grabador de macros.

El grabador de macros resulto ser bastante útil pero también resulto ser (para mi al menos) un arma de doble filo, pues como sabrán el grabador de macros registra todo lo que haces y en ocasiones con redundancias y eso se refleja en código de mas, bueno después de probar que funciona me dispuse a analizar el código me tope con varios errores cuando cambian los entornos de los archivos, quisiera saber si pueden auxiliarme un poco en esto ya que aun soy bastante nuevo en este tema.

Verán uno de los errores es que la ruta es relativa, al usar el asistente de BD Query del Excel graba la ruta relativa donde se encuentran las tablas y por lo tanto si pruebo la hoja en otra computadora no se ejecuta, por lo tanto debo usar rutas estáticas donde a pesar de estar en otras maquinas siga encontrando las tablas (osea ubicarme en la misma carpeta), bueno despues de analizar el codigo me tope con varias sorpresas y aunque simplifique algunas cosas en lo de las rutas realmente me trabe, pues al parecer utiliza varios objetos de nombre Array para concatenar cadenas muy largas.

Quisiera saber como puedo ajustar el código para que quede siempre ubicando a la carpeta donde me ubico el archivo Excel junto con las tablas, podrían darme una mano, el código es el siguiente:

Código vb:
Ver original
  1. Sub Macro_exportación()
  2. 'Macro_exportación Macro para extraer
  3. 'información de tabla clientes
  4.  
  5.     With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
  6.         "ODBC;CollatingSequence=ASCII;DBQ=C:\USERS\ABRAHAM\DOCUMENTS\ESCUELA Y PRACTICAS PROFESIONALES\PROYECTOS PEÑA\INTERFAZ SAE\RV SISTEMA" _
  7.         ), Array( _
  8.         " DE EMBARQUES SAE;DefaultDir=C:\USERS\ABRAHAM\DOCUMENTS\ESCUELA Y PRACTICAS PROFESIONALES\PROYECTOS PEÑA\INTERFAZ SAE\RV SISTEM" _
  9.         ), Array( _
  10.         "A DE EMBARQUES SAE;Deleted=0;Driver={Driver do Microsoft dBase (*.dbf)};DriverId=277;FIL=dBase IV;MaxBufferSize=2048;MaxScanRow" _
  11.         ), Array( _
  12.         "s=8;PageTimeout=5;SafeTransactions=0;Statistics=0;Threads=3;UID=admin;UserCommitSync=Yes;" _
  13.         )), Destination:=Range("$A$1")).QueryTable
  14.         .CommandText = Array( _
  15.         "SELECT clientes.NUM, clientes.NOMB, clientes.CALLE, clientes.RFC" & Chr(13) & "" & Chr(10) & "FROM clientes clientes" & Chr(13) & "" & Chr(10) & "ORDER BY clientes.NUM, clientes.NOMB, clientes.RFC" _
  16.         )
  17.         .RowNumbers = False
  18.         .FillAdjacentFormulas = False
  19.         .PreserveFormatting = True
  20.         .RefreshOnFileOpen = False
  21.         .BackgroundQuery = True
  22.         .RefreshStyle = xlInsertDeleteCells
  23.         .SavePassword = False
  24.         .SaveData = True
  25.         .AdjustColumnWidth = True
  26.         .RefreshPeriod = 0
  27.         .PreserveColumnInfo = True
  28.         .ListObject.DisplayName = "Tabla_Consulta_desde_cmbjpc1"
  29.         .Refresh BackgroundQuery:=False
  30.     End With
  31. End Sub

En la parte donde comienzan los arrays es donde esta todo lo de las rutas hacia las tablas.

Saludos y gracias por su tiempo.