2016-08-16 6 views
1

У меня есть лист Excel [Microsoft Office 2010], где пользователь может выбрать определенный товар & категории, после чего список поставщиков, связанных с этим товаром & Категория напечатана на листе , Теперь я хочу распечатать гиперссылки рядом с этим списком поставщиков, которые выполняют поиск Google, используя поставщика в качестве поискового запроса. Это код, который я получил прямо сейчас: он проверяет, являются ли ячейки в столбце 6 пустыми или нет, если это не означает, что в ячейке печатается имя поставщика. Затем я хочу, чтобы гиперссылка была напечатана в соседнем столбце, который ссылается на поиск Google, используя имя пользователя в качестве условия поиска.Excel-VBA: создание динамических гиперссылок для google

EDIT: код ниже работает. Проблема была в выражении if - isEmpty не работал для строкового значения, но vbNullString исправил проблему.

Предыдущая проблемаL Отпечатанные ссылки приводят к общей главной странице google без каких-либо условий поиска. Я считаю, что причина, по которой ссылки приводят к общим страницам Google, связана с тем, что фактические значения ячеек (которые используются как поисковый запрос) не читаются должным образом. Строка кода «Если Not IsEmpty (cellSupplierListed), тогда« всегда запускается, даже если в ячейках нет имени пользователя. Я не уверен, почему. Кроме того: предположим, что перечислено 5 поставщиков, и код читает более 300 строк (жесткий код в коде выше), затем еще 300 ссылок распечатываются, а только 5 должны быть распечатаны. (так как только 5 из 300 строк имеют значения). Эти 5 поставщиков печатаются по предыдущему коду в одном и том же подразделении и действительно отображаются на листе excel. Похоже, что приведенный ниже код не читает чистые ячейки как пустые ячейки или непустые ячейки как непустые ячейки.

Dim cellSupplierListed As String 
Dim csl As Integer 
Dim h As Integer 


h = 0 

For csl = 1 To 300 'needs to be updated if more than 300 suppliers are listed 

cellSupplierListed = Cells(9 + csl, 4).Value 

If cellSupplierListed = vbNullString Then 

    Exit For 

Else 

    h = h + 1 
    Range("G" & (9 + h)).Hyperlinks.Add Range("G" & (9 + h)), "http://www.google.com/search?q=" & cellSupplierListed, , , "Link" 

End If 

Next csl 

ответ

1

От https://msdn.microsoft.com/en-us/library/office/ff822490.aspx

Для Office 2013 и более поздних версий, вы можете использовать метод Hyperlinks.Add

.Add(Anchor, Address, SubAddress, ScreenTip, TextToDisplay) 

Пример (из приведенного выше связанной документации):

With Worksheets(1) 
    .Hyperlinks.Add Anchor:=.Range("a5"), _ 
    Address:="http://example.microsoft.com", _ 
    ScreenTip:="Microsoft Web Site", _ 
    TextToDisplay:="Microsoft" 
End With 

В Office 2007 было протестировано следующее:

Range("a5").Hyperlinks.Add Range("a5"), "http://www.google.com" 

Для фактического вопроса в ФП в: Изменить следующую строку

Cells(7, 9 + h) = Hyperlink("http://www.google.com/search?q=" & cellSupplierListed, "Link") 

в

Range("F"&(9+h)).Hyperlinks.Add Range("F"&(9+h)), "http://www.google.com/search?q=" & cellSupplierListed,,,"Link" 
+0

У меня Office 2010 (добавлено, что на вопрос), поэтому я не считаю, что это работает. Я попытался изменить свой код с Гиперссылка («http://www.google.com/search?q=» & cellSupplierListed, «Ссылка») на Hyperlinks.Add («http://www.google. com/search? q = "& cellSupplierListed," Link ") И теперь это предложение подсвечивается с ошибкой« Требуется объект ». –

+0

Попробуйте это (протестировано в Office 2007, но должно работать в 2010 году): Range («b5»). Hyperlinks.Add Range («B5»), «http://www.google.com» –

+0

Я не полностью обязательно, где добавить это. Также к чему относится A5?Имена поставщиков, которые я хочу найти в google for, перечислены в столбце F –

0

Вы можете скопировать значения и вставить их обратно в HTML:

[f:f].Copy 
Set o = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") ' New MSForms.DataObject 
o.GetFromClipboard: s = o.GetText 
Application.CutCopyMode = False 

before = "<a href='http://www.google.com/search?q=": after = "'>Link</a><br>" 
s = Replace(s, vbNewLine, after & vbNewLine & before) 
s = "<html>" & before & s & after 
s = Replace(s, before & after, "<br>") ' replace the blank values 

o.SetText s: o.PutInClipboard 
[g1].PasteSpecial "Text" 
+0

Спасибо за ваш ответ - где я должен помещать этот код? Выше кода, который генерирует гиперссылки? –

+0

@Jolien. Вы можете прокомментировать свой код, который генерирует гиперссылки и помещает мой под ним. – Slai

+0

Код не работал - он не создавал гиперссылки. Он также скопировал весь макет (например, кнопки ввода пользователя, ранее напечатанные выходные данные в столбцах D и E) и вставил их поверх друг друга, испортив макет. –