




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、增加模块 1增加一个模块,命名为“我的模块” ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule).Name = 我的模块 系统常量vbext_ct_StdModule=1 2增加一个类模块,命名为“我的类” ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_ClassModule).Name = 我的类 vbext_ct_ClassModule=2 3增加一个窗体,命名为“我的窗体” ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm).Name = 我的窗体 vbext_ct_MSForm=3 二、删除模块 1删除“模块1”ThisWorkbook.VBProject.VBComponents.Remove hisWorkbook.VBProject.VBComponents(模块1) 2删除窗体“UserForm1”ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents(UserForm1) 3删除类模块“类1”ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents(类1) 4.删除所有的窗体 Sub RmvForms() Dim vbCmp As VBComponent For Each vbCmp In ThisWorkbook.VBProject.VBComponents If vbCmp.Type = vbext_ct_MSForm Then ThisWorkbook.VBProject.VBComponents.Remove vbCmp Next vbCmp End Sub 相关: 工作表和ThisWorkbook的模块类型为vbext_ct_Document=100 三、增加代码 1.在“模块1”中插入代码 如果需要在“Sheet1”、“Thisworkbook”、或“Userform1”中操作,用只需将下面的“模块1”换成相应的名称即可。 方法1: 在模块的开始增加代码,增加的代码放在公共声明option,全局变量等后面。 Sub AddCode1() ThisWorkbook.VBProject.VBComponents(模块1).CodeModule.AddFromString _ sub aTest() & Chr(10) & _ msgbox Hello & Chr(10) & _ end sub End Sub 方法2: 在模块指定行处增加代码,原代码后移。增加代码不理会和判断插入处代码的内容。当指定行大于最后一行行号时,在最后一行的后面插入。 Sub AddCode2() With ThisWorkbook.VBProject.VBComponents(模块1).CodeModule .InsertLines 1, sub aTest() .InsertLines 2, msgbox Hello .InsertLines 3, end sub End With End Sub 相关语句: (1)“模块1”中代码总行数: ThisWorkbook.VBProject.VBComponents(模块1).CodeModule.CountOfLines (2)“模块1”中代码公共声明部分的行数: ThisWorkbook.VBProject.VBComponents(模块1).CodeModule.CountOfDeclarationLines (3)显示“模块1”中第1行起的3行代码内容: Sub ShowCodes() Dim s$ s = ThisWorkbook.VBProject.VBComponents(模块1).CodeModule.Lines(1, 3) Debug.Print s End Sub (4)过程aTest的起始行数: ThisWorkbook.VBProject.VBComponents(模块1).CodeModule.ProcBodyLine(aTest, vbext_pk_Proc) ThisWorkbook.VBProject.VBComponents(模块1).CodeModule.ProcStartLine(aTest, 0) 系统常量vbext_pk_Proc=0 二者的区别是ProcBodyLine返回sub aTest或Function aTest所在的行号,如果sub前面有空行,ProcStartLine返回空行的行号。 (5)过程aTest的总行数: ThisWorkbook.VBProject.VBComponents(模块1).CodeModule.ProcCountLines(aTest, vbext_pk_Proc) 2.建立事件过程 建立事件过程除了使用上面的代码如下面的AddEventsCode1外,还可以使用CreateEventProc方法,如AddEventsCode2所示。 一般方法: Sub AddEventsCode1() ThisWorkbook.VBProject.VBComponents(ThisWorkbook).CodeModule.AddFromString _ Private Sub Workbook_Open() & Chr(13) & _ MsgBox Hello & Chr(13) & _ End Sub End Sub CreateEventProc方法: Sub AddEventsCode2() Dim i% With ThisWorkbook.VBProject.VBComponents(Sheet1).CodeModule i = .CreateEventProc(SelectionChange, Worksheet) + 1 .InsertLines i, Msgbox Hello End With End Sub 上面CreateEventProc的两个参数建立的事件过程为Worksheet_SelectionChange,分别是下划线两边的内容。 相关: 测试是否存在SelectionChange事件 下面函数测试模块modulname是否存在过程subname,如果存在,则返回起始行号,否则返回0。 debug.print hassub(Worksheet_SelectionChange,Sheet1) Function HasSub(ByVal subname As String, ByVal modulname As String) As Long On Error Resume Next Dim i& i = ThisWorkbook.VBProject.VBComponents(modulname).CodeModule.ProcBodyLine(subname, 0) If Err.Number = 35 Then Err.Clear HasSub = 0 Else HasSub = i End If End Function 如果存在,则返回起始行号,否则返回0。 四、删除代码 1删除Sheet1中第2行起的三行代码: 如果只删除1行代码,第二个参数可省略。 Sub DelCodes() ThisWorkbook.VBProject.VBComponents(Sheet1).CodeModule.DeleteLines 2, 3 End Sub 2删除“模块1”的所有代码: Sub DelCodes() With ThisWorkbook.VBProject.VBComponents(模块1).CodeModule .DeleteLines 1, .CountOfLines End With End Sub 3删除过程aTest: Sub DelCodes() With ThisWorkbook.VBProject.VBComponents(模块1).CodeModule .DeleteLines . ProcStartLine(aTest, 0), .ProcCountLines(aTest, 0) End With End Sub4将“模块1”的第5行代码替换为“x=3” ThisWorkbook.VBProject.VBComponents(模块1).CodeModule.ReplaceLine 5, x=3 五、引用项目 1增加引用 ThisWorkbook.VBProject.References.AddFromFile C:WindowsSystem32asctrls.ocx 2取消引用 ThisWorkbook.VBProject.References.Remove ThisWorkbook.VBProject.References(ASControls) 这里ASControls是引用的名字,即后面的rf.Name。 3显示当前所有引用 Sub ShowRefs() Dim rf As VBIDE.Reference For Each rf In ThisWorkbook.VBProject.References Debug.Print rf.Name, rf.FullPath Next End Sub 六、信任及密码 上面所有操作都基于这样的前题: (1)EXCEL已设置: 工具(T)-宏(M)-安全性(M)-可靠发行商(T)-勾选了“信任对于VB项目的访问(V)” (2)工程没有设置密码 如果不能满足它们中的任何一个,代码运行就会出错。因为微软不希望我们对VBProject进行操作,我们无从知道这种操作的直接方法被藏到了什么地方。幸运的是,微软在关起正门的同时,还是为我们留了一道门:SendKeys。借助于这道后门和“错误陷阱”,我们仍可以完成我们所要做的事。 下面给出绕开这两道门的示意代码,如果你要运行它们,请记得切回EXCEL主界面,而不是在VBE中直接运行。 1信任对于VB项目的访问 Sub SetAllowableVbe() On Error Resume Next Dim Chgset As Boolean 陷阱测试,VBProject.Protection在这儿并无实际的意义 Debug.Print ThisWorkbook.VBProject.Protection If Err.Number = 1004 Then Err.Clear Application.SendKeys %TMS%T%VENTER Chgset = True DoEvents End If 要执行的操作. . 操作完成后还原操作前的状态 If Chgset Then Application.SendKeys %TMS%T%VENTER End Sub 2操作密码工程 Sub AllowPass() Dim pw$ pw = Password If ThisWorkbook.VBProject.Protection
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年射线RT无损检测员初级面试练习题集
- 2025年VR交互设计师中级面试模拟题及答案
- 2025年安全生产安全文化建设练习题集
- 2025年农家乐厨师面试实战技巧与模拟试题
- 2025年安全生产法规知识测试题及答案库
- 2025年摄影测量员理论知识模拟题库中级
- 2025年旅游规划师职业潜力测评试卷及答案解析
- 2025年金融分析师综合能力测试题及答案解析
- 2025年驾驶员安全培训技能考核试题及答案解析
- 2025年环境科学与工程领域专业技术考试试卷及答案解析
- 2025新版企业员工劳动合同范本
- PCR实验室基因扩增检验人员培训试题及答案
- 2025年全国版图知识竞赛(中学组)历年参考题库含答案详解(5卷)
- 2025年西藏自治区三支一扶人员招募考试(公共基础知识)历年参考题库含答案详解(5卷)
- 护士长领导力提升与团队管理技巧
- 2025年富县辅警考试题库(附答案)
- 2026届张家港市达标名校中考语文模试卷含解析
- 保密观试题含答案2025年
- DB42T 1917.1-2022 中药材 水蛭(日本医蛭)养殖与加工技术规程 第1部分:种苗繁育
- 柏拉图教育思想体系解析
- 奶茶线上活动方案
评论
0/150
提交评论