3

原谅我的无知(新手和对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

问:我做错了什么,使得它只能在最初开发的 Bed1 工作表中工作?

亲切的问候拉斯

4

1 回答 1

2

将代码从模块中取出,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 行。这样维护起来更容易,因为每个工作表的按钮都调用相同的代码,每个工作表的按钮应该只有一个简单的子这称为“主要”程序。

于 2013-10-23T19:42:43.873 回答