将文本文件导入excel工作表

将文本文件导入excel工作表,excel,vba,Excel,Vba,我正在编写一个VBA代码,该代码应该删除选定excel工作表上的数据,打开一个文本文件选择对话框,然后将该文本文件中的数据导入到我从中删除数据的相同工作表中。到目前为止,我只能将文本文件打开到新工作簿中,但无法将其打开到删除数据的同一工作表中 以下是我到目前为止的收获,非常感谢您的帮助: Dim Filt As String Dim FilterIndex As Integer Dim Title As String Dim FileName As Variant Filt = "Cst Fi

我正在编写一个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

有许多方法可以将文本文件导入当前工作表。这里有三种方法,包括您在上面使用的方法

使用查询表 在内存中打开文本文件,然后写入当前工作表,最后在需要时将文本应用于列。 如果要使用当前使用的方法,则在新工作簿中打开文本文件后,只需使用单元格将其复制到当前工作表。复制 使用查询表

这是我录制的一个简单宏。请根据您的需要修改一下

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
在内存中打开文本文件

一旦阵列中有数据,就可以将其导出到当前工作表

使用您已经使用的方法

我认为以下是解决您试图做的事情的最简单的方法:

选择文件中第一行文本所在的单元格

使用“数据/获取外部数据/来自文件”对话框选择要导入的文本文件

根据需要设置导入文本的格式

在打开的“导入数据”对话框中,单击“属性…”

取消选中“刷新时提示输入文件名”框

每当外部文件更改时,单击数据/获取外部数据/全部刷新按钮

注意:在您的情况下,您可能需要跳过步骤5。

您可以编写 .WorkbookConnection.Delete 之后 .Refresh BackgroundQuery:=False
这将删除文本文件的外部连接。

看起来QueryTable方法是最直接的方法,但是否有方法向其中添加对话框,以便我可以选择来自不同来源的文本文件?是的。等一下。。。更新职位的假设更新:请参阅FOLLOWUP@SiddharthRout嗨,我是wondrin,这是上述方法中最快的一种。我只是希望你已经有了答案,而不是我一个接一个地尝试?因为我当前的代码很长,要适应每个示例,我需要调整整个代码以使其对齐。“我希望跳过决定部分,以最快的方式继续,并相应地调整我的代码。”悉达多已经解决了这个问题。最快的是第三个样品。使用Workbook.Open或Workbook.OpenText方法。如果这与你的结论不一致,请通知我。谢谢。但是当你按“刷新”时,它总是要求你再次选择文件
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
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