2013-04-26 81 views
0

我在表示数据流中的进程的图中有形状;基于形状和形状名称中的文本(例如,名为“Control ##”的形状,其中文本“ABC”链接到定义ABC过程的选项卡),形状超链接到位于另一个选项卡中的过程定义。如果我将形状中的文本更改为“XYZ”,即是否希望超链接转到“XYZ”定义,是否有自动更新该形状中的超链接的方法?我尝试过SheetFollowHyperlink事件过程,但似乎没有发生。代码我到目前为止如下:当超链接被点击时,有没有办法刷新/更新形状中的超链接?

Sub AssignHyperlink() 

Dim CallerShapeName As String 
CallerShapeName = Application.Caller 

With ActiveSheet 
    Dim CallerShape As Shape 
    Set CallerShape = .Shapes(CallerShapeName) 

    Dim RowVar As Integer 

    Err.Number = 0 
    On Error Resume Next 

    If InStr(CallerShapeName, "Control") = 1 Then 

     RowVar = Application.WorksheetFunction _ 
      .Match(.Range("C2").Value & CallerShape.TextFrame2.TextRange.Text, _ 
      Sheets("Control Point Log").Range("A1:A700"), 0) 

     If (Err.Number = 1004) Then 
      MsgBox "No match found for this shape text in the Control Point Log" 
      Exit Sub 
     End If 

     On Error GoTo 0 

     .Hyperlinks.Add Anchor:=CallerShape, _ 
     Address:=ActiveWorkbook.Name & "#" & "'Control Point Log'!$C$" & RowVar 

    Else 

     RowVar = Application.WorksheetFunction _ 
      .Match(.Range("C2").Value & CallerShape.TextFrame2.TextRange.Text, _ 
      Sheets("Data Flow Glossary").Range("A1:A700"), 0) 

     If (Err.Number = 1004) Then 
      MsgBox "No match found for this shape text in the Data Flow Glossary" 
      Exit Sub 
     End If 

     On Error GoTo 0 

     .Hyperlinks.Add Anchor:=CallerShape, _ 
     Address:=ActiveWorkbook.Name & "#" & "'Data Flow Glossary'!$C$" & RowVar 

    End If 

End With 

End Sub 
+0

当单击形状时,为什么不检索形状的文本并使用它直接导航到相关的工作表?或者我错过了什么? – 2013-04-26 23:18:11

+0

我正在使用形状的文本进行链接,但是当我更改文本时,它不会使用新文本重新链接形状。 – 2013-04-27 02:20:31

+0

你用哪种方式定义hyperling的目的地?他们只是'选项卡'(张)名称,或者您在工作簿中使用“命名范围”? – 2013-04-27 05:52:05

回答

1

1st。我假设你的目标是在你点击形状后导航到工作簿中的范围

2nd。要导航到的范围被命名为范围。

3rd。要导航的范围等于形状中的文本。

我的建议是使用onAction触发形状(assign macro时形状的右键)

4RD。我们需要以下程序 - 一个适用于所有形状。

Sub Hyperlink_Workaround() 
    On Error GoTo ErrorHandler 

    Dim curHL As String 
     curHL = ActiveSheet.Shapes(Application.Caller).TextFrame2.TextRange.Text 

    'which way do you define destination? 
    'this way you go to named range 

    Application.Goto Range(curHL), True 
    Exit Sub 
ErrorHandler: 
    MsgBox "There is no range like " & curHL 
End Sub 

5th。单击任何形状后,我们将在工作簿中移动到ABC或DEF范围,然后测试,在分配上述宏的工作表上具有以下形状。 enter image description here

6th。当您尝试导航到不存在的范围时,我为情况添加了处理程序。

+0

+ 1准确地说我的观点。 OP迟到了,否则我会在昨天贴上几乎相同的代码。 – 2013-04-27 07:02:27

+0

谢谢,这确实有效,但我有大量的单元格,我不得不为此命名(超过225)。是否有任何其他解决方法可以为超链接提供建议?如果我检查超链接拳头并将其替换?这会起作用吗? – 2013-04-29 19:25:48

+0

我不确定我是否能够正确回答您的问题......您写过:'我想要超链接然后转到“XYZ”定义?所以,这意味着你有这个定义。所以,你在哪里和在哪里存储XYZ应该打开类似Sheet(“Foo”)的信息。范围(“A100”)... – 2013-04-29 19:37:09