目录

CaIIByName函数

使用CallByName函数获取子对象

使用CaIIByName函数批量修改对象的属性

灵活使用自定义过程


对于多个在Excel工作表中的ActiveX控件,可以批量设置其属性?如图,该表为某公司使用的技能培训出题考试系统,所有的题目为单项选择题,并已经在工作表中插入了相应的控件(4个OptionButton控件以及两个CommandButton控件)。当单击“上一题”
和“下一题”按钮时,使程序更改OptionButton的Caption属性以显示题目对应的选项。

通过题号查找下一题或上一题,读取题号和题目至单元格中。使用CallByName函数结合  循环获取每个OptionButton对象,然后更改其Caption属性为各个选项。

Sheet1码

Option ExplicitPrivate Sub CommandButton1_Click()ChooseData cdPrevious
End SubPrivate Sub CommandButton2_Click()ChooseData cdNext
End Sub

插入模块

Option ExplicitEnum ChooseDirectioncdNext = 1cdPrevious = -1
End EnumSub ChooseData(cddirection As ChooseDirection)Dim dataNumber As LongDim optionNumber As LongDim shtData As WorksheetDim shtTest As WorksheetDim maxData As LongDim minData As LongSet shtTest = Sheet1Set shtData = Sheet2maxData = shtData.Range("A2").CurrentRegion.Rows.Count - 1minData = 1dataNumber = shtTest.Range("A2").Value + cddirectionIf dataNumber <= maxData And dataNumber >= minData ThenshtTest.Range("A2").Value = dataNumbershtTest.Range("B2").Value = shtData.Cells(dataNumber + 1, 1).ValueFor optionNumber = 1 To 4With CallByName(shtTest, "OptionButton" & optionNumber, VbGet).Caption = shtData.Cells(dataNumber + 1, optionNumber + 1).ValueEnd WithNext optionNumberEnd If
End Sub

CaIIByName函数

CallByName函数可以获取或设置某个对象的属性或者子对象,也可以用来执行该对象的指定方法。与通常的点运算(.)不同的是,利用CallByName函数可以使用文本形式访问对象的属性或方法,其语法如下:

CallByName(object, procname, calltype, [args () ] )
  • 参数object为对象变量。
  • 参数procname为object所表示的对象变量的属性名称或者方法名称。
  • 参数calltype为调用方式,即指定procname的类型,可以为VbGet(获取属性)、VbSet(对象赋值)、VbLet(属性赋值)、VbMethod(执行方法)。
  • 参数args为参数列表,当calltype所指定的调用方式需要参数时,可以在本参数位置开始以逗号(,)为分隔符依次填写各个参数。

使用CallByName函数获取子对象

一般地,可以使用以下表达式表示某个对象的子对象:

对象.子对象

该子对象同样可以通过CallByName函数获取,相当于其父对象的一个属性,只需将子对象的名称传递给procname参数,然后calltype参数设置为VbGet,即可使CallByName函数返回该子对象。

使用CaIIByName函数批量修改对象的属性

由于使用CallByName函数可以以文本的形式访问对象,因而可以使用其批量修改对象的属性。使用该方法修改属性必须保证所有的对象名称有规律,并且具有相同的属性。本例中,ActiveX控件插入工作表后,一般以其类型名称+顺序编号作为其默认的对象名称。由于其具有规律性,因而使用循环对其访问。
本例中所有的OptionButton为工作表对象Sheet1的子对象,使用CallByName函数可以返回各个OptionButton对象,之后可以直接在CallByName函数中对其Caption属性进行赋值。

灵活使用自定义过程

本例中,“下一题”和“上一题”按钮的实质是完成同一个动作:将“题库”中的相关信息写入“考试”工作表中。其唯一的区别在于,单击“下一题”按钮时,选取的题目的题号为当前题号+1,而上一题则是选取当前题号-1。只要获取新的题号,其取题目的代码是一致的。
    为了便于调用,本例中自定义了一个枚举,分别以-1和1表示“上一题”和“下一题”的题号的变化量,并在自定义过程中使用了该枚举类型的参数作为选题的标志。对于程序,只需获取当前的题号,并加上参数传递过来的值,即可得到新的题号,从而进行题目信息的获取。
    在大多数使用各类控件的程序中,总是调用自定义过程实现主要的功能,而利用各种事件将逻辑串起来。一般来讲,自定义函数和自定义过程总是可以使用自定义的枚举作为参数的类型,从而方便调用。

