Используя предложение @TimWilliams и ссылочный URL, основываясь на показаниях там и далее, я представляю некоторый демонстрационный код, который работает для меня в Excel 2010: IfError
может не работать в более ранних версиях, и мне интересно, будет ли он вести себя отличается в более поздних версиях.
Примечание. Этот код не может быть отлажен, как при обычном VBA. Это потому, что он выполняется на «стороне электронной таблицы» как пользовательская функция.
Поместите формулу в ячейку (здесь, A2):
=IFERROR(HYPERLINK("#MyUDF()","CellText"),"Junk")
- "CellText" будет отображаться в ячейке A2.
-
"#...."
указывает на UDF. В сочетании с оператором Set
в коде он вызывает «щелчок» для выполнения и выполняется только один раз по щелчку, а не как повторяемое событие, выполняемое при наведении курсора и перемещении по ячейке
-
=IFERROR(HYPERLINK(...),...)
- это обходной путь для #name или другой ошибки. При использовании простого =HYPERLINK(....)
.
Поместите этот код в модуль (измерение и UDF):
Dim j as integer
Function MyUDF() ' this is a user-defined-function
'NOTE: can't be traced when executed,
'so this creates debugging issues
Set MyUDF = Selection
Range("a1") = j
j = j + 1
End Function
Нажатие на URL-адрес в A2 увеличивает значение, отображаемое в A1, - одно приращение за клик.
Чтобы наблюдать эффект парения:
- Закомментируйте «Задать оператор»
- удалить кавычки и знак фунта вокруг ссылки UDF. В ячейке теперь будет отображаться «asdf» вместо «Test».
- Прокрутите URL-адрес, и ячейка A1 будет увеличиваться при перемещении / наведении курсора.
Чтобы вся ячейка вызывала выполнение UDF (и возрастающее значение), включите перенос слов для ячейки.
Обратите внимание, что при наведении указатель часто выполняется при перемещении в ячейке. Для меня код не выполняется, если я перестаю двигаться, находясь в камере.