CorelDRAW VBA - 遍历文档、页面、图层和形状对象

公告


本专栏的相关的文章已不在同步更新,请直接访问 VBA探秘 官方网站或关注微信公众号获取最新文章动态。

coreldraw-vba-traverse-shapes

目的

本文介绍CorelDRAW VBA代码遍历文档、页面或图层中所有对象的相关操作代码,有时候程序可能需要查找页面上的对象,用遍历的方式可实现批量查找、检索对象。

准备文档

创建1个新文档,添加两个页面,在第一个页面中添加1个文本,并导入一张图像;在第二个页面中添加一个文本。如下图所示:

页面1
页面2

代码演示

下面的代码采用3重循环演示了遍历当前文档中所有页面、所有图层、所有图形对象的方法。
注:如果要遍历所有文档,则需要在最外层增加1层循环,用来遍历所有文档,此处不做演示,有疑问请留言。

Sub main()
    ' 定义循环变量
    Dim i As Integer, j As Integer, k As Integer
    Dim allPages As Pages, allShapes As shapes, allLayers As Layers
    ' 定义临时变量
    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)

            ' 遍历图层中的所有形状(对象)
            Set allShapes = tempLayer.shapes
            For k = 1 To allShapes.Count
                ' 得到这个形状
                Set tempShape = allShapes.Item(k)
                ' 根据形状的类型,输出不同的信息
                msg = "在页面" & i & "的图层" & j & "中,找到了一个:"
                ' 如果是文本形状
                If tempShape.Type = cdrTextShape Then
                    msg = msg & "文本"
                End If
                ' 如果是位图形状
                If tempShape.Type = cdrBitmapShape Then
                    msg = msg & "位图"
                End If
                ' 打印调试消息到本地调试窗口
                Debug.Print msg
            Next k
        Next j
    Next i
    MsgBox "遍历文档完成!请查看调试窗口"
End Sub

结果输出

在页面1的图层2中,找到了一个:位图
在页面1的图层2中,找到了一个:文本
在页面2的图层2中,找到了一个:文本

小结

在文档遍历中通常会用到对象的集合形式,例如 Shape 对象的集合形式是 ShapesPage 对象的集合形式是 PagesLayer 对象的集合形式是 Layers,在定义集合变量的时候,可以直接这样定义。


原创声明:本文首发于个人CorelDRAW VBA博客,请尊重文章版权。
转载请注明原文链接:http://www.cdrvba.com/coreldraw-vba-traverse-shapes/

你可能感兴趣的:(CorelDRAW VBA - 遍历文档、页面、图层和形状对象)