我的最新问题是this post。我有Master macro
在工作簿中每张表调用macro
。我收到Subscript out of range
错误,因为我在“摘要”表单中的上一篇文章中的macro
转到下一页中的另一个macro
。我想我可以消除错误并使Master macro
工作,如果我可以消除工作表.Select
语句并在一行中识别工作表时调用宏。有什么帮助吗?
现在的情况如何,Call ReformatSummary
Sheets("Boston").Select
之后出现错误:
Sub ReformatTheWorkbook()
Sheets("Summary").Select
Call ReformatSummary
Sheets("Boston").Select
Call ReformatSheetAndAddDropdowns
Sheets("London").Select
Call ReformatSheetAndAddDropdowns
Sheets("Hong Kong").Select
Call ReformatSheetAndAddDropdowns
End Sub
这是我想要做的,但Sheet("name").Select
不必识别下一张表:
Sub ReformatTheWorkbook()
Sheets("Summary").Select
Call ReformatSummary
Application.Run "RefreshAllStaticData"
Application.OnTime Now + TimeValue("00:00:05"), "Part2RTW"
End Sub
Sub Part2RTW()
Sheets("Boston").Select
Call ReformatSheetAndAddDropdowns
Sheets("London").Select
Call ReformatSheetAndAddDropdowns
Sheets("Hong Kong").Select
Call ReformatSheetAndAddDropdowns
End Sub
答案 0 :(得分:2)
以下是共产国际发表评论的例子......你应该将工作表作为参数传递:
Sub ReformatSummary(ws As Worksheet)
'instead of ActiveSheet.Range("A1").Value = "Test" use:
ws.Range("A1").Value = "Test"
End Sub
Sub ReformatSheetAndAddDropdowns(ws As Worksheet)
....Whatever you are doing to the sheets
End Sub
Sub ReformatTheWorkbook()
Call ReformatSummary(Sheets("Summary"))
Call ReformatSheetAndAddDropdowns(Sheets("Boston"))
....
End Sub
这会将工作表作为参数传递。请注意,当您在过程中使用参数时,您需要使用工作表而不是您可能正在执行的操作#34; ActiveSheet。"
所以,如果你有代码如 ActiveSheet.Range(" A1")。值=" TestValue"
这会将所选工作表中的单元格A1
设置为TestValue
相反,你应该使用
ws.Range("A1").Value = "TetsValue"
这会将对象A1
中定义的工作表中的单元格ws
设置为TestValue
在此示例中,工作表对象由语句Sheets("Summary")
正如评论中所述,这与您所拥有的错误消息不匹配。下标超出范围错误通常表示该对象不存在。在这种情况下,我猜测没有名单,#34;波士顿。"