公告
本專欄的相關(guān)的文章已不在簡(jiǎn)書同步更新逾柿,請(qǐng)直接訪問 VBA探秘 官方網(wǎng)站或關(guān)注微信公眾號(hào)獲取最新文章動(dòng)態(tài)缀棍。
coreldraw-vba-traverse-shapes
目的
本文介紹CorelDRAW VBA代碼遍歷文檔、頁面或圖層中所有對(duì)象的相關(guān)操作代碼机错,有時(shí)候程序可能需要查找頁面上的對(duì)象爬范,用遍歷的方式可實(shí)現(xiàn)批量查找、檢索對(duì)象弱匪。
準(zhǔn)備文檔
創(chuàng)建1個(gè)新文檔青瀑,添加兩個(gè)頁面,在第一個(gè)頁面中添加1個(gè)文本,并導(dǎo)入一張圖像斥难;在第二個(gè)頁面中添加一個(gè)文本枝嘶。如下圖所示:
頁面1
頁面2
代碼演示
下面的代碼采用3重循環(huán)演示了遍歷當(dāng)前文檔中所有頁面、所有圖層哑诊、所有圖形對(duì)象的方法群扶。
注:如果要遍歷所有文檔,則需要在最外層增加1層循環(huán)镀裤,用來遍歷所有文檔竞阐,此處不做演示,有疑問請(qǐng)留言淹禾。
Sub main()
' 定義循環(huán)變量
Dim i As Integer, j As Integer, k As Integer
Dim allPages As Pages, allShapes As shapes, allLayers As Layers
' 定義臨時(shí)變量
Dim tempPage As Page, tempLayer As Layer, tempShape As Shape
Dim msg As String
' 遍歷文檔中的所有頁面
Set allPages = ActiveDocument.Pages
For i = 1 To allPages.Count
Set tempPage = allPages.Item(i)
' 遍歷頁面中的所有圖層
Set allLayers = tempPage.Layers
For j = 1 To allLayers.Count
Set tempLayer = allLayers.Item(j)
' 遍歷圖層中的所有形狀(對(duì)象)
Set allShapes = tempLayer.shapes
For k = 1 To allShapes.Count
' 得到這個(gè)形狀
Set tempShape = allShapes.Item(k)
' 根據(jù)形狀的類型馁菜,輸出不同的信息
msg = "在頁面" & i & "的圖層" & j & "中,找到了一個(gè):"
' 如果是文本形狀
If tempShape.Type = cdrTextShape Then
msg = msg & "文本"
End If
' 如果是位圖形狀
If tempShape.Type = cdrBitmapShape Then
msg = msg & "位圖"
End If
' 打印調(diào)試消息到本地調(diào)試窗口
Debug.Print msg
Next k
Next j
Next i
MsgBox "遍歷文檔完成铃岔!請(qǐng)查看調(diào)試窗口"
End Sub
結(jié)果輸出
在頁面1的圖層2中汪疮,找到了一個(gè):位圖
在頁面1的圖層2中,找到了一個(gè):文本
在頁面2的圖層2中毁习,找到了一個(gè):文本
小結(jié)
在文檔遍歷中通常會(huì)用到對(duì)象的集合形式智嚷,例如 Shape
對(duì)象的集合形式是 Shapes
,Page
對(duì)象的集合形式是 Pages
纺且,Layer
對(duì)象的集合形式是 Layers
盏道,在定義集合變量的時(shí)候,可以直接這樣定義载碌。
原創(chuàng)聲明:本文首發(fā)于個(gè)人CorelDRAW VBA博客猜嘱,請(qǐng)尊重文章版權(quán)。
轉(zhuǎn)載請(qǐng)注明原文鏈接:http://www.cdrvba.com/coreldraw-vba-traverse-shapes/