ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

VBA常用技巧代码解析

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-5-12 15:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

回答

本帖已被收录到知识树中,索引项:开发帮助和教程
袁版主:您好!
    工具-->引用中没有丢失什么引用呀!

TA的精华主题

TA的得分主题

发表于 2009-5-12 16:41 | 显示全部楼层

控件跟随活动单元格的问题

控件跟随活动单元格的时候,不允许粘贴是什么原因

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-12 16:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

第8部分 控件与用户窗体

技巧150         使用代码添加窗体及控件
       VBA中的用户窗体为用户提供了可视化的操作界面,在用户窗体中一般都包含控件以便与用户进行交互。我们通常是在VBE中使用菜单“插入”→“用户窗体”来创建用户窗体,然后拖动工具箱中的控件到用户窗体中,也可以使用代码来添加用户窗体及其控件,代码如下:
  1. #001  Private Sub CommandButton1_Click()
  2. #002      Dim myForm As VBComponent
  3. #003      Dim myTextBox As Control
  4. #004      Dim myButton As Control
  5. #005      Dim i As Integer
  6. #006      Set myForm = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
  7. #007      With myForm
  8. #008          .Properties("Name") = "Formtest"
  9. #009          .Properties("Caption") = "演示窗体"
  10. #010          .Properties("Height") = "180"
  11. #011          .Properties("Width") = "240"
  12. #012          Set myTextBox = .Designer.Controls.Add("Forms.CommandButton.1")
  13. #013          With myTextBox
  14. #014              .Name = "myTextBox"
  15. #015              .Caption = "新建文本框"
  16. #016              .Top = 40
  17. #017              .Left = 138
  18. #018              .Height = 20
  19. #019              .Width = 70
  20. #020          End With
  21. #021          Set myButton = .Designer.Controls.Add("Forms.CommandButton.1")
  22. #022          With myButton
  23. #023              .Name = "myButton"
  24. #024              .Caption = "删除文本框"
  25. #025              .Top = 70
  26. #026              .Left = 138
  27. #027              .Height = 20
  28. #028              .Width = 70
  29. #029          End With
  30. #030          With .CodeModule
  31. #031              i = .CreateEventProc("Click", "myTextBox")
  32. #032              .ReplaceLine i + 1, Space(4) & "Dim myTextBox As Control" & Chr(10) & Space(4) & "Dim i As Integer" & Chr(10) & Space(4) & "Dim k As Integer" _
  33. #033                  & Chr(10) & Space(4) & "k = 10" & Chr(10) & Space(4) & "For i = 1 To 5" & Chr(10) & Space(8) & "Set myTextBox = Me.Controls.Add(bstrprogid:=""Forms.TextBox.1"")" _
  34. #034                  & Chr(10) & Space(8) & "With myTextBox" & Chr(10) & Space(12) & ".Name = ""myTextBox"" & i" & Chr(10) & Space(12) & ".Left = 20" _
  35. #035                  & Chr(10) & Space(12) & ".Top = k" & Chr(10) & Space(12) & ".Height = 18" & Chr(10) & Space(12) & ".Width = 80" _
  36. #036                  & Chr(10) & Space(12) & "k = .Top + 28" & Chr(10) & Space(8) & "End With" & Chr(10) & Space(4) & "Next"
  37. #037              i = .CreateEventProc("Click", "myButton")
  38. #038              .ReplaceLine i + 1, Space(4) & "Dim i As Integer" & Chr(10) & Space(4) & "On Error Resume Next" & Chr(10) & Space(4) & "For i = 1 To 5" & Chr(10) & Space(8) & "Formtest.Controls.Remove ""myTextBox"" & i" & Chr(10) & Space(4) & "Next"
  39. #039          End With
  40. #040      End With
  41. #041  End Sub
