【问题标题】:Excel hyperlink follow macro after worksheet_change event在 worksheet_change 事件之后 Excel 超链接跟随宏
【发布时间】:2015-10-04 12:07:07
【问题描述】:

我有一张 Excel 表格,当通过即插即用扫描仪扫描时,它会进行条码扫描(二维/QR 条码,格式类似于 SN1234567 7654321 PA01234-5 ABC),并将所述条码解析为右侧的单个单元格,空间为分隔符。现在,在此解析之后,我有一个单元格使用 excel 超链接函数、Hlink 宏(如下所示)和 vlookup 函数的组合来使用解析的信息在不同的工作表上查找超链接。现在,我正在尝试编写一个宏,以便一旦扫描此条码并触发、解析工作表更改并找到超链接,就会自动单击超链接。 (我正在使用这个系统来尝试“防止”操作员无法正确输入数字的过程。)无论如何,我的工作簿的屏幕截图和我目前使用的所有代码都将在下面,请你帮帮我解决这个问题?

上述电子表格的屏幕截图

工作表更改代码:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range, rng As Range

' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("A1:A10")

'Target can be a multi-cell range, so you need to account
'  for that possibility
Set rng = Application.Intersect(KeyCells, Target)

If Not rng Is Nothing Then
    'prevent re-activating this sub when splitting text...
    Application.EnableEvents = False
    textsplit Target
    Application.EnableEvents = True
End If

Exit Sub

haveError:
    Application.EnableEvents = True

End Sub

解析代码:

Sub textsplit(rng As Range)
Dim c As Range, arr

For Each c In rng.Cells
    If Len(c.Value) > 0 Then
        arr = Split(c.Value, " ")
        c.Offset(0, 1).Resize(1, UBound(arr) + 1).Value = arr
    End If
Next c

End Sub

Hlink 代码:

Function HLink(rng As Range) As String
'extract URL from hyperlink
'posted by Rick Rothstein
  If rng(1).Hyperlinks.Count Then HLink = rng.Hyperlinks(1).Address
End Function

在共享点链接单元格中使用此公式查找并提取不同页面上单元格的超链接。 =HYPERLINK(HLink(INDEX(Table_owssvr[Name],MATCH(Parse!C3&"_"&Parse!D3,Table_owss vr[Name],0))),INDEX(Table_owssvr[Name],MATCH(Parse!C3&"_"&Parse!D3,Table_owssvr[Name],0)))

编辑(为清楚起见):我发布的所有这些代码当前都在工作,我遇到的问题是自动(唯一的用户输入是将所述条形码扫描到 excel 中)按照 H 列中生成的超链接。

编辑 2:为了提供更多信息,我只是尝试添加此代码 ActiveWorkbook.FollowHyperlink 地址:=Range("H3").Address, NewWindow:=False, AddHistory:=True 在 textsplit 调用之后的工作表中更改子。此实现产生错误“运行时错误'-2147221014(800401ea)':无法打开指定的文件。”

我认为这个错误是由于 H3 的值是超链接函数的“友好名称”部分。这意味着当此宏尝试“单击”或跟随 H3 时,它遇到了值 4512517_PA06872-1 而不是跟随它所需的实际超链接。

【问题讨论】:

  • 你有什么问题?从您的问题中不清楚...
  • 我正在尝试编写一个宏,以便一旦扫描此条码并且触发、解析并找到超链接后,自动单击超链接。但我无法让这个宏为我工作。
  • 您看到了什么行为? worksheet_change 没有被触发吗?不知道如何点击超链接?得到错误?只是想弄清楚要回答什么问题。 :-)
  • 不,我发布的所有代码目前都在工作。当我扫描扫描单元格中的条形码时,它会自动对其进行解析,并且在解析右侧的 H 列中识别出超链接。但是,我的尝试是向 textsplit sub 或工作表更改事件添加代码(例如 Range("H3").Hyperlinks(1).Follow (True)),但均未成功,给我留下诸如“Run -error”9 之类的错误“下标超出范围”。非常感谢您的宝贵时间!
  • 酷。如果您编辑您的问题以包含您的确切问题(尝试访问超链接时出现错误)、生成错误的代码以及代码中错误的位置,这将很有帮助(并吸引更好的答案)尽可能密切地识别。

标签: vba excel hyperlink


【解决方案1】:

好的,只是您的 HLink 宏没有做正确的事情,最简单的方法是直接跟随超链接:

Sub HLink(rng As Range)
   If rng(1).Hyperlinks.Count Then rng.Hyperlinks(1).Follow
End Sub

这将自动打开您的默认浏览器以转到您的超链接的 URL/地址。

困难的方法是引用一个 IE 应用程序并打开您在其中找到的地址然后使用它,但如果它只是打开超链接,那么该代码就足够了!

【讨论】:

  • 我的错...实际上没有理由将其保留为函数,将其转换为像编辑中的常规子! ;)
  • 哇,效果非常好。你的圣人,非常感谢你!
  • 啊哈!一个圣人,也许不是,但我很高兴看到我提供帮助! ;) 享受,有一天在网站上见到你!
  • 我能想到的最简单的方法是声明一个 Public Boolean 并在 Workbook_Open 中将其设置为 False 并将其测试为 Worksheet_Change 到 Exit Sub if它设置为 False,并在 Workbook_Activate 中将其重置为 True。这可能就足够了。顺便说一句,当您使用 Objects 变量时,不要忘记在使用它们后释放它们:Set KeyCells = Nothing
  • stackoverflow.com/questions/2722146/… 和 globaliconnect.com/excel/… 应该可以帮助您度过难关! ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多