20

選択したExcelシートのデータを削除し、テキストファイルを選択するためのダイアログボックスを開き、そのテキストファイルからデータを削除したのとまったく同じシートにデータをインポートするVBAコードを書いています。これまでのところ、テキスト ファイルを新しいワークブックで開くことしかできませんが、データを削除した同じシートで開くことはできません。

これが私がこれまでにやってきたことです。あなたの助けに感謝します:

Dim Filt As String
Dim FilterIndex As Integer
Dim Title As String
Dim FileName As Variant

Filt = "Cst Files (*.prn),*.prn"
Title = "Select a cst File to Import"
FileName = Application.GetOpenFilename(FileFilter:=Filt, Title:=Title)

If FileName = False Then
MsgBox "No File Was Selected"
Exit Sub
End If

With Application.ActiveSheet
    Cells.Select
Selection.QueryTable.Delete
Selection.ClearContents
End With

Workbooks.Open FileName
4

3 に答える 3

49

現在のシートにテキスト ファイルをインポートするには、さまざまな方法があります。ここに3つあります(上記で使用している方法を含む)

  1. クエリテーブルの使用
  2. メモリ内のテキスト ファイルを開き、現在のシートに書き込み、必要に応じて最後に Text To Columns を適用します。
  3. 現在使用している方法を使用する場合は、テキスト ファイルを新しいワークブックで開いた後、次を使用して現在のシートにコピーするだけです。Cells.Copy

クエリテーブルの使用

これは私が記録した簡単なマクロです。必要に応じて修正してください。

Sub Sample()
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Sample.txt", Destination:=Range("$A$1") _
        )
        .Name = "Sample"
        .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 = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

メモリ内のテキスト ファイルを開く

Sub Sample()
    Dim MyData As String, strData() As String

    Open "C:\Sample.txt" For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    strData() = Split(MyData, vbCrLf)
End Sub

配列にデータを取得したら、それを現在のシートにエクスポートできます。

すでに使用している方法を使用する

Sub Sample()
    Dim wbI As Workbook, wbO As Workbook
    Dim wsI As Worksheet

    Set wbI = ThisWorkbook
    Set wsI = wbI.Sheets("Sheet1") '<~~ Sheet where you want to import

    Set wbO = Workbooks.Open("C:\Sample.txt")

    wbO.Sheets(1).Cells.Copy wsI.Cells

    wbO.Close SaveChanges:=False
End Sub

ファローアップ

を使用しApplication.GetOpenFilenameて、関連するファイルを選択できます。例えば...

Sub Sample()
    Dim Ret

    Ret = Application.GetOpenFilename("Prn Files (*.prn), *.prn")

    If Ret <> False Then
        With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & Ret, Destination:=Range("$A$1"))

            '~~> Rest of the code

        End With
    End If
End Sub
于 2012-06-29T19:08:07.403 に答える
2

.Refresh BackgroundQuery:=False の後に .WorkbookConnection.Delete を記述できます。これにより、テキスト ファイルの外部接続が削除されます。

于 2016-06-22T16:08:58.570 に答える
0

ここでの私自身の質問に対する私の答えは、あなたがやろうとしていることに対する最も簡単な解決策だと思います:

  1. ファイルのテキストの最初の行を配置するセルを選択します。

  2. Data/ Get External Data/ダイアログを使用して、From Fileインポートするテキスト ファイルを選択します。

  3. インポートしたテキストを必要に応じてフォーマットします。

  4. 開いたImport Dataダイアログで、Properties...

  5. ボックスのチェックを外しPrompt for file name on refreshます。

  6. 外部ファイルが変更されるたびに、Data/ Get External Data/Refresh Allボタンをクリックします。

注: あなたのケースでは、おそらくステップ 5 をスキップする必要があります。

于 2014-03-20T20:25:26.607 に答える