2

Я относительно новичок в коде 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 ответ1

1

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

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

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

РЕДАКТИРОВАТЬ, чтобы адрес ячейки не изменялся:

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

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 .

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .