.我们经常要根据一特性找到某些形状,比如
- 找到轮廓颜色为CMYK(0,0,0,100)的形状
- 找到填充色为RGB的形状
- 找到应用一特效透镜的形状
- 并且找到以上这些内容的个数
而他里面内置了快速定位的功能query, 这一节我们共同来学习快速查找QEURY功能
先上代码:
Sub 第一个插件()Dim theCount As IntegertheCount = ActivePage.Shapes.FindShapes(Query:="@colors.find(cmyk(0,0,0,100))").CountIf theCount <> 0 ThenMsgBox "本文件内含有" & theCount & "个"End If
End Sub
这是一段查找填充或者轮廓颜色为CMYK(0,0,0,100)也就是平常常说的单色黑的查找代码
这就是快速定位颜色的形状集合, 根据上一节的内容我们知道FindShapes
是找到的形状集合ShapeRange
Count
是ShapeRange里面的一个属性,里面记录的是集合的总数,是一个长整数
- 再说一下查找形状大于100毫米的写法
Sub 第一个插件()Dim theCount As IntegertheCount = ActivePage.Shapes.FindShapes(Query:="@width > {100 mm}").CountIf theCount <> 0 ThenMsgBox "本文件内含有" & theCount & "个"End If
End Sub
这样就可以了
- 再说一下查找某些特效的查法
Sub 第一个插件()Dim theCount As IntegertheCount = ActivePage.Shapes.FindShapes(Query:="@com.transparency.type <> 0").CountIf theCount <> 0 ThenMsgBox "本文件内含有" & theCount & "个"End If
End Sub
上面这一串是直接查找所有形状 看看里面有没有含有使用了透镜效果的形状,如果有就会弹窗
代码释义
FindShapes
可以在开发者手册看到最后一个参数是Query
,这个query就是另类的快速查询方法了
Query:=""
这个是固定用法,后面接双引号, 引号内部就是我们更改的查询参数
"@colors.find(cmyk(0,0,0,100))
要访问当前对象的方法和属性,必须在方法或属性名称前加上@符号
这里再说一下关于Shape的可查询方法一共有哪些呢?
序号 | 符号 | 返回值 |
---|---|---|
1 | @name | 当前形状的名称 |
2 | @type | 返回表示形状类型的字符串 |
3 | @fill | 返回表示形状填充的填充对象 |
4 | @outline | 返回表示形状轮廓的轮廓对象 |
5 | @width | 返回形状的宽度(后面要带单位) |
6 | @height | 返回形状的高度 |
7 | @left | 返回该形状在页面上左边缘的水平位置 |
8 | @right | 返回该形状在页面上的右边缘的水平位置 |
9 | @top | 返回该形状在页面上的顶部Y轴位置 |
10 | @bottom | 返回该形状在页面上的底边的Y轴位置 |
11 | @centerX | 返回该形状在页面上的中心点的X轴位置 |
12 | @CenterY | 返回该形状在页面上的中心点的Y轴位置 |
13 | @colors | 返回用于形状填充和轮廓的颜色数组。这个数组只包含唯一的颜色,所以如果填充和轮廓有相同的颜色,只有一种颜色是返回值 |
14 | @com | 返回形状的COM对象。这允许访问形状对象及其子对象的任何属性和函数,因为CQL不能直接访问的方法和属性。 |
一共就这么14种
这样子,当我们写上其中任意一种的时候,这个@**
字符串代表就是所有当前文档中所有能够找得到的与之匹配的形状
.find(cmyk(0,0,0,100))
是颜色查找的固定用法
@width > {100 mm}
这一段里面, @width表示形状的宽度,>
表示大于{100 mm}
表示100毫米要用大括号包起来.
这里插入讲一下几种常用的:
- 等于 =
- 不等于 <>
- 大于等于 >=
- 小于等于 <=
- 大于 >
- 小于 <
- 或者 |
- 非 !
@com.transparency.type <> 0
这一段的com是一个组件,回传的是COM:IVGShape对象, 这一段是一个布尔值,也就是结果TRUE或者FALSE, 只要是TRUE这个shape就会被加入到集合中
这个COM组件内部是什么还有待进步了解,等我去tlb内部了解清楚了再回头来解释吧
这个transparency
就是透镜特效的类,type
是他的子属性
等于0的时候是没有特效, 而另外有1到4各表示一种类型的透镜特效, 所以我在这里用了非0,也就是<>0来表示