我希望这可以完成,因为我到目前为止发现的是Excel不支持工作簿连接的相对路径。我们这里有一个Excel工作簿,可以自动更新CSV文件中的工作表。这些从硬编码文件夹(c:\ temp \ premiumreports \ name_of_CSV_file.csv)中提取数据。此方法强制我每次都将所有内容放入c:\ temp \ premiumreports,或者如果我将文件发送给客户,则必须创建相同的目录结构。我想要做的是将我的xlsx文件放入任何文件夹(c:\ report或用户的桌面),并带有必要的CSV文件,当我打开xlsx时,数据会自动导入。这可能吗?
当前工作簿连接
答案 0 :(得分:1)
如果工作簿文件始终与CSV文件位于同一文件夹中,则可以使用ActiveWorkbook.Path方法设置相对路径。
假设csv文件名和连接名相同的示例:
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
您可能必须根据您的配置使用某些设置,例如分隔符等。如果遇到问题,请在设置所需格式的新连接时录制宏,然后复制此子设置中的设置
如果找不到该文件,它将弹出一个文件选择框,供用户找到所需的文件。
答案 1 :(得分:0)
我找到了答案!
您可能会发现当前文件路径在工作簿的任何单元格中添加了公式
=LEFT(CELL("filename",$A$1),FIND("[",CELL("filename",$A$1),1)-1)
以某种方式命名此单元格,说“ FilePath”并在查询中生成绝对路径,例如
let
FilePath = Excel.CurrentWorkbook(){[Name="FilePath"]}[Content]{0}[Column1],
FullPathToFile1 = FilePath & "Name1.xlsx"
Source = Excel.Workbook(File.Contents(FullPathToFile1), null, true)
in