使用VBA将Excel txt文件导入(特定列)到表中

时间:2013-02-02 14:02:49

标签: excel vba text import

我在尝试整理我的VBA代码时发现了这个论坛。到目前为止,我对VBA编程的经验很少。这就是为什么我已经研究了两天来解决我的问题,但没有成功。但是,我对提高编程技巧感兴趣,希望你能帮助我这样做。

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

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

  1. 行:CompanyName
  2. 行:日期 名称 CustomerGroup CustomerNo SalesOrder ItemNumber ItemGroup LineStatus 数量 价格 折扣 DiscountPercentage NetAmount
  3. 行:所有相应的值......
  4. 我不需要导入第一行和第二行,因为我想将数据导入到包含标题的表中。此外,我只需要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中(不在表格的末尾)。它还包括第一行和第二行以及我不需要的列。

1 个答案:

答案 0 :(得分:0)

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

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  

End Sub

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