2015-03-25 3 views
0

У меня возникли проблемы с получением значения или URL-адреса гиперссылки из внешнего источника.Получение гиперссылки из внешней базы данных

У меня есть клетка со следующей формулой:

=HYPERLINK([@[CHANGE_LINK]]) 

Он получает URL из внешнего источника данных и помещает его в клетку.

В моей VBA подразделам я иметь следующее:

Dim cellRow As Integer 
Dim URL As String 
Dim rng As Range 
Set rng = Sheets(changeSheet).Range("A1:A2000").SpecialCells(xlCellTypeVisible) 
cellRow = 4 
For Each Value1 In rng.SpecialCells(xlCellTypeVisible) 
    URL = Range(Value1.Address).Value '<----CANT GET URL! 
    MsgBox URL 
    Sheets(sheetname).Range("B" & cellRow & ":B" & cellRow).Value = "=HYPERLINK(" & URL & ",""View Change"")" 
    cellRow = cellRow + 1 
Next Value1 

Однако, мой вопрос. Как получить URL этой формулы в переменную VBA?

Я попытался несколько способов сделать это, и никто, кажется, чтобы получить URL:

Range("A1:A1").value 
Range("A1:A1").Address 
Range("A1:A1").Formula 
Range("A1:A1").Hyperlink(1) 
Range("A1:A1").Hyperlink(1).Item(1) 
Range("A1:A1").Hyperlinks 
Range("A1:A1").Hyperlink.address 
Range("A1:A1").Hyperlink.subaddress 

Update 27/03/2015

Я использую код последующие, который должен работать. Однако он не возвращает текст в виде строки. Это не кажется, что позволяет мне использовать его в сценарий ... Не знаю, почему ..

Dim row As Range 
Dim cellRow As Integer 
Dim URL As String 
Dim rng As Range 

Set rng = Sheets(changeSheet).Range("B19:B2000") 
cellRow = 4 
For Each row In rng.SpecialCells(xlCellTypeVisible) 
    URL = row.Text <--Application doesnt like the URL parsed into the statement below: 
    Sheets(sheetname).Range("B" & cellRow & ":B" & cellRow).Value = "=HYPERLINK(" & URL & ",""View Change"")" <---This is now the issue, ERROR 1004, Application or Object defined error.... 
    cellRow = cellRow + 1 
Next row 
+0

Вы пробовали 'Range (« A1 »). Hyperlinks.Item (1) .Address'? – Porcupine911

+0

Да, я пробовал это, сообщение об ошибке «Script out the range», все еще не вытягивая URL. – AlpaxJ1

+0

Я вижу ... Просто попробовал сам. Я попытался использовать окно locals, чтобы увидеть, что происходит, и показывает 0 элементов, даже если я помещаю гиперссылку в ячейку. Надеюсь, кто-то, у кого есть соответствующий опыт, может перезвонить. Извините, и удачи! – Porcupine911

ответ

0

Ваши ссылки составлены по формулам.
Вы можете получить их, используя Formula Property.
Теперь, если ваш URL's всегда в виде строки с qoutations, вы можете попробовать ниже

Dim r As Range, c As Range 
Set r = Sheets("SheetName").Range("A1:A2000").SpecialCell(xlCellTypeFormulas) 

For Each c In r 
    Msgbox Split(c.Formula, """")(1) 
Next 

Это вернет все свои URL's.
Однако, если он указывает на ячейку или внешнюю ссылку, вы можете попробовать Evaluate так:

Dim f As String, myurl As String 

For Each c In r 
    f = c.Formula 
    myurl = Evaluate(Split(Mid(f, InStr(f, "(") + 1), ")")(0)) 
    MsgBox myurl 
Next 

Это работает по формуле, как: =HYPERLINK($B$1) где $B$1 содержит фактический путь.
Он вернет фактический URL, сохраненный в ссылке на ячейку.
Я не могу проверить, будет ли он работать с вашим футляром, но вы можете попробовать.

Дополнительно:

Ваша формула опускает [friendly_name] аргумент, он должен отображать реальный путь на клетку.
Если это так, вы можете получить URL с .Value.
Хотя вы упомянули об этом в своем посте, вы уверены, что это не работает?

+0

Я благодарю за ваш вклад, как вы правильно говорите, я могу получить формулу ячейки i.e. "= HYPERLINK ([@ [CHANGE_LINK]]), однако по какой-то причине она не может быть оценена. Я получаю Error 2015 при этом: URL = Evaluate (Value1.Formula), URL-адрес msgbox. – AlpaxJ1

1

Так что я не думаю, что ваша основная проблема в том, что в вашей функции настройки линии, вы должны поместить URL в двойные кавычки , так что строка изменяется на:

Sheets(sheetname).Range("B" & cellRow & ":B" & cellRow).Function = "=HYPERLINK(""" & URL & """,""View Change"")" 

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

Относительно строки, которую вы отметили [URL = Range (Value1.Address) .Value] как не получающего URL. Нам нужно будет увидеть ваши исходные данные, если действительно эта строка также имеет проблему. Однако в моем простом отладке я добавил гиперссылки в ячейки исходных данных (а не строку URL-адреса), и ваша строка кода выше работала, просто удалив URL из гиперссылки в ячейке.

Включение «.SpecialCells (xlCellTypeVisible)» избыточно в операторе «Для каждого» кажется ненужным, поскольку оно уже является определителем в переменной «rng». Работает отлично для меня без него, и я действительно скрывал некоторые строки исходных данных в своем отладочном тесте, чтобы убедиться, что они пропущены.

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