目录

VBComponents集合

VBComponent对象


如图所示,该表为某公司工资表与员工档案表,当查看工资表时,希望能够在双击员工姓名时,在员工档案表中查询该员工的基本信息,并临时创建一个窗体显示该员工信息。

月份 工作地区 部门 姓名 基本工资 奖金 补贴 出勤 缺勤(天) 休息 加班小时 加班金额 扣其它费用 应发工资
1900/1/8 行政部 行政部 张三 1100 2000 500 176 0 9 0 0 8 3592
1900/1/8 行政部 行政部 李四 1100 2000 500 176 0 9 0 0 8 3592
1900/1/8 行政部 行政部 王二 1100 2000 500 176 0 9 0 0 8 3592
姓名 职务 部门 地区 录用时间 有效期限 年龄 是否为深圳户口 性别 民族 身份证号 出生日期 联系电话 籍贯 户口所在地
张三 主管 行政部 行政部 55 非深户口 515024196602154156 1966/2/15 XXXXX 四川 四川
王二 主管 行政部 行政部 55 非深户口 516024196602154156 1966/2/15 XXXXX 四川 四川

使用VB组件集合对象(VBComponents)的Add方法添加一个窗体组件,使用该窗体的Properties属性设置窗体的各个属性,并使用其Designer属性访问设计器,然后添加控件用以显示所有的信息。

添加VBE库”Microsoft Visual Basic for Applications Extensibility 5.3″的引用,如下图所示:

步骤1  按组合键【Alt+F11】打开VBE。
步骤2  双击sheet1,并输入以下代码:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)Dim i As LongIf Target.Column = 4 And Target.Row > 1 And Target.Row <= Range("A1").CurrentRegion.Rows.Count ThenDim arrHeaderDim arrDataDim usForm As ObjectDim objLbl As ObjectDim Rng As RangeCancel = TrueSet Rng = Sheet2.Range("A:A").Find(Target.Value)If Rng Is Nothing ThenExit SubEnd IfarrHeader = Sheet2.Range("A1:O1").ValuearrData = Intersect(Rng.EntireRow, Sheet2.Range("A:O")).ValueSet usForm = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)With usForm.Properties("Caption") = Target.Value & " 档案".Properties("Height") = 18 * (UBound(arrData, 2) + 2).Properties("Width") = 420With .DesignerFor i = 1 To UBound(arrData, 2)Set objLbl = .Controls.Add("Forms.Label.1")With objLbl.Top = 12 + 18 * (i - 1).Height = 12.Width = 100.Left = 18.Caption = arrHeader(1, i) & ":"End WithSet objLbl = .Controls.Add("Forms.Label.1")With objLbl.Top = 12 + 18 * (i - 1).Height = 12.Width = 300.Left = 130.Caption = arrData(1, i)End WithNext iEnd WithEnd WithVBA.UserForms.Add(usForm.Name).ShowThisWorkbook.VBProject.VBComponents.Remove usFormEnd IfEnd Sub

步骤3  返回工作表界面,在功能区中选择“开发工具”选项卡,在“代码”组中单击“宏安全性”按钮,在“宏设置”选项中勾选“信任对VBA工程对象模型的访问”,如图所示。

步骤4  双击“工资表”中的“姓名”列,当其存在于“员工档案表”时,则显示窗体,如图所示。当窗体关闭后,工作簿不会进行保存。

VBComponents集合

当需要访问某个工作簿的VBA工程时,可以通过VBProject属性访问工程对象。VBComponents集合是VBProject对象下的子对象(即VB组件集合),其中包括所有的工作表、窗体、模块等(即VBE的工程资源管理器中所能见的对象)。使用该集合的Add方法可以添加VB组件,其语法为

VBComponents.Add(component)

该方法可以返回一个VB组件对象。参数component为所需要添加的组件,可以为表中的任意常量。

常  置

说  明

Vbext_ct_ClassModule

添加类模块

vbext_ct_MSForm

添加窗体

Vbext_ct_StdModule

添加标准模块

使用VBComponents的Add方法添加窗体后,其窗体将存在于当前工作簿的VB工程中。当需要删除VBComponent对象时,可以使用VBComponents的Remove方法,其语法如下:

VBComponents.Remove(component)

参数component为所需要删除的组件对象。
当需要操作VBComponents时,必须在Excel的“宏设置”选项中勾选“信任对VBA工程对象模型的访问”(见本例的操作步骤3)。

VBComponent对象

当使用VBComponents的Add方法添加窗体后,其返回的是VBComponent对象。尽管窗体对象是VBA工程中的一个组成部分,但其对象模型和VBComponent对象是不同的。因而,VBComponent对象无法直接访问窗体对象的属性或执行其方法。
当需要读取或修改VBComponent对象的属性时,需要通过其Properties集合访问,其语法为

VBComponent.Properties(propname)[=value]

