Excel txt文件导入(特定列)到带有VBA的表中

Posted

技术标签:

【中文标题】Excel txt文件导入(特定列)到带有VBA的表中【英文标题】:Excel txt file import (specific columns) into a table with VBA 【发布时间】:2013-01-17 17:32:44 【问题描述】:

我在整理我的 VBA 代码时发现了这个论坛。到目前为止,我在 VBA 编程方面的经验很少。这就是为什么我从两天以来一直在研究我的问题的解决方案,但没有成功。不过,我对提高我的编程技能很感兴趣,希望您能帮助我。

基本上,我想将一个 TXT 文件导入活动的 Excel 工作簿,名为“DataImport”的工作表位于名为“TblDataImport”的表的末尾。

TXT 文件由 13 列组成,由制表符分隔:

    行:公司名称 行:日期 名称 CustomerGroup CustomerNo SalesOrder ItemNumber ItemGroup LineStatus 数量 em> 价格 折扣 DiscountPercentage 净额 行:所有对应的值...

我不需要导入第一行和第二行,因为我想将数据导入到区域的表存在,包括标题。此外,我只需要 13 列中的 7 列,这些列以粗体显示。如果用户可以使用打开文件对话框来选择文本文件,那将是完美的。

如果我手动打开 TXT 文件并将其内容粘贴到 Excel 中,则它已包含在其中 在右侧列中。所以在格式化方面不应该有任何陷阱。

我很好奇您提出的解决方案。

使用宏记录器我只能满足我的一些条件:

Sub DataImport()  
' DataImport Makro  
    Sheets("DataImport").Select  
    With ActiveSheet.QueryTables.Add(Connection:= _  
        "TEXT;C:\Users\Sales.txt", Destination:=Range _  
        ("$A$1"))  
        .Name = "AxaptaSales"  
        .FieldNames = True  
        .RowNumbers = False  
        .FillAdjacentFormulas = False  
        .PreserveFormatting = True  
        .RefreshOnFileOpen = False  
        .RefreshStyle = xlInsertDeleteCells  
        .SavePassword = False  
        .SaveData = True  
        .AdjustColumnWidth = True  
        .RefreshPeriod = 0  
        .TextFilePromptOnRefresh = False  
        .TextFilePlatform = 850  
        .TextFileStartRow = 1  
        .TextFileParseType = xlDelimited  
        .TextFileTextQualifier = xlTextQualifierDoubleQuote  
        .TextFileConsecutiveDelimiter = False  
        .TextFileTabDelimiter = True  
        .TextFileSemicolonDelimiter = False  
        .TextFileCommaDelimiter = False  
        .TextFileSpaceDelimiter = False  
        .TextFileColumnDataTypes = Array(4, 1, 9, 9, 1, 9, 9, 9, 1, 1, 1, 9, 1)  
        .TextFileTrailingMinusNumbers = True  
        .Refresh BackgroundQuery:=False  
    End With  
End Sub  

但是,此代码仅将所有列粘贴到单元格 A1 中(而不是表的末尾)。它还包括第一行和第二行以及我不需要的列。

【问题讨论】:

您是否有理由不能使用另一张表来简单地进行数据导入并手动删除不必要的列? 使用宏记录器,并尝试使用功能区Data > From Text 选项导入您的TXT。然后你应该修改记录的代码以满足你的愿望) 哇,你的速度真快:) @Alexandre:每天都会从文本文件中导入数据。因此,首先手动删除我不需要的列,然后手动将其复制到表“DataImport”的末尾会很麻烦。但也许这可以通过宏自动化? @Peter:我已经尝试过宏记录器,它工作正常,但是记录器不允许我不导入前两行以及导入表末尾的数据。还是我错了? 【参考方案1】:

如果您将以下代码添加到上面的代码中,这会将其添加到工作表中已有数据的末尾

Sub DataImport()

   Dim LastRow As Integer
   Dim LastRow2 As integer
    LastRow = Range("A65536").end(xlup).row
    LastRow = LastRow + 1  
 ' DataImport Makro  
Sheets("DataImport").Select  
With ActiveSheet.QueryTables.Add(Connection:= _  
    "TEXT;C:\Users\Sales.txt", Destination:=Range _  
    ("$A" & LastRow))  
    .Name = "AxaptaSales"  
    .FieldNames = True  
    .RowNumbers = False  
    .FillAdjacentFormulas = False  
    .PreserveFormatting = True  
    .RefreshOnFileOpen = False  
    .RefreshStyle = xlInsertDeleteCells  
    .SavePassword = False  
    .SaveData = True  
    .AdjustColumnWidth = True  
    .RefreshPeriod = 0  
    .TextFilePromptOnRefresh = False  
    .TextFilePlatform = 850  
    .TextFileStartRow = 1  
    .TextFileParseType = xlDelimited  
    .TextFileTextQualifier = xlTextQualifierDoubleQuote  
    .TextFileConsecutiveDelimiter = False  
    .TextFileTabDelimiter = True  
    .TextFileSemicolonDelimiter = False  
    .TextFileCommaDelimiter = False  
    .TextFileSpaceDelimiter = False  
    .TextFileColumnDataTypes = Array(4, 1, 9, 9, 1, 9, 9, 9, 1, 1, 1, 9, 1)  
    .TextFileTrailingMinusNumbers = True  
    .Refresh BackgroundQuery:=False  
End With
Range("A" & LastRow & ":A" & LastRow + 1).entireRow.delete
LastRow2 = Range("A65536").end(xlup).row
Range("H" & LastRow & ":M" & LastRow2).entirecolumn.delete  

结束子

我认为这应该按你的要求做(但我自己还是个新手)

【讨论】:

以上是关于Excel txt文件导入(特定列)到带有VBA的表中的主要内容,如果未能解决你的问题,请参考以下文章

如何将制表符分隔的文本文件导入 Excel?

从多个TXt文件导入数据到excel中,如何修改VBA代码,选取不同的文件

VBA 将 excel 单元格数据导出到 .txt 文件中

Excel,VBA求教表格和TXT文本互转。

怎么用vba把txt文档中的数据导入到excel表格中?

python将txt导入到excel