2017-01-18 18 views
0

Я пытаюсь написать гиперссылки на ячейки одним щелчком мыши по ленте в Excel 2007. Эти гиперссылки должны, в свою очередь, выполнять другую процедуру, которая делает материал в строке, ре. Однако стандартный метод Worksheet_FollowHyperlink() не будет работать, так как мне нужно выполнить его через внешний xml-админ, и, насколько я понимаю, это событие запускается из гиперссылок, расположенных только на том же листе.Excel VBA plus = hyperlink()

В результате я обнаружил, что использование метода =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

Смежные вопросы