《Excel VBA(工作效率倍增的实用技巧)(1).docx》由会员分享,可在线阅读,更多相关《Excel VBA(工作效率倍增的实用技巧)(1).docx(6页珍藏版)》请在第一文库网上搜索。
1、object.ProcCount1ines(procname,prockind)As1ong其中,参数ProCname为过程名的字符串;PrOCkind指定要定位的过程种类。3.编写代码“显示过程名”按钮的VBA代码如下:Sub显示过程名()DimoVBPAsVBIDE.VBProject,oVBCAsVBComponentDimoCMAsCodeModu1e,StrProcNameAsStringDimrAs1ong,r1As1ong,r2As1ongOnErrorResumeNextSetoVBP=ActiveWorkbook.VBProjectIfErrOOThenMsgBox当前安全设
2、置不允许运行本过程,请修改安全设置!,_VbCritica1+vbOKOn1y,警告OnErrorGoToOExitSubEndIfWithActiveSheetCo1umns(A:B).C1ear清除A、B两列的数据.RangeCA3:B3/Z)=Array(组件名称,过程名称)填充表头.Range(,zA3:B3z/).Font.Bo1d=Truer=3ForEachoVBCInoVBP.VBComponents循环处理每个组件SetoCM=oVBC.CodeModu1er1=oCM.CountOfDec1aration1ines+1跳过声明部分的代码r2=oCM.CountOf1ines
3、获取总的代码行数DoWhi1er1r2r=r+1.Ce11s(r,1)=oVBC.Name.Ce11s(r,2)=oCM.ProcOf1ine(r1,vbext_pk_Proc)当前行的过程名r1=r1+oCM.ProcCount1ines(oCM.ProcOf1ine_(r1,vbext_pk_Proc),vbext_pk_Proc)下一过程1oopNext.Co1umns(zzAiBzz).AutoFitEndWithEndSub例238导出VBA过程代码1案例说明打开本例工作簿,单击工作表中的“导出过程代码”按钮,将在当前工作表中显示各组件中的代码,每个过程显示在一行中,如图16-6所示
4、。1 导出过程代吗I2 13 组件名称过程名称具体代码Sub导出过程代码ODimoVBPAsVBIDE.VEProject,oVBCAsVBCoRponentDimOCHAsCodeModu1e,StrProcFaneAsStringDinrAs1ong,r1As1ong,r2As1ong,r3As1ongUnErrorResumeNextSetoVBP=Activeforkbook.VBProjectIfErrOOThenMSgBoX当前安防设署不允许运行本过程,话修改安全设;VbCritica1+VbOKOn1y,警告OnErrorGoToOExitSubEndIfSheet1Sheet2
5、Sheet3(?):,图16-6导出代码2 .关键技术本例代码与例237类似,除了获取各过程的名称外,还使用COdeMOdUIe对象的1ineS属性获取指定行区域的代码。1ineS属性的语法格式如下:object.1ines(start1ine,count)AsString该属性将返回代码模块中从start1ine行号开始的count行代码。提示:代码模块中的行号是从1开始的。3 .编写代码“导出过程代码”按钮的VBA代码如下:Sub导出过程代码()DimoVBPAsVBIDE.VBProject,oVBCAsVBComponentDimoCMAsCodeModu1e,StrProcNameA
6、sStringDimrAs1ong,r1As1ong,r2As1ong,r3As1ongOnErrorResumeNextSetoVBP=ActiveWorkbook.VBProjectIfErrOOThenMSgBoX当前安全设置不允许运行本过程,请修改安全设置!,VbCritica1+vbOKOn1y,警告OnErrorGoToOExitSubEndIfWithActiveSheet.Co1umns(/ZA:Cz).C1ear清除A、B两列的数据.Range(A3:C3)=Array(组件名称,过程名称,具体代码)填充表头.Range(,zA3:C3/Z).Font.Bo1d=Truer=
7、3ForEachoVBCTnoVBP.VBComponents循环处理每个组件SetoCM=oVBC.CodeModu1er1=oCM.CountOfDec1aration1ines+1跳过声明部分的代码r2=oCM.CountOf1ines获取总的代码行数DoWhi1er1Font.Bo1d-TrueForEachoRefInOVBP.References循环处理每个引用r=r+1.Ce11s(r,.Ce11s(r,.Ce11s(r,1)2)=oRef.Name引用名称-oRef.Description描述=ORef.Fu11Path保存位置Next.CO1UnInS(A:C).AutoFitEndWithEndSub