VBProject代码操作代码之常用语句

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一、增加模块1.增加一个模块,命名为“我的模块”ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule).Name=我的模块系统常量vbext_ct_StdModule=12.增加一个类模块,命名为“我的类”ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_ClassModule).Name=我的类vbext_ct_ClassModule=23.增加一个窗体,命名为“我的窗体”ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm).Name=我的窗体vbext_ct_MSForm=3二、删除模块1.删除“模块1”ThisWorkbook.VBProject.VBComponents.RemovehisWorkbook.VBProject.VBComponents(模块1)2.删除窗体“UserForm1”ThisWorkbook.VBProject.VBComponents.RemoveThisWorkbook.VBProject.VBComponents(UserForm1)3.删除类模块“类1”ThisWorkbook.VBProject.VBComponents.RemoveThisWorkbook.VBProject.VBComponents(类1)4.删除所有的窗体SubRmvForms()DimvbCmpAsVBComponentForEachvbCmpInThisWorkbook.VBProject.VBComponentsIfvbCmp.Type=vbext_ct_MSFormThenThisWorkbook.VBProject.VBComponents.RemovevbCmpNextvbCmpEndSub相关:工作表和ThisWorkbook的模块类型为vbext_ct_Document=100三、增加代码1.在“模块1”中插入代码如果需要在“Sheet1”、“Thisworkbook”、或“Userform1”中操作,用只需将下面的“模块1”换成相应的名称即可。方法1:在模块的开始增加代码,增加的代码放在公共声明option,全局变量等后面。SubAddCode1()ThisWorkbook.VBProject.VBComponents(模块1).CodeModule.AddFromString_subaTest()&Chr(10)&_msgboxHello&Chr(10)&_endsubEndSub方法2:在模块指定行处增加代码,原代码后移。增加代码不理会和判断插入处代码的内容。当指定行大于最后一行行号时,在最后一行的后面插入。SubAddCode2()WithThisWorkbook.VBProject.VBComponents(模块1).CodeModule.InsertLines1,subaTest().InsertLines2,msgboxHello.InsertLines3,endsubEndWithEndSub相关语句:(1)“模块1”中代码总行数:ThisWorkbook.VBProject.VBComponents(模块1).CodeModule.CountOfLines(2)“模块1”中代码公共声明部分的行数:ThisWorkbook.VBProject.VBComponents(模块1).CodeModule.CountOfDeclarationLines(3)显示“模块1”中第1行起的3行代码内容:SubShowCodes()Dims$s=ThisWorkbook.VBProject.VBComponents(模块1).CodeModule.Lines(1,3)Debug.PrintsEndSub(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返回subaTest或FunctionaTest所在的行号,如果sub前面有空行,ProcStartLine返回空行的行号。(5)过程aTest的总行数:ThisWorkbook.VBProject.VBComponents(模块1).CodeModule.ProcCountLines(aTest,vbext_pk_Proc)2.建立事件过程建立事件过程除了使用上面的代码如下面的AddEventsCode1外,还可以使用CreateEventProc方法,如AddEventsCode2所示。一般方法:SubAddEventsCode1()ThisWorkbook.VBProject.VBComponents(ThisWorkbook).CodeModule.AddFromString_PrivateSubWorkbook_Open()&Chr(13)&_MsgBoxHello&Chr(13)&_EndSubEndSubCreateEventProc方法:SubAddEventsCode2()Dimi%WithThisWorkbook.VBProject.VBComponents(Sheet1).CodeModulei=.CreateEventProc(SelectionChange,Worksheet)+1.InsertLinesi,MsgboxHelloEndWithEndSub上面CreateEventProc的两个参数建立的事件过程为Worksheet_SelectionChange,分别是下划线两边的内容。相关:测试是否存在SelectionChange事件下面函数测试模块modulname是否存在过程subname,如果存在,则返回起始行号,否则返回0。debug.printhassub(Worksheet_SelectionChange,Sheet1)FunctionHasSub(ByValsubnameAsString,ByValmodulnameAsString)AsLongOnErrorResumeNextDimi&i=ThisWorkbook.VBProject.VBComponents(modulname).CodeModule.ProcBodyLine(subname,0)IfErr.Number=35ThenErr.ClearHasSub=0ElseHasSub=iEndIfEndFunction如果存在,则返回起始行号,否则返回0。四、删除代码1.删除Sheet1中第2行起的三行代码:如果只删除1行代码,第二个参数可省略。SubDelCodes()ThisWorkbook.VBProject.VBComponents(Sheet1).CodeModule.DeleteLines2,3EndSub2.删除“模块1”的所有代码:SubDelCodes()WithThisWorkbook.VBProject.VBComponents(模块1).CodeModule.DeleteLines1,.CountOfLinesEndWithEndSub3.删除过程aTest:SubDelCodes()WithThisWorkbook.VBProject.VBComponents(模块1).CodeModule.DeleteLines.ProcStartLine(aTest,0),.ProcCountLines(aTest,0)EndWithEndSub4.将“模块1”的第5行代码替换为“x=3”ThisWorkbook.VBProject.VBComponents(模块1).CodeModule.ReplaceLine5,x=3五、引用项目1.增加引用ThisWorkbook.VBProject.References.AddFromFileC:\Windows\System32\asctrls.ocx2.取消引用ThisWorkbook.VBProject.References.RemoveThisWorkbook.VBProject.References(ASControls)这里ASControls是引用的名字,即后面的rf.Name。3.显示当前所有引用SubShowRefs()DimrfAsVBIDE.ReferenceForEachrfInThisWorkbook.VBProject.ReferencesDebug.Printrf.Name,rf.FullPathNextEndSub六、信任及密码上面所有操作都基于这样的前题:(1)EXCEL已设置:工具(T)-宏(M)-安全性(M)-可靠发行商(T)-勾选了“信任对于VB项目的访问(V)”(2)工程没有设置密码如果不能满足它们中的任何一个,代码运行就会出错。因为微软不希望我们对VBProject进行操作,我们无从知道这种操作的直接方法被藏到了什么地方。幸运的是,微软在关起正门的同时,还是为我们留了一道门:SendKeys。借助于这道后门和“错误陷阱”,我们仍可以完成我们所要做的事。下面给出绕开这两道门的示意代码,如果你要运行它们,请记得切回EXCEL主界面,而不是在VBE中直接运行。1.信任对于VB项目的访问SubSetAllowableVbe()OnErrorResumeNextDimChgsetAsBoolean'陷阱测试,VBProject.Protection在这儿并无实际的意义Debug.PrintThisWorkbook.VBProject.ProtectionIfErr.Number=1004ThenErr.ClearApplication.SendKeys%TMS%T%V{ENTER}Chgset=TrueDoEventsEndIf'要执行的操作....'.....'操作完成后还原操作前的状态IfChgsetThenApplication.SendKeys%TMS%T%V{ENTER}EndSub2.操作密码工程SubAllowPass()Dimpw$pw=PasswordIfThisWorkbook.VBProject.Protection=vbext_pp_lockedThenApplication.VBE.CommandBars(1).Controls(工具(T)).Controls(VBAProject属性(&E)...).ExecuteApplication.SendKeyspw&{ENTER}{ENTER}DoEventsEndIf'要执行的操作….'.....EndSubProtection属性返回工程的受保护状态,vbext_pp_locked(1)为受保护,vbext_pp_none(0)表示没有保护。

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功