其中,propname为所需访问的属性的名称,value为属性的值。
          通过VBComponent的Designer属性可以访问VB组件的设计器模型,在该设计器下可以使用Controls的Add方法在窗体中添加控件,其方法与在窗体中添加控件是相同的。
        当需要使添加的窗体显示时,则需要将窗体添加至VBA的Userforms集合中,其语法为

VBA.UserForms.Add(componentname).Show

其中,componentname为添加的窗体名称。
        由于窗体显示之后,其后所有的代码都将在该窗体关闭后才执行,因而窗体的属性设置以及窗体控件的添加必须放置于窗体显示代码之前。

Excel 2010 VBA 入门 137 动态创建窗体相关推荐

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

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

  2. Excel 2010 VBA 入门 135 利用窗体制作登录界面

    题 使用窗体制作登录界面,实现当打开Excel时,隐藏工作簿,当登录完成后显示工作簿. 码 登录机制是将用户输入的用户名和密码与正确的用户名和密码进行比较,若相等,则表示登录成功,反之登录失败.本例的 ...

  3. Excel 2010 VBA 入门 001显示开发工具选项卡

    目录 VBA简介 宏简介 显示"开发工具"选项卡 ​ VBA简介 Visual Basic for Application (VBA)是Visual Basic的一种宏语言,是依附 ...

  4. Excel 2010 VBA 入门 006 设置宏安全性

    目录 操作方法 步骤1单击"开发工具"选项卡中的"宏安全性"按钮,如图所示. ​ 步骤2在"信任中心"的"宏设置"选项中 ...

  5. Excel 2010 VBA 入门 130 利用窗体创建实时筛选浮动工具栏

    目录 题 码 DefauIt和CanceI按钮 提高单元格隐藏的速度 自制浮动工具栏 动态显示与隐藏窗体 题 如图所示,该表为某单位员工档案.现希望制作一个包含有文本框的浮动工具栏,当在文本框中输入字 ...

  6. Excel 2010 VBA 入门 125 创建动态智能匹配的下拉列表

    目录 题 码 TextBox控件和ListBox控件 ListBox控件的ListFiIIRange属性和List属性 ListBox控件的多列显示 ListBox控件的值 模糊查询下拉列表 控件的选 ...

  7. Excel 2010 VBA 入门 129 利用窗体向工作表中录入数据

    目录 题 码 窗体控件与工作表的交互 窗体的事件 窗体中ControIs集合访问控件 控件的排列 使用控件数组进行赋值 题 如图所示,该表为某公司订单记录表,其中所有的列都是必填的,订单编号为自动生成 ...

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

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

  9. Excel 2010 VBA 入门 007 创建和使用数字证书签名

    目录 操作方法 1.创建数字证书 步骤1  单击Windows中的"开始"按钮,在"所有程序"中找到Microsoft Office,在子文件夹"Mi ...

最新文章

  1. eclipse假死解决办法
  2. Qt编译PX4源码,参考如下进行配置
  3. python爬虫动态加载页面_如何爬动态加载的页面?ajax爬虫你有必要掌握
  4. Spring AOP + AspectJ Annotation Example---reference
  5. RF无线电射频接口静电保护方案图
  6. [html] 举例说明只用html和css如何使得一个列表编号倒序?
  7. 不同型号服务器如何做双击热备,服务器做双机热备教程
  8. 下载java的jdk
  9. css animation 触发,在JavaScript中触发CSS动画
  10. 系统分析员备考之经济管理篇(一)
  11. 利用rancher轻松构建pass平台
  12. java导出excel水印_java解决poi导出excel文字水印,导出excel不可操作问题
  13. 井字游戏HTML,HTML5井字棋游戏
  14. 如何区分电压串联负反馈电路和电流串联负反馈电路
  15. 锁定计算机和睡眠有什么区别,电脑的睡眠和休眠选项有什么区别?怎么唤醒休眠的电脑?...
  16. python来爬取煎蛋网随手拍小姐姐图片
  17. M1 Mac使用photoshop液化、存储为web格式黑屏如何解决
  18. Node 之 nvm 下载、安装、使用,以及node 、nrm 的相关使用
  19. python中的pil模块_初学python的PIL模块
  20. 这些线上峰会为何不约而同选择亿联视讯方案?云端协同、流畅安全是关键!

热门文章

  1. 计算机word考试试题模板,职称计算机考试Word2007模块考试题库
  2. 教你如何整理下载的图片素材文件名太长太杂乱问题,怎么批量随机重命名的步骤解析
  3. 拥有“读心术”是一种怎样的体验?
  4. IPhone Gphone Wphone Ophone
  5. StringTable
  6. 2012年中国管理咨询公司排名(前100位)
  7. 04-查询窗口的使用
  8. 计算机科学与技术分数高吗,现在学计算机都是傻子?千万别学计算机科学与技术是真的吗?...
  9. Batch磁盘清理小程序
  10. android 图片比例计算器,Algeo图形计算器