/ / Rutas relativas dentro de Excel para importaciones CSV - excel, excel-vba, vba

Rutas relativas dentro de Excel para importaciones CSV - excel, excel-vba, vba

Espero que esto se pueda hacer como lo que he estadoencontrar hasta ahora es que Excel no admite rutas relativas para las conexiones del libro de trabajo. Lo que tenemos aquí es un libro de Excel que actualiza automáticamente las hojas de trabajo de los archivos CSV. Estos extraen los datos de una carpeta codificada (c: temppremiumreportsname_of_CSV_file.csv). Este método me obliga a poner todo en c: temppremium reporta todo el tiempo o, si envío el archivo a un cliente, tienen que crear la misma estructura de directorios. Lo que me gustaría hacer es colocar mi archivo xlsx en cualquier carpeta (c: report o en el escritorio del usuario) con los archivos CSV necesarios y cuando abro el xlsx, los datos se importan automáticamente. ¿Es esto posible?

Conexión del libro de trabajo actual

enter image description here ¡Gracias!

Respuestas

0 para la respuesta № 1

Si el archivo del libro de trabajo siempre se encuentra en la misma carpeta que el archivo CSV, puede utilizar el método ActiveWorkbook.Path para establecer una ruta relativa.

Ejemplo que asume que el nombre del archivo csv y el nombre de la conexión son los mismos:

Sub refreshMsgConnection()
Dim csvFileName As String
csvFileName = "msg_by_weeks.csv"

Dim filePath As String
filePath = ActiveWorkbook.path

Dim conString As String
conString = "TEXT;" & filePath & "" & csvFileName

With ActiveWorkbook.Connections("msg_by_weeks").Ranges.Item(1).QueryTable
.connection = conString
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.TextFilePromptOnRefresh = False
.Refresh BackgroundQuery:=False
End With
End Sub

Es posible que tengas que jugar con algunos de los ajustessegún su configuración, como delimitadores, etc. Si tiene problemas, grabe una macro mientras configura una nueva conexión con el formato deseado y luego copie las configuraciones en este sub.

Si no se encuentra el archivo, aparecerá un cuadro de selección de archivos para que el usuario localice el archivo deseado.