我對 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
to更改為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
.
請注意,如果從單元格中刪除超鏈接,則單元格的格式將保持為“帶下劃線”和“藍色字體顏色”。對於您的用例,該列始終是指向票證的連結或空白單元格,這可能是可以接受的嗎?