excel vba将代码从模块传输到工作表新创建的工作表

1 excel vba excel-vba

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$D$10" Then
        Call mymacro
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

问题是:

  1. 我可以将此代码存储到模块中吗?
  2. 如果没有,代码如何能够代码转移到新创建的工作表
  3. 从模块我怎样才能在每次添加工作表时传输此代码提前感谢

Sto*_*rax 6

您可以使用Workbook_SheetChange事件.将代码放在工作簿模块中.然后就不需要复制任何代码了.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   If Target.Address = "$D$10" Then
       Call mymacro
   End If
End Sub
Run Code Online (Sandbox Code Playgroud)

编辑如果您需要阻止代码在某些工作表上运行,您可以添加以下功能

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
    On Error Resume Next ' Invalid Parameters passed, IsInArray will be defaulted to FALSE
    IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
Run Code Online (Sandbox Code Playgroud)

并将Workbook_SheetChange事件更改为

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Dim shArr() As Variant

    'Example, mymacro will not run on the sheets "Overview" and "Total"
    shArr = Array("Overview", "Total")

    If Not IsInArray(Sh.Name, shArr) Then
        If Target.Address = "$D$10" Then
            Call mymacro
        End If
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)