現在のワークブック内の 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 プロパティにアクセスしようとすると、Range プロパティは Sheets オブジェクトに属しているため、438 エラーが発生します。

実際に 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

関連情報