VBA-每张调用宏问题

时间:2016-08-30 17:03:52

标签: vba excel-vba macros excel

我的最新问题是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

1 个答案:

答案 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;波士顿。"