为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

30秒到达战场 2019-09-02 15:18:05
我正在编写一个vba代码,该代码应该删除所选Excel工作表上的数据,打开一个文本文件选择对话框,然后将该文本文件中的数据导入到我从中删除数据的相同表单。到目前为止,我只能将文本文件打开到新的工作簿中,但无法将其打开到我从中删除数据的同一工作表。这是我到目前为止所提供的内容,非常感谢您的帮助:Dim Filt As StringDim FilterIndex As IntegerDim Title As StringDim FileName As VariantFilt = "Cst Files (*.prn),*.prn"Title = "Select a cst File to Import"FileName = Application.GetOpenFilename(FileFilter:=Filt, Title:=Title)If FileName = False ThenMsgBox "No File Was Selected"Exit SubEnd IfWith Application.ActiveSheet    Cells.SelectSelection.QueryTable.DeleteSelection.ClearContentsEnd WithWorkbooks.Open FileName谢谢!
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

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


使用QueryTable

打开内存中的文本文件,然后写入当前工作表,最后根据需要应用Text To Columns。

如果要在新工作簿中打开文本文件后使用当前使用的方法,只需将其复制到当前工作表中 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

在内存中打开文本文件


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


查看完整回答
反对 回复 2019-09-02
?
墨色风雨

TA贡献1853条经验 获得超6个赞

你可以写.WorkbookConnection.Delete .Refresh BackgroundQuery:= False这将删除文本文件外部连接。


查看完整回答
反对 回复 2019-09-02
?
POPMUISE

TA贡献1765条经验 获得超5个赞

我认为我对这个问题的回答是你想要做的最简单的解决方案:


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


使用Data/ Get External Data/ From File对话框选择要导入的文本文件。


根据需要格式化导入的文本。


在Import Data打开的对话框中,单击Properties...


取消选中此Prompt for file name on refresh框。


只要外部文件发生变化,请单击Data/ Get External Data/ Refresh All按钮。


注意:在您的情况下,您可能应该跳过步骤#5。


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 1051 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信