Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel vba将代码从模块传输到工作表新创建的工作表_Vba_Excel - Fatal编程技术网

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

excel vba将代码从模块传输到工作表新创建的工作表,vba,excel,Vba,Excel,问题是: 我可以将此代码存储到模块吗? 如果没有,如何将代码传输到新创建的工作表 从模块如何在每次添加工作表时传输此代码 提前谢谢 你喜欢这样吗 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$10" Then Call mymacro End If End Sub 你喜欢这样吗 Private Sub Worksheet_Change(ByVal Targe

问题是:

我可以将此代码存储到模块吗? 如果没有,如何将代码传输到新创建的工作表 从模块如何在每次添加工作表时传输此代码 提前谢谢 你喜欢这样吗

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$D$10" Then
        Call mymacro
    End If
End Sub
你喜欢这样吗

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$D$10" Then
        Call mymacro
    End If
End Sub
这是我以前从未尝试过的一个改编示例。此代码放在一个标准模块中,您可以从主子模块调用该模块。需要将引用添加到VBA可扩展性中,并且需要信任对vb模型的访问

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$D$10" Then

    Call mymacro
    Me.Copy after:=Sheets(Sheets.Count)
    ActiveSheet.Cells.Clear
End If
End Sub
启用VBA项目对象模型:

单击文件,然后单击选项。 在导航窗格中,选择信任中心。 单击信任中心设置。。。。 在导航窗格中,选择“宏设置”。 确保选中了对VBA项目对象模型的信任访问。 单击“确定”。 **阅读有关信任访问vba项目模型的内容,以确定是否适合您。

这是一个我以前从未尝试过的自适应示例。此代码放在一个标准模块中,您可以从主子模块调用该模块。需要将引用添加到VBA可扩展性中,并且需要信任对vb模型的访问

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$D$10" Then

    Call mymacro
    Me.Copy after:=Sheets(Sheets.Count)
    ActiveSheet.Cells.Clear
End If
End Sub
启用VBA项目对象模型:

单击文件,然后单击选项。 在导航窗格中,选择信任中心。 单击信任中心设置。。。。 在导航窗格中,选择“宏设置”。 确保选中了对VBA项目对象模型的信任访问。 单击“确定”。
**阅读有关信任访问vba项目模型的内容,以确定是否适合您。

您可以使用工作簿更改事件。将代码放入工作簿模块中。那么就不需要复制任何代码了

Public Sub AddWorksheetEventCode()
'Tools > references > Microsoft Visual Basic for Applications Extensibility 5.3 
'Trust access to VBA model

    Dim wb As Workbook
    Dim wsNew As Worksheet

    Set wb = ThisWorkbook

    Dim xPro As VBIDE.VBProject
    Dim xCom As VBIDE.VBComponent
    Dim xMod As VBIDE.CodeModule
    Dim xLine As Long

    wb.Worksheets.Add After:= wb.Worksheets(ActiveSheet.Index)
    Set wsNew = ActiveSheet

    With wsNew
        Set xPro = wb.VBProject
        Set xCom = xPro.VBComponents(wsNew.Name)
        Set xMod = xCom.CodeModule

        With xMod

            xLine = .CreateEventProc("Change", "Worksheet")
            xLine = xLine + 1
            .InsertLines xLine, "If Target.Address = ""$D$10"" Then "
            xLine = xLine + 1
            .InsertLines xLine, "Call mymacro"

        End With

    End With

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

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   If Target.Address = "$D$10" Then
       Call mymacro
   End If
End Sub
并将工作簿更改事件更改为

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

您可以使用工作簿更改事件。将代码放入工作簿模块中。那么就不需要复制任何代码了

Public Sub AddWorksheetEventCode()
'Tools > references > Microsoft Visual Basic for Applications Extensibility 5.3 
'Trust access to VBA model

    Dim wb As Workbook
    Dim wsNew As Worksheet

    Set wb = ThisWorkbook

    Dim xPro As VBIDE.VBProject
    Dim xCom As VBIDE.VBComponent
    Dim xMod As VBIDE.CodeModule
    Dim xLine As Long

    wb.Worksheets.Add After:= wb.Worksheets(ActiveSheet.Index)
    Set wsNew = ActiveSheet

    With wsNew
        Set xPro = wb.VBProject
        Set xCom = xPro.VBComponents(wsNew.Name)
        Set xMod = xCom.CodeModule

        With xMod

            xLine = .CreateEventProc("Change", "Worksheet")
            xLine = xLine + 1
            .InsertLines xLine, "If Target.Address = ""$D$10"" Then "
            xLine = xLine + 1
            .InsertLines xLine, "Call mymacro"

        End With

    End With

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

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   If Target.Address = "$D$10" Then
       Call mymacro
   End If
End Sub
并将工作簿更改事件更改为

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

我投了@Storax的赞成票,因为我不知道。但是,您应该记住,工作簿\u SheetChange事件将为所有工作表触发,可能包括一些不希望宏运行的工作表。因此,您需要添加代码,以防止在不需要的地方触发事件时宏执行操作


另一种方法是,查看创建图纸的方式。如果插入新工作表,新添加的内容将完全为空,但如果使用“移动”或“复制/创建副本”或其VBA等效项,则会得到一张新工作表,该工作表是原始工作表的副本,包括其代码。另一个优点是,您可以获得完全格式化的工作表,通常很容易清除在此过程中复制的任何数据。

我对@Storax answer投了赞成票,因为我不知道这一点。但是,您应该记住,工作簿\u SheetChange事件将为所有工作表触发,可能包括一些不希望宏运行的工作表。因此,您需要添加代码,以防止在不需要的地方触发事件时宏执行操作


另一种方法是,查看创建图纸的方式。如果插入新工作表,新添加的内容将完全为空,但如果使用“移动”或“复制/创建副本”或其VBA等效项,则会得到一张新工作表,该工作表是原始工作表的副本,包括其代码。另一个优点是,您可以获得一个完全格式化的工作表,通常很容易清除在此过程中复制的任何数据。

我尝试了该工作表的可能副本,但它的创建附加工作簿不在woorkbook上,我尝试操作代码,以便它只在它将应用的thisworkbook上,但是没有锁,它不工作。我刚开始学习vba,谢谢你,againI给了你一个下面的例子。可能是重复的,我尝试过这个,但它的创建附加工作簿不是在woorkbook上,而是在woorkbook上,我尝试操作代码,使它只在这个工作簿上应用,但没有锁定,它不起作用。我刚刚开始学习vba,谢谢你,againI给了你一个下面的例子。如果你需要阻止代码在某些工作表上运行,你可以添加一个函数isInArray。我编辑了我的答案。如果你需要阻止代码在某些工作表上运行,你可以添加一个函数isInArray。我编辑了我的答案。