我想在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")
)。
答案 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
答案 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。