Страницы: 1
RSS
Создание гипер ссылок в нескольких тысячах ячеек.
 
Всем доброго дня!  
 
Я соорудил макрос, который формирует гиперссылки на основании Id ссылки (столбец D).  
Вот сам макрос:  
 
Sub Ссылки()  
' Создаю переменную и присваиваю ей статическую часть ссылки  
Dim ssilka As String  
ssilka = Sheets("Data").Range("A10").Value  
 
Dim i As Integer  
Dim iLastRow As Integer  
' узнаю номер последней непустой строки, и присваиваю цифру переменной  
iLastRow = Cells(Rows.Count, 4).End(xlUp).Row  
' запускаю цикл и формирую ссылки в столбце "С"  
For i = 11 To iLastRow  
Sheets("Активация").Hyperlinks.Add Anchor:=Cells(i, 3), Address:=ssilka & Cells(i, 4), TextToDisplay:="Ссылка"  
Next i  
End Sub  
 
Все бы было хорошо, но есть одна проблема, если строк несколько тысяч и если в других листах есть еще данные, то на формирование одной ссылки уходит почти секунда, весь массив может отрабатываться до 15 минут.  
 
Подскажите, есть ли другой способ провести эту же операцию, но быстрее?  
Возможно ли например загрузить весь массив в переменную типа Variant, обработать каждый элемент массива и потом выгрузить в ячейки?  
Прошу прощения, если вопрос задан не корректно, я в VBA не силен.
 
Прикрепил файл для примера.
 
application.screenupdating=false  
код  
application.screenupdating=true
 
{quote}{login=}{date=27.07.2011 02:11}{thema=}{post}application.screenupdating=false  
код  
application.screenupdating=true{/post}{/quote}  
 
А в какое место кода нужно добавить эту строчку?  
Спасибо.
 
Sub Ссылки()  
 
application.screenupdating=false ' отключаем обновление экрана  
 
' Создаю переменную и присваиваю ей статическую часть ссылки  
Dim ssilka As String  
ssilka = Sheets("Data").Range("A10").Value  
 
Dim i As Integer  
Dim iLastRow As Integer  
' узнаю номер последней непустой строки, и присваиваю цифру переменной  
iLastRow = Cells(Rows.Count, 4).End(xlUp).Row  
' запускаю цикл и формирую ссылки в столбце "С"  
For i = 11 To iLastRow  
Sheets("Активация").Hyperlinks.Add Anchor:=Cells(i, 3), Address:=ssilka & Cells(i, 4), TextToDisplay:="Ссылка"  
Next i  
 
application.screenupdating=true ' включаем обратно  
End Sub  
 
 
 
PS: Файл надо смотреть. Секунда на ссылку - это очень много.  
Есть формулы на этом или других листах?
 
Можно сразу во все ячейки прописать ссылки, но для этого нужно использовать формулу =ГИПЕРССЫЛКА()  
 
(эту формулу можно как вручную протянуть на нужное количество строк, так и макросом вставить сразу в тысячи ячеек одной строкой кода)
 
{quote}{login=EducatedFool}{date=27.07.2011 02:25}{thema=}{post}Sub Ссылки()  
 
application.screenupdating=false ' отключаем обновление экрана  
 
' Создаю переменную и присваиваю ей статическую часть ссылки  
Dim ssilka As String  
ssilka = Sheets("Data").Range("A10").Value  
 
Dim i As Integer  
Dim iLastRow As Integer  
' узнаю номер последней непустой строки, и присваиваю цифру переменной  
iLastRow = Cells(Rows.Count, 4).End(xlUp).Row  
' запускаю цикл и формирую ссылки в столбце "С"  
For i = 11 To iLastRow  
Sheets("Активация").Hyperlinks.Add Anchor:=Cells(i, 3), Address:=ssilka & Cells(i, 4), TextToDisplay:="Ссылка"  
Next i  
 
application.screenupdating=true ' включаем обратно  
End Sub  
 
 
 
PS: Файл надо смотреть. Секунда на ссылку - это очень много.  
Есть формулы на этом или других листах?{/post}{/quote}  
 
да, формулы есть, сам файл достаточно громоздкий.  
Добавил отключение обновления экрана, немного увеличилась скорость.
 
Не могу добавить файл для примера...  
Скажите, а как одной строкой протянуть на весь диапазон ячеек формулу ГИПЕРССЫЛКА(), будет ли она изменяться динамически?  
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
 
ImRo, я понимаю, что вопрос очень важный, но найдите пару минут на прочтение Правил.
 
Извиняюсь, нарушил :)  
Файл действительно большой, но если его уменьшить, трудно продемонстрировать проблему.  
Замечания приняты во внимание.
Страницы: 1
Читают тему
Наверх