Excel VBA用于在单元格中呈现超链接

时间:2016-03-07 22:20:16

标签: excel excel-vba hyperlink vba

我想在VBA for Excel中编写我自己的宏/函数,它引入了一个新的"公式"在Excel中JIRA(ISSUE_ID),以便我可以使用

=JIRA("ISSUE_ID")
单元格中的

,它呈现以下链接(伪Markdown语法)

[ISSUE_ID](http://my.jira.com/browse/ISSUE_ID)

在同一个单元格中,其中[ISSUE_ID]是要在单元格中显示的链接文字,(http://my.jira.com/tracker/ISSUE)是该链接的网址。

这是一个希望澄清我的需求的例子:

我使用"公式" =JIRA("ABC-1234")以及我的VBA函数应该做的是将超链接渲染到包含此公式的同一个单元格中,该公式显示 ABC-1234 作为单元格的内容,该单元格是{的超链接{1}}。

在VBA伪代码中,我的函数写得像这样:

http://my.jira.com/browse/ABC-1234

我可以用Function JIRA(issue_id) current_cell = cell_in_which_this_function_is_used_as_formula() url = "http://my.jira.com/browse/" + issue_id current_cell.content = issue_id 'text to be shown in the cell current_cell.hyperlink = url 'hyperlink to be used for the cell End Function 获得相同的结果,但我不想每次都写这个冗长的函数。我也不想使用2列来实现这一目标(例如=HYPERLINK("http://my.jira.com/browse/ISSUE", "ISSUE"))。

3 个答案:

答案 0 :(得分:1)

我不确定这是可能的。您只需在工作表更改事件中编写一个子例程,只要在包含TRACKER和ISSUE的列中更新单元格,就会自动将=HYPERLINK("http://my.jira.com/TRACKER/ISSUE", "ISSUE")添加到您需要的位置。您可以简单地从输入到单元格中的文本构建公式。

或者,你可以这样做:

=Hyperlink("http://my.jira.com/" & A1 & "/" & B1,B1)

假设您的Tracker列位于A列,而您的Issue列位于B列中。拖放公式并自行调整。

答案 1 :(得分:1)

实际上,有一种方法。在ThisWorkbook中:

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    On Error Resume Next

    If Target.Cells.Count = 1 Then
        Dim cell As Range
        Set cell = Target.Cells(1, 1)
        If LCase(Left(cell.formula, 5)) = "=jira" Then
            If cell.Hyperlinks.Count > 0 Then
                cell.Hyperlinks.Delete
            End If
            Dim issue As String
            issue = Evaluate(cell.formula)
            cell.Hyperlinks.Add cell, _
                                "http://my.jira.com/browse/" & issue, _
                                issue, _
                                "Click to view issue " & issue
        End If
    End If

End Sub

并在模块中

Public Function Jira(id As String)
    Jira = id
End Function

JIRA in action

答案 2 :(得分:0)

在这里,您可以将值Issue001(或任何问题)放在单元格中并运行此代码

Sub setTheHyperLink()
    Dim lastPart
    Dim theScreenTip
    Dim i
    Dim rngList As Range
    Dim theLink

    Set rngList = Selection 'set the range where you have the "Issue"

For Each i In rngList
    lastPart = i.Value
    theScreenTip = lastPart
    theLink = "http://my.jira.com/TRACKER/" & theScreenTip

    If i.Hyperlinks.Count > 0 Then
        i.Hyperlinks(1).Address = theLink
        i.Hyperlinks(1).ScreenTip = theScreenTip
        i.Hyperlinks(1).TextToDisplay = theScreenTip
    Else
        i.Hyperlinks.Add _
        Anchor:=i, _
        Address:=theLink, _
        ScreenTip:=theScreenTip, _
        TextToDisplay:=theScreenTip
    End If
Next i

定义了该单元格后,您不需要使用UDF。