【问题标题】:How to copy a worksheet from one workbook to others in VBA如何在 VBA 中将工作表从一个工作簿复制到其他工作簿
【发布时间】:2016-08-17 08:14:30
【问题描述】:

我想将带有公式的工作表复制到其他工作簿,因此有一个通用目标很重要,我也可以将其用于其他工作簿,而不仅仅是一个工作簿。 这是我的代码:

Sub Macro1()

    Windows("Filefromcopy.xls").Activate
    Sheets("needtocopy").Select
    Sheets("needtocopy").Copy Before:=Workbooks("target.xls").Sheets(1)
End Sub

你能帮帮我吗?

谢谢!

【问题讨论】:

  • 您的代码面临哪些问题\错误?

标签: vba excel macros copy


【解决方案1】:

我会这样做:

Sub Button1_Click()
    Dim source_worksheet As Worksheet
    Dim source_workbook As Workbook
    Dim target_workbook As Workbook

    Set source_workbook = ActiveWorkbook
    Set target_workbook = Workbooks.Add()
    Set source_worksheet = source_workbook.Sheets("needtocopy")

    source_worksheet.Copy Before:=target_workbook.Sheets(1)
End Sub

这段代码有点冗长,但目的是让你知道事情发生在哪里。

目标工作簿的选择是在 Set target_workbook 行上完成的。在这里您可以创建一个新的工作簿(就像我在这个示例中所做的那样),或打开一个现有的工作簿。

要打开现有工作簿,请将 Set target_workbook 行替换为:

Set target_workbook = Workbooks.Open("target.xls")

最后,您还可以添加一些保存和关闭功能:

target_workbook.Save
target_workbook.Close

要获取文件夹中的文件列表,您需要使用 Dir 定义一个对象(如本文所述:Loop through files in a folder using VBA?):

Sub Button1_Click()
Dim source_worksheet As Worksheet
Dim source_workbook As Workbook
Dim target_workbook As Workbook

Set source_workbook = ActiveWorkbook
Set source_worksheet = source_workbook.Sheets("needtocopy")

Dim file As Variant
Dim folder As String
folder = "C:\test\"
file = Dir(folder)
Application.DisplayAlerts = False
While (file <> "")
    If InStr(file, "Allocation") <> 0 Then
        Set target_workbook = Workbooks.Open(folder & file)
        source_worksheet.Copy Before:=target_workbook.Sheets(1)
        target_workbook.Save
        target_workbook.Close
    End If
    file = Dir
Wend
Application.DisplayAlerts = True
End Sub

【讨论】:

  • 哦,看起来不错,谢谢!但实际上我真正的问题是要有一个通用的目标,所以我可以在每个文件名中包含“分配”一词的文件中使用它。您能否也给我一些想法?
  • 我试过了,它对我不起作用。我没有收到任何消息或调试。当我打开目标文件时,如果我启用或禁用宏,我只会收到一条消息,并且它不会复制工作表。我将目标文件和源文件都保存到桌面,并为文件夹提供了该位置,但是什么都没有发生..
  • 我再次对其进行了测试,它对我有用。您是否更改了文件夹变量中的路径设置?另外,尝试注释掉 Application.DisplayAlerts = False 以查看任何错误消息。
猜你喜欢
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
相关资源
最近更新 更多