我有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
对我所缺少的任何帮助都将不胜感激。
答案 0 :(得分:0)
子更新未“看到”变量 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
答案 1 :(得分: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