Excel-VBA:创建谷歌的动态超链接

时间:2016-08-16 18:32:24

标签: vba excel-vba excel

我有一张excel表[Microsoft Office 2010],用户可以在其中选择某种商品&类别,之后是与该商品相关的供应商清单&类别打印在工作表上。我现在想打印出使用供应商作为搜索词执行谷歌搜索的供应商列表旁边的超链接。这是我现在得到的代码:它检查第6列中的单元格是否为空,如果不是,则表示在单元格中打印了供应商名称。然后,我希望在其旁边的列中打印一个超链接,该链接使用suppliername作为搜索词链接到谷歌搜索。

编辑:以下代码有效。问题出现在if语句中 - isEmpty不适用于字符串值,但vbNullString修复了该问题。

上一期L 打印的链接指向一般的Google主页,没有搜索字词。我相信链接导致一般谷歌页面的原因是因为实际单元格值(用作搜索词)无法正确读取。代码行" If Not IsEmpty(cellSupplierListed)然后" 总是运行,即使单元格中没有供应商名称..我不确定原因。 另外:假设有5个供应商列出,代码读取超过300行(上面的代码硬编码),然后打印出300个链接,而只打印出5个。 (因为300行中只有5行具有值)。这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

2 个答案:

答案 0 :(得分: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"

对于OP的实际问题: 更改以下行

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"

答案 1 :(得分: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"