我创建了一个工作表,可以调用多个模块来执行不同的操作,例如计算或隐藏行等。
我创建了该工作簿和代码只能使用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
我知道问题是我的模块被引用到单个工作表,但我还没有找到一种方法使该模块适用于活动工作表。
答案 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。