零基础学Excel VBA-WE017「VBA 冷门的复选框应用」

一、简单演示

零基础学Excel VBA-WE017「VBA 冷门的复选框应用」

零基础学Excel VBA-WE017「VBA 冷门的复选框应用」

零基础学Excel VBA-WE017「VBA 冷门的复选框应用」

二、关键对象/方法的分析

OLEObject

包括 ActiveX 控件,一个链接式或内嵌 OLE 对象。我们这期只涉及 ActiveX控件。

什么是 ActiveX 控件呢?其实就是 开发工具 菜单这里,我们今天的主角 复选框,就在这里。

零基础学Excel VBA-WE017「VBA 冷门的复选框应用」

这些控件,用一个叫程序设计标识符的代号来标识,程序设计标识符的缩写为 ProgID, 是一串没有空格的字符串:

零基础学Excel VBA-WE017「VBA 冷门的复选框应用」

ActiveX 控件的属性非常多,包括 Shape 常见的一些属性,它都有,比如:

  • Left,左侧距离
  • Top,顶端距离
  • Width,宽度
  • Height,高度
  • TopLeftCell,左上角所在的单元格

Placement,与所在的单元格之间的附属关系

此外,它还有些比较少见的属性,比如:

  • MousePointer,鼠标指针的样式
  • TripleState,仅对复选框或切换按钮有效,增加第三种选择状态
  • SpecialEffect,改变样式
  • Caption,标题
  • GroupName,组别
  • LinkedCell,与控件关联的单元格

等等,还有很多。

但还好,这些控件可用的方法很少,基本上,我们把这些控件创建出来,调整好需要的样式,使用就可以了。

三、用法展示及说明

1. 用宏生成复选框,并定义属性

为了方便,我们用宏自动生成所需要的复选框。

这个表格,我们先把复选框都删掉。

我们看一下这个删除的宏,其实就一个 For Each 语句。

后面这个取值,把答案区域还原,只是方便测试用。

删除完了,我们再创建一次,创建出来的复选框,位置是固定的,左键右键都拉不动。

复选框,在菜单这里,也可以手动进行插入,而且有两种不同的复选框:

第一种,在插入菜单这里——

零基础学Excel VBA-WE017「VBA 冷门的复选框应用」

第二种,在开发工具这里——

零基础学Excel VBA-WE017「VBA 冷门的复选框应用」

注意,我们手动插入这些控件以后, WPS 会自动进入设计模式,这个模式下,所有控件都是可以移动的。

把设计模式关掉,现在再试试——

在 插入 菜单中的复选框,通过右键选中后,是可以进行移动的。

而在 开发工具 菜单中的复选框,跟我们宏所生成的,是一样的,位置固定的。

我们再试试 删除复选框 这个按钮,有意思的是,插入 菜单中的复选框,并没有被删掉。为什么呢?

我们删除的宏,是对 OLEObject 进行选择,但在 插入 菜单这里的控件,都不属于 OLEObject。

比如说,我们常用的这个按钮,它属于 Button。而这个复选框,它属于 CheckBoxes,如果要选择它们,可以用下面的语句:

For Each cb In ActiveSheet.CheckBoxes

cb.Delete

Next

插入 菜单这里的控件,可以理解为是经过了简化和美化的,属性非常少,适合简单使用场景。

而 开发工具 菜单这里的,则有非常多的属性,跟宏搭配使用,更加合适。

好,再次生成复选框,手动删掉添加的这个,继续看我们的宏语句。

这里,又用到了 rmax,这个变量我非常喜欢用,这样子,我们在工作表中增减新的行,宏也不用动了,一劳永逸,懒人,总得想些懒招。

接着下一句,Forms.checkbox.1 就是复选框的标识符,然后前面加个 With,这样,创建以后,可以非常方便的指定一系列的属性。

Height,试几个数字以后,选个大小最合适的就可以了。

Width,Left 和 Top 这里,用到了对应单元格的宽度和高度,还有一些简单公式,让生成的复选框,可以自动适配单元格。

接着的后面这些,就是对复选框的一些设置,注意个地方,就是 .Object,有的属性不要加这个,有的属于又需要,至于什么标准,帮助说明也没有提,而且最过分的是,插入 菜单中的复选框,跟我们现在宏这里创建的复选框,命令的用法也不一样。具体什么区别,有兴趣的朋友可以自己试试——没兴趣就算了,反正试出来也没多大用处。

另外还有一个,就是 TripleState 这个属性,设置为 True 以后,复选框在现在打勾和空白两种状态的基础上,再添加一种浅色打勾的状态。

2. 结果输出为PDF

我们来到另外一个子过程 CheckAnswer() 。比较简单的一个子过程,就是把 Excel 另存为 PDF 格式,基本是些格式化的语句了,不啰嗦。

好了,本期的内容就这样,本期的宏代码,并不实用,但希望通过本期的介绍,能为大家增添一种新的做表格的元素。而且,也是后面将会介绍的用户窗体的基础。


分享到:


相關文章: