2016-03-07 4 views
1

Я хотел бы написать свой собственный макрос/функцию в VBA для Excel, которая вводит новую «формулу» JIRA(ISSUE_ID) в Excel, так что я могу использоватьExcel VBA для визуализации гиперссылки в ячейке

=JIRA("ISSUE_ID")

в клеток, и это делает ссылку (псевдо уценки синтаксис)

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

в той же самой клетке, где [ISSUE_ID] это текст ссылки, которые будут показаны в ячейке и (http://my.jira.com/tracker/ISSUE) является URL-адрес для ссылки.

Вот пример, который мы надеемся, проясняет мои потребности:

Я использую «формулу» =JIRA("ABC-1234") и то, что моя функция VBA должна делать, оказывает гиперссылку в той же клетке, которая держит эту формулу, которая показывает ABC -1234 как содержимое ячейки, которая является гиперссылкой на http://my.jira.com/browse/ABC-1234.

В VBA псевдокоде моя функция пишет так:

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 

я могу достичь того же результата с =HYPERLINK("http://my.jira.com/browse/ISSUE", "ISSUE"), но я не хочу писать эту длинномерных функцию каждый раз. Я также не хочу использовать 2 столбца для достижения этого (например, =Hyperlink("http://my.jira.com/" & B1,B1)).

+1

Возможный дубликат [Добавить гиперссылку в VBA UDF] (http://stackoverflow.com/questions/27585398/add-hyperlink-in-vba-udf) – nbayly

+0

Не могли бы вы более четко рассказать о том, что вам нужно и что нужно. Потому что я понимаю, что вам нужна функция, которая будет делать точно так же, как 'HYPERLINK', и отправлять те же параметры ... Пожалуйста, укрепите свой вопрос. –

+0

@ElbertVillarreal - спасибо за ваш комментарий! Я попытался упростить и уточнить мой вопрос. Может быть, теперь ясно, что я хочу делать. –

ответ

1

Я не уверен, что это возможно. Вы можете просто написать подпрограмму для события изменения рабочего листа, чтобы автоматически добавить =HYPERLINK("http://my.jira.com/TRACKER/ISSUE", "ISSUE"), где это необходимо, всякий раз, когда ячейки обновляются в столбцах, содержащих TRACKER и ISSUE. Вы могли бы просто построить формулу текста, введенного в ячейки.

Или вы могли бы сделать это:

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

Предполагая, что ваша колонка Tracker находится в колонке А и в столбце Номер находится в столбце B. Перетащите формулу, и она будет самостоятельно регулировать.

+0

Я уточнил свой вопрос, и я надеюсь, что теперь понятно, почему я не буду принимать это как решение. –

+0

Затем вам нужно будет создать эту функциональность в событии изменения рабочего листа. Есть временные решения для того, что вы хотите, но нет простого способа сделать то, что вы хотите сделать, не проходя через событие изменения рабочего листа. У других есть код для этого, поэтому я не буду. – asp8811

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

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 с это.

Смежные вопросы