Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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:调用工作表\u从其他工作表更改_Excel_Vba - Fatal编程技术网

Excel vba:调用工作表\u从其他工作表更改

Excel vba:调用工作表\u从其他工作表更改,excel,vba,Excel,Vba,假设我有一个包含两个工作表的工作簿: Sheet1和Sheet2 在表1中有一个工作表\u更改子项: Private Sub Worksheet_Change(ByVal Target As Range) ... End Sub 在工作表2中有一个工作表\u Calculate: Private Sub Worksheet_Calculate() 'Call Sheets("Sheet1").Worksheet_Change(Range("A1")) 'doesn't wor

假设我有一个包含两个工作表的工作簿:

Sheet1
Sheet2

表1
中有一个
工作表\u更改
子项:

Private Sub Worksheet_Change(ByVal Target As Range)
    ...
End Sub
工作表2中有一个
工作表\u Calculate

Private Sub Worksheet_Calculate()
    'Call Sheets("Sheet1").Worksheet_Change(Range("A1"))  'doesn't work
End Sub

如何调用
Sheet1
'a
工作表\u Change
子例程,从
Sheet2
中的
工作表\u Calcalculate

您可以使用
应用程序。像这样运行

Application.Run "Sheet1.Worksheet_Change", Range("A1")

请注意,
Sheet1
此处是工作表的VBA名称,而不是选项卡上的名称。可以在图纸的属性窗口(在VB编辑器中)中更改VBA名称


或者,将
工作表中的代码\u Change
移动到如下模块中:

Public Sub MySpecificWorksheet_Change(ByVal Target As Range)
    ...
End Sub
工作表\u Change
工作表\u Calculate

Private Sub Worksheet_Change(ByVal Target As Range)
    MySpecificWorksheet_Change(ByVal Target As Range)
End Sub

Private Sub Worksheet_Calculate()
    MySpecificWorksheet_Change(ByVal Target As Range)
End Sub
要么:

  • Private子工作表\u Change
    更改为
    Friend子工作表\u Change
  • 私有子工作表\u Change
    的功能移动到朋友/公共子工作表中,并从
    工作表\u Change
    工作表\u Calculate
    调用它。[建议]

在工作表中调用事件与在任何模块或对象中调用任何非显式的“私有”Sub
函数没有区别。如果他们不是
公众
朋友
,他们不会在不提及他们居住的地方的情况下给出他们的功能、子功能和属性

如果事件之前未使用关键字
Private
进行修改,则可以使用以下代码调用它们:

Sub TestMe
    Sheet1.Worksheet_Change Range("A1")
End Sub
如果有人在事件开始时明确添加了单词
Private
,则如下所示:

<代码>私有子工作表更改(ByValAbjor为范围),那么我们确实应该考虑不访问事件。如果仍然要访问它,可以使用

应用程序运行

Application.Run "Sheet1.Worksheet_Change", Sheet1.Range("A1")
Application.Run CStr(Worksheets(1).CodeName & ".Worksheet_Change"), Range("A1")

我得到一个
无法运行宏“Sheet1.Wokrsheet\u change”。可能此宏不存在或所有宏都已关闭“
错误(从我的excel版本翻译)请注意,
Sheet1
是工作表的VBA名称(将该信息添加到答案中)。谢谢,我更改了工作表的VBA名称,现在可以使用了!