当前工作簿中的 OpenText

当前工作簿中的 OpenText

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

相关内容