vba:将文本文件导入Excel工作表

Ela*_*mer 16 excel vba excel-vba

我正在编写一个vba代码,该代码应该删除所选Excel工作表上的数据,打开一个文本文件选择对话框,然后将该文本文件中的数据导入到我从中删除数据的相同表单.到目前为止,我只能将文本文件打开到新的工作簿中,但无法将其打开到我从中删除数据的同一工作表.这是我到目前为止所提供的内容,非常感谢您的帮助:

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
Run Code Online (Sandbox Code Playgroud)

谢谢!

Sid*_*out 43

您可以通过多种方法将文本文件导入当前工作表.这里有三个(包括你上面使用的方法)

  1. 使用QueryTable
  2. 打开内存中的文本文件,然后写入当前工作表,最后根据需要应用Text To Columns.
  3. 如果要在新工作簿中打开文本文件后使用当前使用的方法,只需将其复制到当前工作表中 Cells.Copy

使用QueryTable

这是我记录的一个简单的宏.请根据您的需要进行修改.

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
Run Code Online (Sandbox Code Playgroud)

在内存中打开文本文件

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
Run Code Online (Sandbox Code Playgroud)

获得阵列中的数据后,可以将其导出到当前工作表.

使用您已在使用的方法

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
Run Code Online (Sandbox Code Playgroud)

跟进

您可以使用它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
Run Code Online (Sandbox Code Playgroud)

  • @SiddharthRout已经整理出来了.最快的将是第3个样本.使用`Workbook.Open`或`Workbook.OpenText`方法.如果这与您的结论不一致,请通知我.谢谢. (3认同)