1

我有 20 个 excel 工作簿 - 除了它们使用不同的数据之外,每个都相同。我经常需要改进和更新公式,然后依次从源工作簿复制到其他每个工作簿。

我使用 VBA 记录一个宏(我知道这不是那么优雅)来复制和粘贴所需的更改。这很好,但是必须复制宏 20 次,每次都更改目标工作簿名称,这很乏味。我首选的解决方案是通过设置循环并依次为每个目标调用宏来自动化它。

我是宏的新手,并且正在努力使用正确的语法。

我尝试了以下方法,但它不起作用。我收到“未设置对象变量”错误消息,我不太明白也无法解决。

Sub New()
'
Dim i As Integer
Dim target As Workbook
target(1) = "Workbook1.xlsx"
target(2) = "Workbook2.xlsx"
'etc for the other countries
For i = 1 To 20
Update
Next i
End Sub

Sub Update()
' Update macro copies updated cells from workbook Country A.xlsx to target workbook
Windows("Country A.xlsx").Activate
Sheets("Tax").Select
Rows("17:26").Select
Selection.Copy
Windows(target(i)).Activate
Sheets("Tax").Select
Range("A17").Select
ActiveSheet.Paste
' Etc for other changes required
End Sub

对我所缺少的任何帮助将不胜感激。

4

2 回答 2

0

在尝试了一些不同的事情之后,我找到了一个避免上述代码问题的解决方案。它涉及在数组中设置各种目标工作表的名称。

下面的代码有效

Sub Newtest()
'
Dim target As String
Dim targetwb(1 To 2) As String
targetwb(1) = "Workbook3.xlsx"
targetwb(2) = "Workbook4.xlsx"
'
For i = 1 To 2
    target = targetwb(i)
    Test1 (target)
Next i

End Sub

Sub Test1(target)
'
' Copies updated cells from workbook Country A.xlsx to target workbook
'
Windows("Country A.xlsx").Activate
Sheets("Tax").Select
Rows("17:26").Select
Selection.Copy
Windows(target).Activate
Sheets("Tax").Select
Range("A17").Select
ActiveSheet.Paste
'
End Sub
于 2013-10-13T11:55:51.923 回答
0

Sub Update 没有“看到”变量i。考虑:

Sub New()
    Dim i As Integer
    Dim target As Workbook
    target(1) = "Workbook1.xlsx"
    target(2) = "Workbook2.xlsx"
    'etc for the other countries
    For i = 1 To 20
        Update (i)
    Next i
End Sub

Sub Update(i As Integer)
    ' Update macro copies updated cells from workbook Country A.xlsx to target workbook
    Windows("Country A.xlsx").Activate
    Sheets("Tax").Select
    Rows("17:26").Select
    Selection.Copy
    Windows(target(i)).Activate
    Sheets("Tax").Select
    Range("A17").Select
    ActiveSheet.Paste
    ' Etc for other changes required
End Sub
于 2013-09-30T11:05:47.563 回答