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 originalSub Macro_exportación()
'Macro_exportación Macro para extraer
'información de tabla clientes
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
"ODBC;CollatingSequence=ASCII;DBQ=C:\USERS\ABRAHAM\DOCUMENTS\ESCUELA Y PRACTICAS PROFESIONALES\PROYECTOS PEÑA\INTERFAZ SAE\RV SISTEMA" _
), Array( _
" DE EMBARQUES SAE;DefaultDir=C:\USERS\ABRAHAM\DOCUMENTS\ESCUELA Y PRACTICAS PROFESIONALES\PROYECTOS PEÑA\INTERFAZ SAE\RV SISTEM" _
), Array( _
"A DE EMBARQUES SAE;Deleted=0;Driver={Driver do Microsoft dBase (*.dbf)};DriverId=277;FIL=dBase IV;MaxBufferSize=2048;MaxScanRow" _
), Array( _
"s=8;PageTimeout=5;SafeTransactions=0;Statistics=0;Threads=3;UID=admin;UserCommitSync=Yes;" _
)), Destination:=Range("$A$1")).QueryTable
.CommandText = Array( _
"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" _
)
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Tabla_Consulta_desde_cmbjpc1"
.Refresh BackgroundQuery:=False
End With
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.