这Workbooks.OpenText
方法(Excel)文档说:
表达。开放文本(文件名、原点、起始行、数据类型、文本限定符、连续分隔符、制表符、分号、逗号、空格、其他、其他字符、字段信息、文本可视化布局、小数分隔符、千位分隔符、尾随减号、本地)
表达代表一个变量工作簿目的。
在我的项目中我使用
fPath = "C:\CSV Files\" & FName
Workbooks.OpenText Filename:=fPath, Local:=True
这将创建一个额外的工作簿。我希望代码在现有工作簿中创建一个新的电子表格。我试过这个代码
fPath = "C:\CSV Files\" & FName
ActiveWorkbook.OpenText Filename:=fPath, Local:=True
这将弹出运行时错误 438。这个话题说:
当您尝试使用不属于该对象的方法/属性时。例如,如果您有一个 Workbook 对象并尝试访问 Range 属性,它将给出 438 错误,因为 Range 属性属于 Sheets 对象。
我实际上正在使用 Excel 2020,但我不知道是什么导致了错误。
有人能纠正我吗?
答案1
当您打开文本文件时,它将作为新工作簿打开,您不能立即将其添加到现有工作簿中。
尝试这样的操作:
set OriginalWB = ActiveWorkbook
fPath = "C:\CSV Files\" & FName
Workbooks.OpenText Filename:=fPath, Local:=True
set newWB = ActiveWorkbook
ActiveSheet.Copy after:= OriginalWB.worksheets(1)
newWB.Close
答案2
要打开文本文件到同一个工作簿中,可以使用AddQueryTables
以下方法进口文件,或者您可以使用 PowerQuery
这是宏录制器生成的一些代码
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Users\xxxx\xxxx\tester.csv", Destination:=Range("$A$1"))
.CommandType = 0
.Name = "tester"
.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)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With