Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
Vba 运行WorkbookOpen sub时宏未在其他wb中定位ws_Vba_Excel_Hyperlink - Fatal编程技术网

Vba 运行WorkbookOpen sub时宏未在其他wb中定位ws

Vba 运行WorkbookOpen sub时宏未在其他wb中定位ws,vba,excel,hyperlink,Vba,Excel,Hyperlink,“我的代码”似乎只在当前打开的工作簿中找到工作表。当我在工作簿已经打开后返回,并在工作簿的“打开”子菜单上按F5键时,它会像应该的那样找到每个打开工作簿中的所有工作表。不确定这是否是Excel的限制。任何指针都是有用的 基本上,代码的目标是使单击其他工作簿中的超链接执行此工作簿中的宏。如果有人知道更好的方法,我洗耳恭听 在“本工作簿”中 在“模块2”中 类内模块“cHyperlinks” 子CreateClasseNewWB() '允许将其他工作簿中的超链接从该工作簿的子文件夹中删除 将ws设置

“我的代码”似乎只在当前打开的工作簿中找到工作表。当我在工作簿已经打开后返回,并在工作簿的“打开”子菜单上按F5键时,它会像应该的那样找到每个打开工作簿中的所有工作表。不确定这是否是Excel的限制。任何指针都是有用的

基本上,代码的目标是使单击其他工作簿中的超链接执行此工作簿中的宏。如果有人知道更好的方法,我洗耳恭听

在“本工作簿”中

在“模块2”中

类内模块“cHyperlinks”

子CreateClasseNewWB()
'允许将其他工作簿中的超链接从该工作簿的子文件夹中删除
将ws设置为工作表
暗超链接类为透明链接
'创建集合的新实例
Set objCollection=新集合
对于工作簿“
子CreateClasseNewWB()中的每个wb
'允许将其他工作簿中的超链接从该工作簿的子文件夹中删除
将ws设置为工作表
暗超链接类为透明链接
'创建集合的新实例
Set objCollection=新集合

对于工作簿中的每个wb,这里没有循环遍历所有打开的工作簿的代码,只有活动工作簿的工作表。那么,Tim,你有什么建议?我已经尝试在For-Each-wb循环和For-Each-ws循环中添加了一个For-Each-wb循环,但仍然并没有得到我想要的结果。当我通过子系统上的F5直接执行代码时,另一个wb不是活动工作簿似乎无关紧要。我会为工作簿中的每个wb
循环提出一个
,围绕工作表中的每个ws
(除了它是
wb.Worksheets
)的
,这里没有循环所有打开的工作簿的代码,只有活动工作簿的工作表你有什么建议Tim?我已经尝试在For-Each-wb循环和For-Each-ws循环中添加了一个For-Each-wb循环,但仍然并没有得到我想要的结果。当我通过子系统上的F5直接执行代码时,另一个wb不是活动工作簿似乎无关紧要。我会为工作簿中的每个wb
循环提出一个
,围绕工作表中的每个ws
(除了
wb.工作表
)当我尝试为每个wb创建工作表时,我似乎缺少wb.Worksheets部分。他补充说,现在看来我们可以出发了。谢谢你,蒂姆。你知道在新工作簿打开时启动宏的方法吗?而不仅仅是在工作簿打开时?这样,如果他们在此工作簿之后打开工作簿,则将建立一个新的对象类。是的,您可以使用应用程序事件:例如,请参阅-并注意,每个工作簿对象都有一个
SheetFollowHyperlink
事件,该事件将源工作表作为超链接对象之外的参数。如果您捕获该事件而不是单个工作表事件,则可以从中接收事件的对象会更少。已将其全部设置好并开始欣赏链接。再次感谢Tim。当我尝试为每个wb创建工作表时,我似乎遗漏了wb。工作表部分。他补充说,现在看来我们可以出发了。谢谢你,蒂姆。你知道在新工作簿打开时启动宏的方法吗?而不仅仅是在工作簿打开时?这样,如果他们在此工作簿之后打开工作簿,则将建立一个新的对象类。是的,您可以使用应用程序事件:例如,请参阅-并注意,每个工作簿对象都有一个
SheetFollowHyperlink
事件,该事件将源工作表作为超链接对象之外的参数。如果您捕获该事件而不是单个工作表事件,则可以从中接收事件的对象会更少。已将其全部设置好并开始欣赏链接。再次感谢蒂姆。
 Private Sub Workbook_Open()

 Call CreateClassesNEWWB

 End Sub
Public objCollection As Collection

Sub CreateClassesNEWWB()

'allows hyperlinks in other workbooks to be driven off sub in this workbook
Dim ws As Worksheet
Dim HyperlinksClass As cHyperlinks

'Create A New Instance Of The Collection
Set objCollection = New Collection
'Loop All Worksheets

For Each ws In Worksheets
    'Create A New Class For This Worksheet
  Set HyperlinksClass = New cHyperlinks
    'Add The Worksheet To The Class
  Set HyperlinksClass.obj = ws
    'Add The Class To The Collection
  objCollection.Add HyperlinksClass
Next ws


End Sub
Private WithEvents Pws As Worksheet

Private Sub Pws_FollowHyperlink(ByVal Target As Hyperlink)

Select Case Target.TextToDisplay
Case "Transpose": Call TransposeWire
Case "Research": Call Research
End Select

End Sub

Property Set obj(ByVal objWS As Worksheet)

Set Pws = objWS

End Property
Sub CreateClassesNEWWB()

'allows hyperlinks in other workbooks to be driven off sub in this workbook
Dim ws As Worksheet
Dim HyperlinksClass As cHyperlinks

'Create A New Instance Of The Collection
Set objCollection = New Collection

For Each wb In Workbooks             '<loop workbooks
    For Each ws In wb.Worksheets     '<loop worksheets
        objCollection.Add LinkHandler(ws)
    Next ws
Next wb

End Sub

'I like "factory" functions partly to be sure
'  I'm creating all objects as independent instances...
Function LinkHandler(ws As Worksheet) As cHyperlinks
    Dim rv As New cHyperlinks
    Set rv.obj = ws
    Set LinkHandler = rv
End Function