Excel 宏超链接.添加错误

Excel 宏超链接.添加错误

我对 Excel 中的 VBA 代码还比较陌生,所以如果答案很简单(我希望通常都是这样),请原谅我。我使用的是 Excel 2010,仅供参考。我试图使用以下脚本完成以下任务:

如果在 D 列中的任何单元格中输入了数字字符串(任何值),我需要将其自动转换为超链接,该超链接会在目标单元格的值之前附加某个地址字符串,并输出包含该单元格值的友好名称。

换句话说,这是我尝试使用宏复制的示例 Excel 函数:

=HYPERLINK("http://stprs553/tickets/list/single_ticket/293136","Ticket #293136")

或者,更具体地说(应该描绘得更清晰):

=HYPERLINK(CONCATENATE("http://stprs553/tickets/list/single_ticket/","Target_Cell_Data"),"Ticket #Target_Cell_Data")

293136是我希望用户能够在 D 列中的任何单元格中输入的示例数字字符串。当他们这样做时,我希望将此单元格转换为超链接,使用数字字符串作为基础数据,将 URL 的其余部分附加到单元格值的左侧,然后创建一个友好名称,将“Ticket #”与单元格值中的数字字符串连接起来。我不希望我的用户必须学习 Excel 公式才能获得参考链接,或者浪费时间复制函数的两端以环绕单元格数据。

以下是我目前在 VBA 中得到的内容:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rangeLimit As Range
Set rangeLimit = Range("D:D")
If Not Intersect(rangeLimit, Target) Is Nothing Then
    If Target <> "" Then
         Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & c.Value, TextToDisplay:="Ticket #" & c.Value, Target.Value
    End If
End If
End Sub

以下是我遇到的问题:

1.) 如果我尝试按原样运行公式,则会收到编译错误。2.) 如果我删除, Target.Value超链接字符串的末尾,则会收到错误 424,“需要对象”错误。

我做错了什么,以及/或者我如何创建宏来执行所需的功能?经过整整一个小时的 Google 搜索和浏览一些 StackOverflow 帖子,我找到了现在的方法,但仍然不起作用。

答案1

我认为函数调用应该是:

Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & Target.Value, TextToDisplay:="Ticket #" & Target.Value

c我刚刚将 的两个出现都改为Target,我认为这样可以实现您所描述的效果。抛出“需要对象”错误是因为c尚未实例化为任何东西——您无法检索非对象成员。

编辑,解决单元格文本不变的问题:

我想知道单元格文本是否只保留数字。我认为修复方法将如下所示:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rangeLimit As Range
    Set rangeLimit = Range("D:D")
    If Not Intersect(rangeLimit, Target) Is Nothing Then
        If IsNumeric(Target) And Not IsEmpty(Target) Then ' This condition should avoid munging of already-existing links, though if any tickets might be non-numeric it won't work properly.
             Application.EnableEvents = False  ' Must turn off event handling
             Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & Target.Value, TextToDisplay:="Ticket #" & Target.Value
             Target.Formula = "Ticket #" & Target.Value ' Should actually change the displayed text
             Application.EnableEvents = True
        End If
    End If
End Sub

每当使用 VBA 编辑此类事件中的单元格内容时,关闭事件处理非常重要,否则您将面临无限循环的风险。我最初应该想到这一点;但是,似乎将超链接应用于单元格不会触发Worksheet_Change

请注意,如果您从单元格中删除超链接,单元格的格式仍为“带下划线”和“蓝色字体颜色”。对于您的用例,列将始终是指向票证的链接或空白单元格,这可能是可以接受的?

相关内容