在所有工作表中应用Button + Macro

时间:2013-10-23 19:28:54

标签: excel vba button

原谅我的无知(新手和VBA的一点知识)......

我开发了一些附加到按钮的宏,并在工作簿中的一个工作表中工作。宏在日历上执行各种作业。医院翼楼的10间卧室每个都有一个日历。

我现在想要为每个卧室制作相同的工作表和相同的按钮和宏,即10个工作表。

但请尝试我可能无法让宏在其他工作表中使用。

宏位于第一个工作表(Bed1)的VBA代码编辑器中。我已将代码复制到VBA编辑器中的“此工作簿”页面中 - 但除了阻止它们工作之外没有任何效果。

这是一个典型的宏:

'============================================
Private Sub Prevw1_Click()
'============================================
' DAILY PATIENT TIMETABLE
' PRINT PREVIEW
'============================================
    ActiveSheet.Select
    ActiveSheet.AutoFilterMode = False
    Range("_Daily").Select
    ActiveSheet.PageSetup.PrintArea = "_Daily"
'
    Call page_SetUp
'
' Variations for page setup
    With ActiveSheet.PageSetup
        .LeftMargin = Application.InchesToPoints(1.5)
        .RightMargin = Application.InchesToPoints(0.9)
        .Zoom = 75
    End With
    ActiveSheet.PrintPreview
    ActiveSheet.PageSetup.PrintArea = ""
    Range("H126, H126").Select
End Sub

Q值。我做错了什么使得它只能在Bed1工作表中首先开发出来?

亲切的问候 拉斯

1 个答案:

答案 0 :(得分:1)

ThisWorkbook模块中取出代码并将其放入普通代码模块中。在设计模式下,在Excel窗口(而不是VBE)中,右键单击按钮并执行Assign Macro,然后选择宏“Prevw1_Click”。这应该工作。您必须为每个按钮分配宏,或者您只需将按钮复制/粘贴到其他工作表。

如果您的按钮是ActiveX控件,那么我认为您可能需要为工作表中按钮所在的每个按钮设置子例程。因此,每个工作表可能都有一个名为“CommandButton1”的activeX命令按钮,然后每个Worksheet代码模块应该有一个子程序,如:

Sub CommandButton1_Click()
    Call ClickTheButton
End Sub

您基本上将所有相同的代码放在10个工作表代码模块中的每一个中。然后,在普通代码模块中重命名例程,如:

Private Sub ClickTheButton()
'============================================
' DAILY PATIENT TIMETABLE
' PRINT PREVIEW
'============================================
    ActiveSheet.Select
    ActiveSheet.AutoFilterMode = False
    Range("_Daily").Select
    ActiveSheet.PageSetup.PrintArea = "_Daily"
'
    Call page_SetUp
'
' Variations for page setup
    With ActiveSheet.PageSetup
        .LeftMargin = Application.InchesToPoints(1.5)
        .RightMargin = Application.InchesToPoints(0.9)
        .Zoom = 75
    End With
    ActiveSheet.PrintPreview
    ActiveSheet.PageSetup.PrintArea = ""
    Range("H126, H126").Select
End Sub

我之所以这样做,而不是将现有宏复制到10个工作表中的每一个都很简单:如果您需要修改子程序,只需要在一个地方修改它。同样,如果你添加一个新的工作表,你只需要复制3行代码而不是20行。这样更容易维护,因为每个工作表的按钮调用相同的代码,每个工作表的按钮应该只有一个简单的子代码这称为“主要”程序。