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
Excel VBA操作Shapes加超連結與位置紀錄
YouTube video

總結心得

透過簡單的VBA迴圈,就能一次掌握所有Shapes的位置並加入互動功能。只要留意清空資料與超連結覆蓋的細節,就能把Excel從單純報表,延伸成具備引導性的操作介面。


贊贊小屋VBA教學中心:

Excel巨集執行Excel巨集程式Excel巨集程式碼Excel VBA教學VBA教學VBA基本應用VBA UserFormVBA VLOOKUP

VBA課程推薦:零基礎入門進階的20小時完整內容

VBA課程:20小時完整入門進階,職場及投資應用