【问题标题】:Excel-VBA: creating dynamic hyperlinks to googleExcel-VBA:创建到谷歌的动态超链接
【发布时间】:2016-08-19 23:05:46
【问题描述】:

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

编辑:下面的代码有效。问题出在 if 语句中 - isEmpty 不适用于字符串值,但 vbNullString 解决了问题。

上一期L 打印的链接指向一般的谷歌主页,没有搜索词。我相信链接导致一般谷歌页面的原因是因为实际的单元格值(用作搜索词)没有被正确读取。代码行 "If Not IsEmpty(cellSupplierListed) Then" 始终运行,即使单元格中没有供应商名称。我不知道为什么。 另外:假设列出了 5 个供应商,并且代码读取超过 300 行(在上面的代码中硬编码),那么仍然打印出 300 个链接,而应该只打印出 5 个。 (因为 300 行中只有 5 行有值)。这 5 个供应商由以前的代码在同一个 sub 中打印出来,并且确实显示在 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

【问题讨论】:

    标签: vba excel


    【解决方案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"
    

    【讨论】:

    • 我有 Office 2010(添加到问题中),所以我不相信这行得通。我尝试将我的代码从 Hyperlink("google.com/search?q=" & cellSupplierListed, "Link") 更改为 Hyperlinks.Add("google.com/search?q=" & cellSupplierListed, "Link") 现在该句子被突出显示,错误为“需要对象"。
    • 试试这个(在 Office 2007 中测试,但应该在 2010 中工作): Range("b5").Hyperlinks.Add Range("B5"), "google.com"
    • 我不完全确定在哪里添加这个。另外A5指的是什么?我想在 google 中搜索的供应商名称列在 F 列中
    • 感谢您的澄清。它有点工作 - 它现在在我的供应商列表旁边打印出链接(列表在 F 列中。所以我将代码中的 F 更改为 G,因为我希望将链接打印在 F 中的供应商列表旁边) - 但是当我点击一个链接,它只是打开谷歌,而不是搜索供应商名称的谷歌。
    • 你的链接看起来像"http://www.google,com/search?q=" & cellSupplierListed吗?
    【解决方案2】:

    您可以复制这些值并将它们粘贴回 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"
    

    【讨论】:

    • 感谢您的回复 - 我应该把这段代码放在哪里?上面生成超链接的代码?
    • @Jolien .A 您可以注释掉生成超链接的代码并将我的代码放在它下面。
    • 代码不起作用 - 它没有创建超链接。它还复制了整个布局(例如,用户输入按钮,之前在 D 和 E 列中打印输出)并将其粘贴在彼此的顶部,从而弄乱了布局。
    猜你喜欢
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多