Excel Macro Hyperlink.Добавить ошибки

Excel Macro Hyperlink.Добавить ошибки

Я относительно новичок в коде VBA в Excel, поэтому, пожалуйста, простите меня, если ответ будет простым (я ожидаю, что он обычно простой). Я использую Excel 2010, для справки. Я пытаюсь сделать следующее с помощью следующего скрипта:

Если в любую ячейку столбца D вводится числовая строка (любое значение), мне нужно, чтобы она автоматически преобразовывалась в гиперссылку, которая добавляла бы определенную адресную строку перед значением целевой ячейки и выдавала бы понятное имя, включающее значение ячейки.

Другими словами, вот пример функции Excel, которую я пытаюсь воспроизвести с помощью макроса:

=HYPERLINK("http://stprs553/tickets/list/single_ticket/293136","Ticket #293136")

Или, более конкретно (должно прояснить картину):

=HYPERLINK(CONCATENATE("http://stprs553/tickets/list/single_ticket/","Target_Cell_Data"),"Ticket #Target_Cell_Data")

293136это пример числовой строки, которую я хочу, чтобы пользователь мог ввести в любую ячейку в столбце D. Когда они это сделают, я хочу, чтобы эта ячейка была преобразована в гиперссылку, используя числовую строку в качестве базовых данных, добавляя остаток URL слева от значения ячейки, а затем создавая понятное имя, которое объединяет "Ticket #" с числовой строкой из значения ячейки. Я не хочу, чтобы моим пользователям приходилось изучать формулы Excel, чтобы иметь ссылку, или тратить время на копирование обоих концов функции для обертывания данных ячейки.

Вот что у меня есть на данный момент в VBA:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rangeLimit As Range
Set rangeLimit = Range("D:D")
If Not Intersect(rangeLimit, Target) Is Nothing Then
    If Target <> "" Then
         Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & c.Value, TextToDisplay:="Ticket #" & c.Value, Target.Value
    End If
End If
End Sub

Вот с какими проблемами я сталкиваюсь:

1.) Если я попытаюсь запустить формулу как есть, я получу ошибку компиляции. 2.) Если я удалю конец , Target.Valueстроки гиперссылки, я получу ошибку 424, «Требуется объект».

Что я делаю не так, и/или как мне создать макрос для выполнения нужной функции? Целый час поиска в Google и просмотр некоторых постов StackOverflow привели меня к тому, что у меня есть сейчас, но это все еще не работает.

решение1

Я думаю, что вызов функции должен быть таким:

Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & Target.Value, TextToDisplay:="Ticket #" & Target.Value

Я просто изменил оба вхождения на c, Targetчто, как я думаю, сделает то, что вы описываете. Ошибка «Требуется объект» выдается, потому что cне был инстанцирован ни для чего — вы не можете получить член чего-то, что не является объектом.

EDIT, чтобы устранить проблему с неизменяемым текстом ячейки:

Я задавался вопросом, останется ли текст ячейки просто числом. Исправление будет выглядеть примерно так, я думаю:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rangeLimit As Range
    Set rangeLimit = Range("D:D")
    If Not Intersect(rangeLimit, Target) Is Nothing Then
        If IsNumeric(Target) And Not IsEmpty(Target) Then ' This condition should avoid munging of already-existing links, though if any tickets might be non-numeric it won't work properly.
             Application.EnableEvents = False  ' Must turn off event handling
             Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & Target.Value, TextToDisplay:="Ticket #" & Target.Value
             Target.Formula = "Ticket #" & Target.Value ' Should actually change the displayed text
             Application.EnableEvents = True
        End If
    End If
End Sub

Важно отключить обработку событий всякий раз, когда вы используете VBA для редактирования содержимого ячейки внутри такого события, иначе вы рискуете попасть в бесконечный цикл. Я должен был подумать об этом изначально; но, похоже, что применение гиперссылки к ячейке не вызывает Worksheet_Change.

Обратите внимание, что если вы удалите гиперссылку из ячейки, ячейка останется отформатированной как «подчеркнутая» и «цвет шрифта синий». Для вашего варианта использования, где столбец всегда будет либо ссылками на тикеты, либо пустыми ячейками, это, вероятно, приемлемо?

Связанный контент