VBA 圖形圖片處理


學習資源:《Excel VBA從入門到進階》第44集 by蘭色幻想


本節來學習如何處理VBA圖片與圖形處理,用到的是VBA的shape對象。

Shape 對象,該對象代表工作表或圖形工作表上的所有圖形,它是sheets和chart的子對象(屬性)。下表列出shape部分常用屬性。

    獲取單元格sheet.shape.topleftcell.address

使用示例:獲取shape的l類型。

Dim ms As Shape
Cells(k, 1) = ms.Type
Shape.Type的部分值

關於shape對象的添加、編輯、變換位置等操作,在這邊就略過了。因為這部分內容太多,使用起來也復雜,需要用到時就使用錄制宏來獲取代碼吧。

 

下面學三段常用的代碼:

1. 圖片批量導入

例題:在B例批量導入A列名稱的對應圖片。

要導入的圖片

思路:插入圖形,在圖形上填充圖片。

因為部分圖片分辨率過大,直接插入,可能會導致文件很大。在圖形上插入,可以控制圖片的大小,和壓縮圖片。

提示:關於如何插入圖形,可以錄制一個插入圖形並填充圖片的宏,獲得代碼后再套上循環改寫。

Sub 圖片導入()

Dim S As Shape
Dim RG As Range

'刪除已有圖片
For Each S In ActiveSheet.Shapes
    If S.Type <> 8 Then            '有插入一個窗體控件指定宏
        S.Delete                   '把不是窗體控件的shape(圖片、圖形等)清除
    End If
Next S

'導入圖形
For Each RG In Range("B2:B5")
    '插入矩形msoShapeRectangle,它的左邊距、頂點、寬度、高度都引用RG單元格的
    ActiveSheet.Shapes.AddShape(msoShapeRectangle, RG.Left, RG.Top, RG.Width, RG.Height).Select
    'RG單元格左邊單元格填寫了圖片名稱,填充對應圖片到矩形里。
    Selection.ShapeRange.Fill.UserPicture "C:\" & RG.Offset(0, -1) & ".jpg"
Next RG

End Sub

運行示例(逐步展示導入圖片,實際用時其實是一秒多):

 

2. 批量插入復選框

例題:在B例批量導入復選框。

提示:先錄制一個插入復選框的宏,獲得代碼后再套上循環改寫。

Sub 批量插入復選框()

Dim RG As Range
Dim S As Shape

'刪除已有復選框
For Each S In ActiveSheet.Shapes
    If InStr(S.Name, "Ch") > 0 Then      '復選框的名稱是Check box
        S.Delete
    End If
Next S

'批量插入復選框
For Each RG In Range("B2:B15")
   '插入復選框CheckBoxes,它的左邊距、頂點、寬度、高度都引用RG單元格的
    ActiveSheet.CheckBoxes.Add(RG.Left, RG.Top, RG.Width, RG.Height).Select
    
   '復選框的文本為“是”,值為空,鏈接的單元格是RG的位置
    With Selection
        .Characters.Text = "是"
        .Value = xlOff
        .LinkedCell = RG.Address
    End With
    
   '把RG單元格的字體顏色變成白色,否則打勾會顯示True和False
    RG.Font.ThemeColor = xlThemeColorDark1

Next RG

End Sub

運行示例(逐步批量插入復選框,實際用時不過1秒多):

 

3. 連線

例題:把相同內容的單元格連線起來。

Sub 連線()

Dim rg1 As Range, rg2 As Range, rg3 As Range, rg4 As Range
Dim S As Shape
Dim RG As Range

'刪除已有線條
For Each S In ActiveSheet.Shapes
    If S.Type = 9 Then
        S.Delete
    End If
Next S

'連線
Set rg1 = Range("B1")
Set rg2 = Range("B2")
Set rg3 = Range("C2")
Set rg4 = Range("C1")

'控制起點和終點,起點為B列單元格的左邊線中點,終點為C列單元格的左邊線中點
'沒有右邊線的說法,所以不能把起點設為A列單元格的右邊線中點
ActiveSheet.Shapes.AddLine(rg1.Left, rg1.Top + rg1.Height / 2, rg3.Left, rg3.Top + rg3.Height / 2).Select
Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle
ActiveSheet.Shapes.AddLine(rg2.Left, rg2.Top + rg2.Height / 2, rg4.Left, rg4.Top + rg4.Height / 2).Select
Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle

End Sub

運行示例(逐步進行連線,實際用時不超1秒):

 


小結

這些例題都比較簡單,尤其第三道,只是想把幾個可能常用到的實例介紹出來,要想把它們化為己用的話肯定要改寫一下,如果需要用到沒講的功能就使用錄制宏來獲取代碼吧,不細講了~

這幾天有看視頻的,就是不知道該怎么做筆記了,因為有些內容也沒聽太明白,后面可能還會慢更(捂臉……讓我想想該怎么做之后的筆記會比較好……

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM