【问题标题】:VBA to copy sheets from all files in folder and copy it to masterVBA从文件夹中的所有文件复制工作表并将其复制到主控
【发布时间】:2017-06-07 21:37:57
【问题描述】:

我有一个包含多个 excel 文件的文件夹,所有文件都有一个特定的工作表,我需要将其复制到我的主文件中。

我需要宏来一一打开该文件夹中的所有文件,并将特定工作表复制到主文件,使用源文件名作为主工作簿中的工作表名称。 Excel 2013。

我尝试在线搜索并有以下代码:

Option Explicit

Sub test()

Dim wkbDest As Workbook
Dim wksDest As Worksheet
Dim wkbSource As Workbook
Dim wksSource As Worksheet
Dim MyPath As String
Dim MyFile As String

Application.ScreenUpdating = False

Set wkbDest = ThisWorkbook
Set wksDest = wkbDest.Worksheets("Sheet1") 'change the destination sheet name accordingly

MyPath = "H:\Cutover\"

If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\"

MyFile = Dir(MyPath & "*.xls")

Do While Len(MyFile) > 0
    Set wkbSource = Workbooks.Open(MyPath & MyFile)
    Set wksSource = wkbSource.Worksheets("Sheet1") 'change the source sheet name accordingly
    'Your copy/paste code here (((((need help here please))))))))
    wkbSource.Close savechanges:=False
    MyFile = Dir
Loop

Application.ScreenUpdating = True

MsgBox "Completed...", vbInformation

End Sub

编辑:

所以我设法到达下面,但它仍然无法正常工作。它不会将工作表重命名为源文件名。有人可以帮忙吗?

选项显式

子测试()

Dim wkbDest As Workbook
Dim wksDest As Worksheet
Dim wkbSource As Workbook
Dim wksSource As Worksheet
Dim MyPath As String
Dim MyFile As String

Application.ScreenUpdating = False

Set wkbDest = ThisWorkbook
Set wksDest = wkbDest.Worksheets("Sheet1") 'change the destination sheet name accordingly

MyPath = "H:\Cutover\"

If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\"

MyFile = Dir(MyPath & "*.xlsx")

Do While Len(MyFile) > 0
    Set wkbSource = Workbooks.Open(MyPath & MyFile)
    Set wksSource = wkbSource.Worksheets("Sheet1") 'change the source sheet name accordingly
    Sheets("SheetToCopy").Copy Before:=Workbooks("WorkbookToPasteIn").Sheets(SheetIndex)
    wkbSource.Close savechanges:=False
    MyFile = Dir
Loop

Application.ScreenUpdating = True

MsgBox "Completed...", vbInformation

结束子

【问题讨论】:

  • @dominic111 你能帮忙吗?
  • @a.s.h 你能帮忙吗?

标签: vba excel


【解决方案1】:

所以您需要帮助的部分是如何将范围从一个文件中的工作表复制/粘贴到目标文件中的通用工作表?

设置一个变量来跟踪目标工作表中的最后一个空行

查看如何确定每个源工作表中的最后一行,选择该源范围,将其复制到剪贴板,然后将其粘贴到目标工作表的最后一个空行,并将目标变量重置为在目标工作表中新建第一个空白行


另一种方法是打开一个输出 CSV 文件,解析每一行并构建一个字符串并将其写入文件,而不关闭输出 CSV 文件,直到循环结束


如果文件很大,使用 VB.NET 会更好,因为它在处理大文件时要快得多


您还可以将每个文件/行读入内存数据表,然后将数据表输出到 CSV 文件或目标 Excel 文件

您更喜欢哪种方法?

【讨论】:

  • 文件不大。最多 300 行,其中只有一张纸。我只需要复制整个工作表并将其作为工作表粘贴到主工作簿中,源文件名作为工作表名称。抱歉,对 VBA 很陌生
  • @A.S.H 你能帮忙吗?
【解决方案2】:

您可以按照以下代码简单地将工作表复制到新工作簿中:

Sheets("SheetToCopy").Copy Before:=Workbooks("WorkbookToPasteIn").Sheets(SheetIndex)

然后,重命名工作表以适合您的方式。

【讨论】:

  • 谢谢你。它可以工作,但是在 2 个工作簿说“这个名字已经被占用”之后它失败了。我需要使用文件名作为工作表名。
  • 然后粘贴后立即改名。如果您有两次相同的工作表名称,则显然行不通。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 2023-02-02
相关资源
最近更新 更多