ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2226|回复: 4

[原创] 动态添加控件 入门

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-1-31 19:24 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本贴仅供入门级用户参考。
动态添加控件效果.png

包含以下几个知识点:
1、动态添加控件,必须使用"WithEvents"关键字对要添加的控件预定义其变量名称。
注意,这种变量的定义,必须放在类模块或用户窗体的代码中,不能放在公共的普通模块的代码中。
2、动态添加控件,具体方法就是在代码中使用Controls.Add方法灵活地添加控件。为了后续能在代码中控制使用这些控件,必须用Set语句把预定义的变量名称与动态添加的控件之间建立相应的引用关系。
注意:控件的变量定义类型,必须与相应以ADD方法动态添加的控件类型相一致。同时,在Add方法的字符串参数中,类名后面一般需要加上".1"才能正常使用。而在变量定义的语句中,则不一定需要在类名后加".1",是否需要添加,以VBA编辑器的代码窗口上方的控件名称下拉列表中出现了变量名称为准。
如下图所示,用Private WitnEvents语句定义了控件变量名称Tbx之后,代码窗口上方的控件名称下拉列表中出现了“Tbx”,因此,定义是成功的。
动态添加控件一.png

动态添加控件二.png
3、用代码设置窗口显示为“模式窗口”或“无模式窗口”的方法,以及这两种显示方式的区别。
4、TextBox的多行模式和自动换行显示的设置方法。
5、在窗体激活时,自动选中文本框中的内容并激活文本框的方法。
6、使控件能够用键盘快捷操作的方法。
窗体中的控件,如果未做设定,要用键盘操作时就只能用Tab键轮序选中。如果要直接用键盘操作某个指定按钮,就需要设置该控件的“Accelerator”属性。本例中,对CommandButton的Accelerator属性设置为“C”,即可以按Alt+C键对它进行操作,相当于用鼠标单击它。
7、一个小技巧:对动态控件,通常需要赋初值,又要使用它的Change方法。本例中演示了让这两者互不干扰的的事件代码编写方法,即使用了本窗体内部公共的布尔变量FirstShow,来标记Change事件是否为初次发生。


动态添加控件.rar (20.56 KB, 下载次数: 116)






评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-1-31 20:26 | 显示全部楼层
  1. Private Sub Tbx_Change()
  2.     Dim r
  3.     If FirstShow Then Exit Sub
  4.     If Tbx.Text Like "*[!A-Za-z_0-9]*" Then
  5.         MsgBox "账号名称中只允许使用以下字符:大(小)写字母、数字和下划线。" & _
  6.         vbCrLf & "其它字符将被自动排除。", _
  7.         vbOKOnly, "输入了非法字符。"
  8.         FirstShow = False
  9.         r = Len(Tbx.Text)
  10.         Tbx.Text = Mid(Tbx.Text, 1, r - 1)
  11.     End If
  12. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-8-13 09:59 | 显示全部楼层
listview之类的控件用add后,事件方法不能用的

TA的精华主题

TA的得分主题

发表于 2024-8-13 10:56 | 显示全部楼层
如果在其他过程中动态添加控件并赋初值,然后show窗体的话,就可以跳过FirstShow判断。
以下代码可以放工作表或者标准模块:
  1. Sub test()
  2. UserForm1.Controls.Add("Forms.TextBox.1", "tbx").Text = 1
  3. UserForm1.Show
  4. End Sub
复制代码

以下代码放用户窗体模块:
  1. Public WithEvents tbx As MSForms.TextBox

  2. Private Sub tbx_Change()
  3. MsgBox 1
  4. End Sub

  5. Private Sub UserForm_Activate()
  6. Set tbx = Controls("tbx")
  7. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-8-16 16:42 | 显示全部楼层
主要控件生成之后的位置,大小要花时间调试
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 13:53 , Processed in 0.028951 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表