我有一系列包含以下形式数据的单元格:
“AAA; BBB; CCC”
理想情况下,我必须为AAA,BBB和CCC中的每一个创建单独的超链接。由于Excel允许每个单元格只有一个超链接,我想我可以拆分单元格文本,并在单击虚拟超链接时使用“ShellExecute”打开三个网页。
我在单元格中创建了一个“www.google.com”的超链接,并在“FollowHyperlink”事件处理程序中编写了以下代码:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Dim strArray() As String
Dim strSamp As String
strArray() = Split(ActiveCell.Text, ";")
For i = LBound(strArray) To UBound(strArray)
strSamp = "www." + strArray(i) + ".com"
lSuccess = ShellExecute(0, "Open", strSamp)
MsgBox (strSamp)
Next i
End Sub
每次点击该单元格,浏览器都会打开Google,并且不显示消息框。
我无法弄清楚我的逻辑在哪里出错了。我很感激任何你能给我的见解。
修改
我在新工作表中重写了代码,代码正常运行。消息框现在正在显示,并且各个超链接在浏览器中打开。但除了个别链接之外,虚拟链接(在本例中为Google)也是开放的。如何阻止它打开?
答案 0 :(得分:1)
我使用Worksheet_BeforeDoubleClick
事件进行这类操作。
假设文本在Cell A1中。试试这个。
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpszOp As String, _
ByVal lpszFile As String, ByVal lpszParams As String, _
ByVal LpszDir As String, ByVal FsShowCmd As Long) As Long
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim strArray() As String, strSamp As String
Dim i As Long
If Not Intersect(Target, Range("A1")) Is Nothing Then
strArray = Split(Target.Value, ";")
For i = LBound(strArray) To UBound(strArray)
strSamp = "www." + strArray(i) + ".com"
ShellExecute 0, "Open", strSamp, "", "", SW_SHOWNORMAL
DoEvents
Next i
Cancel = True
End If
End Sub
修改强>
糟糕,我忘了提到您需要双击单元格A1
才能运行此代码:p
注意:如果您仍想使用Worksheet_FollowHyperlink()
方法,请将单元格超链接到自身而不是网站。这不会启动网站并显示您的消息框。