【问题标题】:import multiple text files to seperate sheets in the existing workbook将多个文本文件导入现有工作簿中的单独工作表
【发布时间】:2017-01-17 19:46:13
【问题描述】:

我有一个 excel 文件 (2013)(例如 test.xlsm)。 excel 文件包含带有图表和数据透视表的表格,这些表格基于文本文件每月刷新一次。我需要一个 VBA 代码,它可以从我的本地驱动器(我从服务器导入)导入多个文本文件,并将它们附加到这个 excel 文件的末尾(类似于文本文件名的工作表)。每个月,当我导入文本文件时,它必须用新文件替换此数据表。

问题:
我在link 中找到了 VBA 代码!它工作得很好。但我的问题是将数据导入新打开的工作簿而不是现有工作簿。

解决方案

我修改了

Set wkbAll = ActiveWorkbook
wkbTemp.Sheets(1).Copy

Set wkbAll = ThisWorkbook
wkbAll.Activate
wkbTemp.Sheets(1).Copy After:=Sheets(wkbAll.Sheets.Count)

但我得到 错误 1004,未选择数据用分隔符格式化数据

wkbAll.Worksheets(x).Columns("A:A").TextToColumns _
    Destination:=Range("A1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, _
    Tab:=False, Semicolon:=False, _
    Comma:=False, Space:=False, _
    Other:=True, OtherChar:="|"

解决方案 我发现了一些与我类似的问题(如this one),但没有一个对我有用。

请帮我解决这个问题。

这是我的更改代码

Sub copydata()

    Dim FilesToOpen
    Dim x As Integer
    Dim wkbAll As Workbook
    Dim sDelimiter As String


    On Error GoTo ErrHandler
    Application.ScreenUpdating = False

    sDelimiter = "|"

    FilesToOpen = Application.GetOpenFilename _
        (FileFilter:="Text Files (*.txt), *.txt", _
        MultiSelect:=True, Title:="Text Files to Open")

    If TypeName(FilesToOpen) = "Boolean" Then
        MsgBox "No Files were selected"
        GoTo ExitHandler
    End If


    Set wkbAll = Application.ActiveWorkbook
    x = 1

    With Workbooks.Open(fileName:=FilesToOpen(x))
        .Worksheets(1).Columns("A:A").TextToColumns _
            Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
            Tab:=False, Semicolon:=False, Comma:=False, Space:=False, _
            Other:=True, OtherChar:="|"
        .Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.count)
        .Close False
    End With

    x = x + 1

    While x <= UBound(FilesToOpen)
        With Workbooks.Open(fileName:=FilesToOpen(x))
            .Worksheets(1).Columns("A:A").TextToColumns _
                Destination:=Range("A1"), DataType:=xlDelimited, _
                TextQualifier:=xlDoubleQuote, _
                ConsecutiveDelimiter:=False, _
                Tab:=False, Semicolon:=False, _
                Comma:=False, Space:=False, _
                Other:=True, OtherChar:=sDelimiter
            .Sheets(1).Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.count)

        End With
        x = x + 1
    Wend

    wkbAll.Save
ExitHandler:
    Application.ScreenUpdating = True
    Set wkbAll = Nothing
Exit Sub

ErrHandler:
    MsgBox Err.Description
    Resume ExitHandler
End Sub

【问题讨论】:

  • 您是否尝试在新工作表中使用分隔符格式化数据?
  • @VBA Pete,是的,先生,如果它可以在临时文件中格式化并将数据复制到我的excel文件中,对我也有帮助
  • 为了更好地理解您的代码:您为什么要激活工作表 wkbAll.Activate?
  • 因为活动工作簿是wkbTemp,所以我激活了wkbAll
  • 您介意分享您的完整代码吗?很难理解您是如何更改代码的。

标签: vba excel excel-2013


【解决方案1】:

在 OP 提出新请求后编辑(见答案底部)

改变

wkbTemp.Sheets(1).Copy After:=Sheets(wkbAll.Sheets.Count)

wkbTemp.Sheets(1).Copy After:=wkbAll.Sheets(wkbAll.Sheets.Count)

因此您也可以更改整个部分:

Set wkbTemp = Workbooks.Open(Filename:=FilesToOpen(x))
Set wkbAll = ThisWorkbook
wkbAll.Activate
wkbTemp.Sheets(1).Copy After:=Sheets(wkbAll.Sheets.Count)
wkbTemp.Close (False)

With Workbooks.Open(Filename:=FilesToOpen(x))
    .Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.count)
    .Close False
End With

并完全摆脱 wkbTemp 变量


您是否需要将数据复制到同一工作簿的现有工作表中,然后替换

With Workbooks.Open(Filename:=FilesToOpen(x))
    .Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.count)
    .Close False
End With

With Worksheets("Data1") '<--| change "Data1" to your actual name of existing sheet where to paste data into
    .UsedRange.ClearContents
    Worksheets(1).UsedRange.Copy .Range("A1")
End With

【讨论】:

  • @Ivars,你通过了吗?
  • 非常感谢,重写代码后在tempory文件中做分隔符格式,然后将数据连同您指定的更改一起复制到我的excel工作簿中。代码是按照我的意愿工作。惊人的。我重新发布了包含更改的完整代码。
  • 是否可以将数据复制到同一张工作表而不是创建新工作表。例如,如果文件名为 Data1 ,如果我在工作簿中有一个名为 Data1 的工作表名称,是否可以清除工作表的内容并使用更新工作表新数据
  • 是的,但我有多个数据表,如 Data1、Data2、Data3。 Data1 文本文件应复制到 Data1 表中,Data2 文件应复制到 Data2 表中,依此类推。再次感谢你
  • 那么就使用With Worksheets(textFileName),其中textFileName是存储当前文本文件名的变量
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 2019-10-27
  • 2019-10-10
  • 1970-01-01
  • 2018-11-07
相关资源
最近更新 更多