Excel VBA操作Shapes加超連結與位置紀錄
Excel中常會使用圖片、圖形或按鈕來輔助操作,本篇以一段VBA範例為主,示範如何批次取得所有Shapes的位置資訊,並替圖形加入超連結,適合製作互動式版型與教學頁面。
一、這段VBA程式的實際用途
這支巨集的核心概念,是一次處理目前工作表中的所有Shapes物件。透過迴圈逐一讀取圖形位置,並統一加入超連結,常用於教材示範、圖片選單或互動式Excel頁面。
Private Sub 參考程式()
Cells.Clear
For i = 1 To ActiveSheet.Shapes.Count
With ActiveSheet
Cells(i, 1) = .Shapes(i).Top
Cells(i, 2) = .Shapes(i).Left
.Hyperlinks.Add Anchor:=.Shapes(i), Address:= _
"https://zanzan.tw"
End With
Next
End Sub
這類程式通常不直接操作儲存格資料,而是以圖形本身作為操作對象,是許多Excel進階應用的起點。

二、清空工作表前需要注意的風險
原始範例中使用Cells.Clear,會直接清空整張工作表,包含資料、公式與格式。若只是記錄圖形位置,建議只清除特定欄位,避免誤刪原有內容。
Range("A:B").ClearContents
這個小調整,是實務上最重要的安全防線。
三、使用Shapes.Count逐一讀取圖形
ActiveSheet.Shapes.Count可以取得目前工作表中所有圖形的數量,搭配For迴圈即可逐一處理,不論是圖片、文字方塊或其他圖形都會包含在內。
Dim i As Long
For i = 1 To ActiveSheet.Shapes.Count
' 逐一處理每個 Shape
Next i
這種寫法非常適合需要大量處理圖形的情境。
四、取得圖形的Top與Left位置
每一個Shape都有Top與Left屬性,代表它在工作表中的實際位置。將這些數值寫入儲存格,可作為版面分析或後續調整的依據。
Cells(i, 1).Value = ActiveSheet.Shapes(i).Top
Cells(i, 2).Value = ActiveSheet.Shapes(i).Left
記錄位置的動作,通常是為了後續「重新排列」或「還原版面」。
五、在圖形本身加入超連結
Hyperlinks.Add的Anchor若指定為Shape物件,點擊圖形本身就能開啟連結,而不是依附在儲存格上,這是製作互動式Excel介面時非常實用的技巧。
ActiveSheet.Hyperlinks.Add _
Anchor:=ActiveSheet.Shapes(i), _
Address:="https://zanzan.tw"
這種做法常見於圖片選單或導覽型頁面。
六、避免覆蓋原有超連結
若圖形原本已經有超連結,直接新增會被覆蓋。實務上可先檢查Hyperlinks.Count,只在沒有連結時才新增,避免破壞既有設定。
If ActiveSheet.Shapes(i).Hyperlinks.Count = 0 Then
ActiveSheet.Hyperlinks.Add _
Anchor:=ActiveSheet.Shapes(i), _
Address:="https://zanzan.tw"
End If
這個判斷可以讓程式在重複執行時依然安全。
七、整合後的實務範例程式碼
將前面的概念整合後,實務上可使用以下版本,兼顧安全性與可讀性,適合直接作為實作基礎範例。
Private Sub 參考程式()
Dim i As Long
Range("A:B").ClearContents
For i = 1 To ActiveSheet.Shapes.Count
With ActiveSheet.Shapes(i)
Cells(i, 1).Value = .Top
Cells(i, 2).Value = .Left
If .Hyperlinks.Count = 0 Then
ActiveSheet.Hyperlinks.Add _
Anchor:=.Item(1), _
Address:="https://zanzan.tw"
End If
End With
Next i
End Sub

總結心得
透過簡單的VBA迴圈,就能一次掌握所有Shapes的位置並加入互動功能。只要留意清空資料與超連結覆蓋的細節,就能把Excel從單純報表,延伸成具備引導性的操作介面。
贊贊小屋VBA教學中心:
Excel巨集執行、Excel巨集程式、Excel巨集程式碼、Excel VBA教學、VBA教學、VBA基本應用、VBA UserForm、VBA VLOOKUP。
VBA課程推薦:零基礎入門進階的20小時完整內容


