无需硬编码文件路径 实现CSV内容导入工作表的VBA宏方案
解决VBA导入CSV硬编码路径问题的实现方案
你只需要把原代码里的硬编码绝对路径替换为ThisWorkbook.Path动态获取的当前工作簿所在目录,就能实现只要CSV和启用宏工作簿放在同一文件夹,任意电脑都能正常运行的需求。
修改后的完整代码如下:
Sub LOAD_CME_FUT_RAW() ' ' LOAD_CME_FUT_RAW 宏 ' 功能:导入同目录下的cmeg.fut.prf.csv文件数据到当前工作表 ' Dim csvPath As String ' 动态获取CSV路径:当前工作簿所在目录+固定文件名 csvPath = ThisWorkbook.Path & "\cmeg.fut.prf.csv" ' 先判断文件是否存在,避免运行时报错 If Dir(csvPath) = "" Then MsgBox "未找到csv文件,请确保cmeg.fut.prf.csv和当前工作簿放在同一个文件夹下", vbExclamation Exit Sub End If With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;" & csvPath, Destination _ :=Range("$A$1")) .CommandType = 0 .Name = "cmeg.fut.prf" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 437 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With End Sub
使用注意事项
- 必须保证CSV文件命名为
cmeg.fut.prf.csv,和你保存的.xlsm格式启用宏工作簿放在同一个文件夹内 - 请先保存你的启用宏工作簿后再运行宏,未保存的新建工作簿无法正确获取所在目录路径
- 运行宏之前可以先选中你要导入数据的目标工作表,默认会导入到当前激活的工作表A1起始位置
内容的提问来源于stack exchange,提问作者Breaker098
相关产品推荐
相关产品推荐