复制代码
代码解析:
       使用代码添加一个用户窗体及其两个按钮控件,并为按钮控件添加单击事件及其相应的代码。
       第2行到第5行代码声明变量类型,如果发生错误请在菜单“工具”→“引用”中引用“Microsoft Visual Basic for Applications Extensibility 5.3”,如图所示。
       Snap1.jpg
       第6行代码,使用Add方法添加用户窗体,应用于VBComponents集合的Add方法将一个对象添加到集合,语法如下:
       object.Add(component)
       参数object是必需的,一个有效的对象名。
       参数component是必需的,对于VBComponents集合,则为表示类模块、窗体、标准模块的列举常数,可以为表格所示的常量之一。
       Snap2.jpg
       第8行到第11行代码,使用VBComponent对象的Properties属性设置用户窗体的相关属性。
       第12行代码,使用Add方法添加在用户窗体上添加一个按钮控件。VBComponent对象的Designer属性返回一个设计器对象,其Controls属性返回Controls集合,代表用户窗体中所有的控件。应用于Controls集合对象的Add方法在用户窗体中添加控件,语法如下:
       object.Add( ProgID [, Name [, Visible]])
       参数object是必需的,一个有效的对象名。
       参数ProgID是必需的,程序设计标识符。是用于标识对象类的、没有空格的文本串。关于程序设计标识符请参阅技巧119-3中的表格。
       参数Name是可选的,指定被添加的对象的名称。
       参数Visible是可选的,若对象为可见的为True,若对象为隐藏的则为False。默认值为True。
       第13行到第20行代码设置添加的按钮控件的相关属性。
       第21行到第29行代码继续添加一个按钮控件并设置其相关属性。
       第30行到第40行代码为添加的按钮控件创建单击事件过程并在其单击事件中添加代码。
       其中第30、39行代码使用CreateEventProc方法为按钮控件创建单击事件过程,应用于CodeModule对象的CreateEventProc方法创建一个事件过程,语法如下:
       object.CreateEventProc(eventname, objectname) As Long
       参数object是必需的,一个有效的对象名。
       参数eventname是必需的,字符串表达式,用来指定欲添加到模块的事件名称。
       参数objectname是必需的,字符串表达式,用来指定事件源的对象名称。
       CreateEventProc方法可返回事件过程的开始行,所以使用变量i保存开始行。
       第32行代码使用ReplaceLine方法在按钮控件的单击事件过程中添加代码,应用于CodeModule对象的ReplaceLine方法用特定的代码代替原代码,语法如下:
       object.ReplaceLine(line, code)
       参数object是必需的,一个有效的对象名。
       参数line是必需的,用来指定所要代替的行。
       参数code是必需的,用来指定要插入的代码。
       在使用ReplaceLine方法时将line参数设置为变量i加1,也就是在单击事件过程的第2行开始添加代码,在添加代码时使用Space函数插入空格,使用Chr函数进行换行。
       运行CommandButton1_Click过程,添加一个用户窗体及两个按钮控件,并在用户窗体中添加以下的代码:
  1. #001  Private Sub myTextBox_Click()
  2. #002      Dim myTextBox As Control
  3. #003      Dim i As Integer
  4. #004      Dim k As Integer
  5. #005      k = 10
  6. #006      For i = 1 To 5
  7. #007          Set myTextBox = Me.Controls.Add("Forms.TextBox.1")
  8. #008          With myTextBox
  9. #009              .Name = "myTextBox" & i
  10. #010              .Left = 20
  11. #011              .Top = k
  12. #012              .Height = 18
  13. #013              .Width = 80
  14. #014              k = .Top + 28
  15. #015          End With
  16. #016      Next
  17. #017  End Sub
  18. #018  Private Sub myButton_Click()
  19. #019      Dim i As Integer
  20. #020      On Error Resume Next
  21. #021      For i = 1 To 5
  22. #022          Formtest.Controls.Remove "myTextBox" & i
  23. #023      Next
  24. #024  End Sub
复制代码
代码解析:
       第1行到第17行代码,用户窗体中“新建文本框”按钮的单击事件,在用户窗体运行时使用Add方法在用户窗体中添加5个文本框控件并设置其相关属性。
       第18行到第24行代码,用户窗体中“删除文本框”按钮的单击事件,在用户窗体运行时使用Remove方法删除文本框控件。应用于Controls集合的Remove方法从集合中删除一个成员,或者从框架、页面或窗体中删除一个控件,语法如下:
       object.Remove( collectionindex)
       参数object是必需的,一个有效的对象名。
       参数collectionindex是必需的,成员在集合内的位置或索引。
       注意 Remove方法只能删除在运行时间添加的控件,如果想删除在设计时间添加的控件则会出错。
       运行CommandButton1_Click过程添加的用户窗体如图所示。
       Snap3.jpg
       单击“添加文本框”按钮在用户窗体中添加5个文本框控件,如图所示,而单击“删除文本框”按钮则删除用户窗体中添加的文本框控件。
       Snap4.jpg

[ 本帖最后由 yuanzhuping 于 2009-5-18 14:54 编辑 ]

技巧150 使用代码添加窗体及控件.rar

15.06 KB, 下载次数: 1022

TA的精华主题

TA的得分主题

发表于 2009-5-12 20:09 | 显示全部楼层
yuanzhuping君 明显加快上贴速度。注意身体!

TA的精华主题

TA的得分主题

发表于 2009-5-12 23:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-5-12 23:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我一直在学习BVA,总是找不到好的方法,总是这样学习几天停下来了,看到版主的深入浅出的讲解,才豁然开朗,仔细学习体会,相信我慢慢会学习下去,谢谢版主这样无私奉献的好人。

TA的精华主题

TA的得分主题

发表于 2009-5-13 10:33 | 显示全部楼层

为什么不回答

控件跟随活动单元格的时候,不允许粘贴是什么原因,很急

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-13 15:38 | 显示全部楼层
从开贴到第8部分的完成,不行不觉的已有三个多月了,现在发现每天更新真的好累,决定给自己放几天假,第9部分从星期一开始更新,可能速度要慢点了(呵呵,我把贴子标题也改了 )。

下面是1—8部分的Word文档,请下完5个WinRAR文件后一起解压缩。
VBA常用技巧(1_8).part1.rar (1.91 MB, 下载次数: 7621)
VBA常用技巧(1_8).part2.rar (1.91 MB, 下载次数: 8520)
VBA常用技巧(1_8).part3.rar (1.91 MB, 下载次数: 8362)
VBA常用技巧(1_8).part4.rar (1.91 MB, 下载次数: 8173)
VBA常用技巧(1_8).part5.rar (3.51 KB, 下载次数: 3269)

下面是1—8部分的附件,请下完3个WinRAR文件后一起解压缩。
示例文件(1_8).part1.rar (1.91 MB, 下载次数: 10049)
示例文件(1_8).part2.rar (1.91 MB, 下载次数: 8849)
示例文件(1_8).part3.rar (1.29 MB, 下载次数: 7668)

[ 本帖最后由 yuanzhuping 于 2009-5-13 16:14 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-5-13 16:08 | 显示全部楼层

感谢

尊敬的袁老师:您好!
   您为了贡献于人类,花费您大量地时间与精力,实在难能可贵;
   您为了我们这些EXCEL VBA菜鸟们,不辞辛劳,实在令人敬佩;
   在这里,本人由衷地感谢您的功绩!谢谢!谢谢!谢谢~~~~~~

TA的精华主题

TA的得分主题

发表于 2009-5-13 17:18 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 01:56 , Processed in 0.058860 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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