将模块代码应用于多个表格

时间:2016-02-29 13:44:11

标签: excel vba excel-vba triggers

我创建了一个工作表,可以调用多个模块来执行不同的操作,例如计算或隐藏行等。

我创建了该工作簿和代码只能使用1张,但现在我复制了该工作表并创建了10个,我正在尝试使用我创建的相同模块并将该代码应用于新工作表。

我在excel VBA中非常基础,而且我发现的主题是我不了解或不满足我的需求。

我的代码示例:

我把这段代码放在Sheet1

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$E$2" Then
    ModuloAct
End If
If Target.Address = "$E$10" Then
    Colaborador
End If
If Target.Address = "$E$11" Then
    Dias
End If
End Sub

模块示例

Sub ModuloAct()

If Worksheets("Hoja1").Cells(2, 5).Value = "T" Then
Worksheets("Hoja1").Cells(8, 5).Value = 0.16
Worksheets("Hoja1").Cells(2, 5).Value = "Tension"

End Sub

我知道问题是我的模块被引用到单个工作表,但我还没有找到一种方法使该模块适用于活动工作表。

1 个答案:

答案 0 :(得分:0)

您将要放弃单个Worksheet_Change事件宏,转而使用单个Workbook_SheetChange事件宏。

<强> In ThisWorkbook code sheet:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub

    On Error GoTo bm_Safe_Exit
    'check for a valid worksheet name
    Select Case Sh.Name
        Case "Hoja1", "Hoja2", "Hoja3", "Hoja4"
            Application.EnableEvents = False
            Select Case Target.Address
                Case "$E$2"
                    ModuloAct Sh
                Case "$E$10"
                    Colaborador Sh
                Case "$E$11"
                    Dias Sh
                Case Else
                    'do nothing
            End Select
        Case Else
            'do nothing
    End Select
bm_Safe_Exit:
    Application.EnableEvents = True
End Sub

在Module1代码表中:

Sub ModuloAct(ws As Worksheet)

    With ws
        If .Cells(2, 5).Value = "T" Then
            .Cells(8, 5).Value = 0.16
            .Cells(2, 5).Value = "Tension"
        End If
    End With

End Sub

Workbook_SheetChange捕获对任何工作表所做的更改。首先检查工作表是否是您要处理的工作表之一。如果是,请检查目标地址以查看应运行的子程序。将工作表作为Worksheet object传递给相应的子过程,并在With ... End With statement中使用该参数为所有进一步处理分配父工作表。

您应该删除单个工作表代码表中的所有类似代码。 Worksheet_Change subs。