ОБНОВЛЕНИЕ: Из-за комментария Карлса я вновь пересмотрел свой ответ и обнаружил, что Excel 2007, похоже, не позволяет пользовательским функциям больше устанавливать гиперссылки (довольно разумно, см. Мой собственный комментарий в коде).Таким образом, оригинальный код (ниже строки) не работает в более поздних версиях Excel (я не тестировал Excel 2010, но я предполагаю, что результат тот же).По историческим причинам я не удаляю старый код (редактор может подумать иначе - не стесняйтесь редактировать / удалять соответственно).
Итак, остается только программная установка длинных гиперссылок, например
Sub insertVeryLongHyperlink()
Dim curCell As Range
Dim longHyperlink As String
Set curCell = Range("A1") ' or use any cell-reference
longHyperlink = "http://www.veryLongURL.com/abcde" ' Or a Cell reference like [C1]
curCell.Hyperlinks.Add Anchor:=curCell, _
Address:=longHyperlink, _
SubAddress:="", _
ScreenTip:=" - Click here to follow the hyperlink", _
TextToDisplay:="Long Hyperlink"
End Sub
То, что следует, больше не работает в Excel 2010;см. мой комментарий выше
«Скопировать гиперссылку из Word и вставить в Excel» заставило меня задуматься.Очевидно, что ограничение находится как во встроенной HYPERLINK-функции, так и в диалоговом окне «Редактировать гиперссылку».С другой стороны, должно быть - и на самом деле - возможно устанавливать более длинные гиперссылки через VBA.
Этот код больше не работает в Excel 2010
Function myHyperlink(cell As Range, _
hyperlinkAddress As String, _
Optional TextToDisplay As Variant, _
Optional ScreenTip As Variant)
' Inserts a Hyperlink
' at the position cell (this should be the position where the UDF is used,
' since the return value of the UDF is = TextToDisplay)
' with the hyperlinkAddress
' optional TextToDisplay
' optional ScreenTip
' #######################################
' Warning Warning Warning Warning Warning
' #######################################
' 1) Since it is really bad practice to have a function perform procedural
' tasks, you should not do this.
' 2) You have no garantee, the link is updated when the value hyperlinkAddress changes
' USE AT YOUR ONE RISK AND ONLY IN CASE OF EMERGENCIES :-)
' If more than one cell is selected as target range,
' use the top left cell
Set cell = cell.Resize(1, 1)
If IsMissing(TextToDisplay) Then
TextToDisplay = hyperlinkAddress
End If
If IsMissing(ScreenTip) Then
ScreenTip = hyperlinkAddress & " - Click here to follow the hyperlink"
End If
cell.Hyperlinks.Add Anchor:=ActiveCell, _
Address:=hyperlinkAddress, _
SubAddress:="", _
ScreenTip:=ScreenTip, _
TextToDisplay:=TextToDisplay
' There doesn't seem to be another way to set TextToDisplay
myHyperlink = TextToDisplay
End Function
Использовать как обычную функцию Excel, но обязательно добавьте текущую ячейку в качестве первого параметра (т. Е. В ячейку A1 вставлена следующая формула)
=myHyperlink(A1,B1)
=myHyperlink(A1,B1,"TextToDisplay", "ScreenTip")
Вы не можете ни вытянуть формулу, ни скопироватьэто в другую камеру.Если вы сделаете это, вы должны позволить пересчитать формулу (ни ALT-CTRL-F9, ни ALT-CTRL-SHIFT-F9, так как кажется, что принудительное пересчет силы работает), поэтому войдите в каждую ячейку, нажмите F2, чтобы активировать ее и завершить с помощью Return.
Надеюсь, я не помогу вам испортить слишком много книг Excel.
Вероятно, безопаснее написать VBA, которая явно запускается, итеративно просматривая список и записывая гиперссылки.Таким образом, они могут быть использованы повторно, и нет никаких функций.
С уважением, Андреас