2014-09-04 5 views
3

У меня есть вопрос VBA для создания гиперссылок для диапазона ячеек.Эффективный способ создания тысяч гиперссылок с помощью Excel VBA

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

Во всех следующих случаях предполагается, что все ячейки заполнены числовыми идентификаторами.

настоящее время я использую код очень похож на следующий (упрощено для данного примера):

Dim r As Range, c As Range 
Set r = Range("C1:C60000") 
For Each c In r 
    ActiveSheet.Hyperlinks.add anchor:=c, address:="http://www.url.com?address=" & c.value 
Next c 

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

Dim r as Range 
set r = Range("A1:A60000") 
r.Hyperlinks.add anchor:=r, address:="http://www.url.com" 

Мой вопрос, когда URL-адреса отличаются, в частности, если они включают данные из ячейки там есть способ, который является более эффективным, чем то, что я сейчас делаю.

Любая помощь или понимание будут оценены. Спасибо,

Пример данных (в формате CSV и в качестве экрана таблицы Excel), мне нужно, чтобы иметь возможность добавлять гиперссылки на весь столбец кулак в формате «http://www.urltest.com/sample?id=[ID]», где [ID] является значением из ячейки.

  • номер, правопреемник, Название
  • 383087, Me, Устранить эту проблему
  • 403749, Вы, Проблема с компилятором
  • 403856, Вы, проблема с монитором
  • 440912, я, три вещи, чтобы исправить первый
  • 458523, другой человек, «Ты, я, и эта проблема»
  • 476182, Вы, звезда в небе
  • 485834, Вы, Три маленьких медведей
  • 499569, Вы, моя клавиатура не работает
  • 500552, Me, My мышь не работает
  • 516824, меня, я не могу войти
  • 523654, другой человек, слишком много компьютерных кабелей
  • 536632, Чужая, у меня есть проблема с PHP
  • 556012, Me, у меня есть проблема с VBA
  • 561275, вы, у меня есть две проблемы с C++
  • 569014, Me, My Perl script не работает
  • 572658, Вы, JavaScript дает мне головную боль
  • 667911, Me, My наушники отключены
  • 704432, Me, мне нужно обновить программное обеспечение
  • 721637, Me, Мой ноутбук слишком медленно
  • 735784, Me, Ваш сервер отклоняет мое соединение
  • 765477, Me, я не знаю, что порт для подключения к
  • 778808, Me, Существует что-то не так с моей XML
  • 788865 , Me, The pow эр к компьютеру продолжает fluctating
  • 791957, Me, Моя сила бар необходимо заменить
  • 793507, Me, Это необходимо, прежде чем выпустить продукт
  • 794067, Me, Там два продукта не работают хорошо вместе
  • 798445, Me, эти вещи требуют времени

Example Table

ответ

4

быстрый способ, которым я могу думать использует HYPERLINK функции и присвоить значения для всех ячеек в одном дыхании:) Это также будет ENSURE, что вы будете NOT должны быть в петле.

Синтаксис гиперссылке

HYPERLINK (link_location, [friendly_name])

Читайте об этом в справке Excel или Google его.

Адрес ADDRESS(ROW(),COLUMN())) дает адрес текущей ячейки.

Попробуйте

Sub test_simple_diffurl() 
    Dim r As Range 

    Set r = Range("C1:C60000") 

    r.Formula = "=HYPERLINK(""http://www.url.com?address="" & ADDRESS(ROW(),COLUMN()),""Test with "" & ADDRESS(ROW(),COLUMN()))" 
End Sub 
+0

Я никогда не видел формулу добавляемые таким образом, спасибо - очень быстро. Мой пример был несколько общим - фактическое приложение находится в столбце таблицы значений идентификатора, где каждое значение ID должно иметь ссылку на веб-сайт, который просматривает соответствующий отчет. С помощью этого метода я предполагаю, что мне нужно сохранить значения в отдельном (скрытом столбце), чтобы использовать их в формуле. – Brian

+0

'Мой пример был несколько общим. Первое и очень важное правило в Stackoverflow: ни в коем случае не тратьте свое время ... Включая ваши :) Теперь, пожалуйста, внесите изменения в свой вопрос и задайте реалистичный вопрос ... –

+0

Пересмотренный вариант, спасибо за ввод. – Brian

Смежные вопросы