2017-01-18 152 views
0

我试图通过Excel 2007中功能区上的一个按钮点击单元格来写超链接。这些超链接必须依次执行另一个例程,重新定位。然而,Worksheet_FollowHyperlink()的标准方法将无法正常工作,因为我需要通过外部xlam插件执行此操作,并且据我所知,此事件仅从位于同一工作表中的超链接点击触发。Excel VBA plus =超链接()

因此,我发现使用=HYPERLINK("#funName()","Click me")方法有效,但存在我仍然遇到的问题。

以下是我已经工作的代码下调版本:

Sub InsertLink() ' This is run directly by the callback for an IRibbonControl button click 
    With Sheet1 
    lastrow = Range("A" & Rows.count).End(xlUp).Row 
    While i <= lastrow 
     Range("E" & i).Value = "=HYPERLINK(""#consolidateDuplicate(A" & i & ",C" & i & ")"",""Copy this row to next"")" 
    Wend 
    Call MsgBox ("Finished inserting hyperlinks on each row.", vbOKOnly) 
    End With 
End Sub 

Sub consolidateDuplicate(PN, Quantity) 
    Dim thisRow, prevQuant As Long 
    thisRow = Selection.Row 
    MsgBox("You clicked the hyperlink for " & thisRow & "Q: " & Quantity & ", PN: " & PN) 
End Sub 

点击功能区按钮成功写入所有超链接到与各行如预期。但是,当我尝试单击这些超链接中的任何一个时,因此在同一个加载项模块中执行consolidateDuplicate(),我立即收到“引用无效”警告,然后是MsgBox消息。

我已经尝试从例程中删除所有代码无济于事。我也尝试过使用标准蛮力旁路方法来添加On Error Resume Next ... On Error Goto 0以及Application.DisplayAlerts = False ... Application.DisplayAlerts = True。没有帮助。我仍然收到警告。

所以,虽然我的脚本工作正常,并做我最终想要它,我觉得应该有一种方法来压制警告,或修复造成它的任何东西,我有一种感觉,如Worksheet_FollowHyperlink(),是将该例程存储在加载项模块(我的应用程序所需的)范围内,而不是将其完全包含在调用工作簿/工作表本身中。

任何想法?

回答

1

您的consolidateDuplicate子例程应该是Function,返回超链接应该带您到的地址。缺少返回值是导致“引用无效”错误的原因。

下面的代码可能会奏效,有效地告诉的超级链接带你到其中的超级链接所在的单元格:

Function consolidateDuplicate(PN, Quantity) As Range 
    Dim thisRow, prevQuant As Long 
    thisRow = Selection.Row 
    MsgBox ("You clicked the hyperlink for " & thisRow & "Q: " & Quantity & ", PN: " & PN) 
    Set consolidateDuplicate = Selection 
End Function 
+0

完美!原本我在那里,但无论出于什么原因,我都看到了同样的错误。可能只是一个错字,可能是我为什么在测试期间删除它的原因。 – depwl9992