Цикл VBA для обновления гиперссылки для каждой ячейки в столбце - PullRequest
1 голос
/ 19 марта 2019

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

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

Range("AB118").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
Range("Z118") & Range("AD105")

Итак, в основном:

Столбец AB содержит последнюю гиперссылку, например,На главную! AB118

Столбец Z содержит название листа Например.Дом!

Ячейка AD105 содержит ячейку, в которую вы попадете. Например.AB118

Я написал макрос для обновления гиперссылки по одной ячейке / строке за раз.

 'Update "Sheet 1" Link
    Range("AB118").Select
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    Range("Z118") & Range("AD105")

'Update "Sheet 2" Link
    Range("AB119").Select
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    Range("Z119") & Range("AD105")

'Update "Sheet 3" Link
    Range("AB120").Select
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    Range("Z120") & Range("AD105")

Есть ли способ использовать «Для каждого» или аналогичный, чтобы сократить этот макроскоторая проходит через каждую строку, объединяя столбец Z и ячейку AD105 в гиперссылку, которая появляется в столбце AB.

Надеюсь, это будет иметь смысл, я достаточно опытен с Excel и VBA, но новичок в форуме.

Таблица этой информации начинается в строке 118 и заканчивается строкой 171, поэтому я не уверен, нужно ли мне указывать, чтобы она начиналась в определенной строке и заканчивалась в определенной строке.

Ответы [ 3 ]

2 голосов
/ 19 марта 2019

Вы можете использовать следующую подпрограмму для переключения между столбцами «B» и «C», пока один из них не станет пустым. Это заполнит столбец «A» значениями из «B» и «C», пока не останется больше смежных значений.

Private Sub NewLink()
    Dim i As Integer
    i = 1
    Do Until IsEmpty(Range("B" & i).Value) Or IsEmpty(Range("C" & i).Value)
        Range("A" & i).Select
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
        Range("B" & i) & Range("C" & i)
        i = i + 1
    Loop
End Sub

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

Call NewLink

Следуя рекомендациям Dude_Scott для .Select, используйте следующее.

Private Sub NewLink()
    Dim i As Integer
    i = 1
    Do Until IsEmpty(Range("B" & i).Value) Or IsEmpty(Range("C" & i).Value)
        ActiveSheet.Hyperlinks.Add Anchor:=Range("A" & i), Addreess:="", SubAddress:= _
        Range("B" & i) & Range("C" & i)
        i = i + 1
    Loop
End Sub

РЕДАКТИРОВАТЬ: Чтобы помочь читателям в выборе правильного решения для своих нужд.

Преимущества цикла «делать пока» заключаются в том, что вы можете добавлять дополнительные последовательные строки без необходимости обновления макроса / подпрограммы.

Недостатки в том, что столбцы "B" и "C" по существу зарезервированы для создания ссылок в столбце "A".

1 голос
/ 20 марта 2019

У нас уже есть принятый ответ с использованием стандартного цикла For, но вот версия, использующая For Each, With и Offset для справки:

Dim WorkingCell As Range

For Each WorkingCell In ActiveSheet.Range("AB118:AB171").Cells
    With WorkingCell
        .Hyperlinks.Add Anchor:=.Cells(1,1), Address:="", _
            SubAddress:=.Offset(0,-2).Value & ActiveSheet.Range("AD105").Value
    End With
Next WorkingCell
1 голос
/ 19 марта 2019

В вашем коде может быть ошибка при выполнении гиперссылки, если это не указано в значении ячейки. Вы должны убедиться, что ссылка настроена как ссылка на диапазон листа.

SubAddress:= Range("Z118") & Range("AD105")

Должно быть

SubAddress:= "'" & Range("Z118") &"'!" & Range("AD105")

Но так как это обрабатывается в ваших значениях ячеек, у вас есть несколько вариантов отсюда. Но вот цикл For, как вы и просили (см. TinMan464 для цикла While):

Sub foo() 
Dim i as integer 

  For i = 118 to 200 ‘change the last number to what you need 
     Range("AB"&i).Select
     ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= "'" & Range("Z"&i) &"'!" &  Range("AD105")
  Next i

End sub

Но я бы не стал использовать select

Sub foo()
Dim i as integer

  For i = 1 to 3 ‘change the last number to what you need 
      ActiveSheet.Hyperlinks.Add Anchor:= Range("AB"&i), Address:="", SubAddress:= "'" & Range("Z"&i) &"'!" &  Range("AD105")
  Next i

End sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...