Как заполнить ячейки в столбце гиперссылками на себя - PullRequest
0 голосов
/ 20 февраля 2019

Я бы хотел, чтобы столбец AF заполнялся гиперссылками до самой последней строки, содержащей данные в столбце A.

Затем я буду использовать эту ссылку для запуска нужного мне макроса и использовать Target.Cell.Rowчтобы получить информацию из этой строки в макросе.

Я пытался использовать код в этом ответе https://stackoverflow.com/a/33114213/6893569, но постоянно получаю сообщение об ошибке каждый раз, когда пытаюсь запустить свой макрос с помощью этой функцииили вызовите другой макрос из него.Позже я обнаружил, что функции не могут вызывать другие макросы и могут только возвращать значения.

Есть еще идеи?Я искал более часа и пробовал разные комбинации вещей, в том числе щелчок правой кнопкой мыши по ячейке, создание гиперссылки и использование

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) для запуска макроса и Target.Range.Row для получения номера строкипо нажатой ячейке.Тогда единственная проблема заключается в том, что мне нужно, чтобы гиперссылки (стоимостью более 60 000 строк) автоматически заполнялись и связывались с самим собой, было бы глупо делать это вручную и не вижу способа сделать это автоматически, если только он не вставлял гиперссылку формулы вно это не может быть использовано для запуска макроса по какой-то причине.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

target в вашем случае имеет тип Hyperlink и не имеет свойства Range.Он имеет свойство Address и SubAddress - если Гиперссылка указывает на место в той же книге, вы найдете адрес в target.SubAddress - однако это строка, а не Range.

Когда вы устанавливаете адрес назначения для самой ячейки, вы можете использовать ActiveCell.Row, чтобы получить строку - обратите внимание, что, когда адрес указывает на другое место, Excel сначала переходит на это место и выполняеткод после.

Чтобы установить Гиперссылки, используйте код Gary's Student (я собирался опубликовать то же самое).

Ваше предложение "Позже я обнаружил, что функции не могут вызывать другие макросы и могуттолько возвращаемые значения " не имеет смысла для меня - у вас есть подпрограмма события, которая является Sub (не Function).Кроме того, вы можете вызывать любую другую подпрограмму как из функции, так и из подпрограммы.

Общий вопрос заключается в том, не лучше ли использовать другие события рабочей таблицы, например Worksheet_BeforeRightClick или Worksheet_BeforeDoubleClick - там у вас есть Range в качестве цели и не нужно взорвать ваш лист с 60K гиперссылок

0 голосов
/ 20 февраля 2019

Попробуйте:

Sub Macro1()

    Dim AFrange As Range, r As Range, s As String

    Set AFrange = Range("AF1:AF" & Cells(Rows.Count, "A").End(xlUp).Row)

    For Each r In AFrange
        ActiveSheet.Hyperlinks.Add Anchor:=r, Address:="", SubAddress:= _
        ActiveSheet.Name & "!" & r.Address(0, 0), TextToDisplay:="myself"
    Next r
End Sub

РЕДАКТИРОВАТЬ # 1:

Основано на комментарии от Pᴇʜ , используйте это вместо:

Sub Macro1()

    Dim AFrange As Range, r As Range, s As String

    Set AFrange = Range("AF1:AF" & Cells(Rows.Count, "A").End(xlUp).Row)

    For Each r In AFrange
        ActiveSheet.Hyperlinks.Add Anchor:=r, Address:="", SubAddress:= _
        "'" & ActiveSheet.Name & "'!" & r.Address(0, 0), TextToDisplay:="myself"
    Next r
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...