Excel 2010 VBA 入门 126 批量设置控件属性相关推荐

  1. Excel 2010 VBA 入门 124 日期选择控件

    目录 码 DTPicker控件 DTPicker控件的时间和日期的切换 DTPicker控件的日期输入方式 DTPicker控件的Value属性与Change事件 使用DTPicker控件实现日期选择 ...

  2. Excel 2010 VBA 入门 031 批量生成上标

    目录 Characters对象 Font对象的Superscript属性 设置Characters对象Font的注意事项 Characters属性的通用性 示例 Characters对象 Charac ...

  3. Excel 2010 VBA 入门 040 批量删除空行

    目录 示例: 实现代码1: 单元格删除Delete方法 单元格删除的通用算法 实现代码2 利用Union获取整个单元格区域进行统一操作 Union方法的注意事项 单元格插入Insert方法 示例: 如 ...

  4. Excel 2010 VBA 入门 033 批量合并相同的单元格

    目录 Range的Merge方法合并单元格 VBA运行时关闭警告 多行中相同的内容处理 示例: Range的Merge方法合并单元格 单元格对象的Merge方法可以用来合并相邻的单元格区域,使之成为一 ...

  5. Excel 2010 VBA 入门 048 批量替换文本中的指定字符(replayce函数和方法)

    目录 示例: 实现代码 Replace函数 单元格对象的Replace方法 使用Replace方法实现代码 示例: 如图所示,该表为某公司商品编码.由于商品目录升级,现商品编码中以"GXGY ...

  6. Excel 2010 VBA 入门 034 创建图片批注

    目录 批注(Comment)对象 批注的添加与删除 FiIIFormat对象 OnError语句 示例: 批注(Comment)对象 Comment对象是单元格的一个属性,表示单元格的批注.Comme ...

  7. Excel 2010 VBA 入门 139 创建工作簿级的自定义选项卡

    目录 题 码 Excel工作簿的实质 XML简介 customUI.xml 常用的功能区控件及通用属性 tabs控件和tab控件 group控件 命令控件 内置控件的ID customUI.xml中控 ...

  8. Excel 2010 VBA 入门 103 利用VBA批量插入图片

    目录 示例 代码: Shapes.Shape和 ShapeRange Shapes对象插入图形的方法 Excel的坐标 图形大小的调整 获取图片的原始大小 将图片按比例缩放至单元格 图片批量插入的步骤 ...

  9. Excel 2010 VBA 入门 064 按照关键字批量创建超链接

    目录 示例 实现代码 Hyperlink对象 创建超链接 删除超链接及访问超链接 创建超链接打开指定的宏代码 示例 如图所示,该表为某公司资产负债表以及关于报表的说明.为了方便阅读,现希望能够用VBA ...

  10. Excel 2010 VBA 入门 138 添加选项卡和内置控件

    目录 题 码 功能区简介 使用Excel选项自定义功能区 题 在功能区中添加一个选项卡,并在选项卡中添加内置控件 码 使用Excel选项中的[自定义功能区]添加选项卡和内置控件. 步骤1  选择&qu ...

最新文章

  1. Nginx源码分析:核心数据结构ngx_cycle_t与内存池概述
  2. 简单介绍C语言使用四种方法初始化结构体
  3. mysql性能调优与架构设计_了解架构设计远远不够!一文拆解 Tomcat 高并发原理与性能调优
  4. linux的安装nmom命令,Linux下块设备查看命令lsblk详解
  5. PaddleOCR——Docker环境下基于HubServing模式部署Restful API服务(CPU版本)
  6. ubuntu 12.04解决Broadcom STA无线网卡驱动安装失败解决
  7. 边缘检测robert原理_在操作机器视觉检测过程中,遇到检测精度的难题怎么办?_西旺科技...
  8. TikTok全球月活突破10亿
  9. 【避坑】初次接项目的血与泪,扎坑了老铁(二)
  10. Operator 基础原理和概念
  11. NOI 十连测 Zbox loves ants
  12. CAD直接打印,不出现打印对话框
  13. 直接访问mysql的BDB存储引擎
  14. 入小学教材、主流编程语言增长最快…… Python 的 2017 回顾
  15. 如何正确安装朗文英文当代大词典(2CD版)
  16. Python 日期时间格式化输出,带年、月、日、时、分、秒
  17. 【Unity】U3D TD游戏制作实例(三)相机管理器、生成敌人优化、敌人血槽小组件
  18. 读书笔记-大颠狂(非同寻常的大众幻想与群众性癫狂)
  19. 向SQL Server 中导入长文本
  20. zblog php 自适应,ZblogPhp模版-BlogCms+自适应

热门文章

  1. 浅析ISO三体系标准认证对企业的作用
  2. matlab电磁场 有限元,电磁场有限元Matlab解法.pdf
  3. 软件工程期末考试试题及答案(详细、经典)
  4. 如何进行宽带测速,教程来啦!怎样在电脑上对宽带进行测速?
  5. DELPHI 编程(一) __快速认识Delphi
  6. 昂达v891w可以用u盘linux,想用啥用啥!昂达V891w双系统版平板评测
  7. 目标设定的SMART原则
  8. 凤凰网php,凤凰网房产频道招聘 web 前端工程师、PHP 工程师 15-25k,欢迎简历来砸~...
  9. android 屏保程序,Android下屏保程序的开发
  10. WAP 2.0介绍和使用规范