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。我编辑了我的答案。