Vba 将模块代码应用于多张图纸

Vba 将模块代码应用于多张图纸,vba,excel,triggers,Vba,Excel,Triggers,我创建了一个工作表,它调用多个模块来执行不同的操作,例如计算或隐藏行等 我创建的工作簿和代码仅用于1张工作表,但现在我复制了该工作表并创建了10张工作表,我正在尝试使用我创建的相同模块,并将该代码应用于新工作表 我对excel VBA非常了解,我发现的主题要么不理解,要么不符合我的需要 我的代码示例: 我把这个代码放在表1中 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$E$2" Then

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

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

我对excel VBA非常了解,我发现的主题要么不理解,要么不符合我的需要

我的代码示例:

我把这个代码放在表1中

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

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

您将希望放弃单个事件宏,而使用单个事件宏

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
模块1代码表中:

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
工作簿\u SheetChange捕获对任何工作表所做的更改。首先检查工作表是否是要处理的工作表之一。如果是,请检查目标地址以查看应该运行哪个子过程。将工作表作为一个参数传递到相应的子过程,并在a中使用该参数为所有进一步处理指定父工作表


您应该删除各个工作表代码表“工作表更改子项”中的所有类似代码。

您将希望放弃各个事件宏,而选择单个事件宏

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
模块1代码表中:

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
工作簿\u SheetChange捕获对任何工作表所做的更改。首先检查工作表是否是要处理的工作表之一。如果是,请检查目标地址以查看应该运行哪个子过程。将工作表作为一个参数传递到相应的子过程,并在a中使用该参数为所有进一步处理指定父工作表

您应该删除各个工作表代码表的“工作表更改”子项中的所有类似代码