首先,你的EXCEL必须手工打开VBPROJECT的信任选项(这个不能用代码打开,为了安全性考虑,也就是所谓病毒之类的问题,由用户打开,就是用户自已已经确定了“我知道有这么回事”) 选工具-宏-安全性,然后选择“信任对于VISUAL BASIC项目的访问”(默认是未选定的,你要确定) 有了上面的选项,就可以“用代码生成代码”,事实上是用代码控制EXCEL的VBA PROJECT对象 set x=workbooks("工作簿名").VBProject.VBComponents("thisworkbook") x.CodeModule.AddFromString "dim a as string" 上面第一句,X是取得对应工作簿的那个模块,你要thisworkbook,我就这么演示了,不过,有例外的情况,你注意一下,虽然thisworkbook是默认的名字,如果这个名字被改掉,这行代码就找不到对应的模块——当然工作簿本身是第1个模块,你可以改成这样 set x=workbooks("工作簿名").VBProject.VBComponents(1)
但其它的情况,例如取SHEET1、SHEET2,你要自已研究,我不能一一帮你分析 第二行代码是写入,模块对象(VBCOMPONENTS)只能用于导入、导出,如果要写入代码,要取得它对应的CODEMODULE对象才可以 CODEMODULE对象可以用AddFromFile和AddFromString方法添加代码,上面我用了AddFromString加入一行声明 L=某模块.CodeModule.CountOfLines '这个属性是取得代码总行数 strMYCODE=某模块.CodeModule.Lines(1,L) '根据总行数,取得本模块所有代码(字符串) 用以上两行,你可以得到指定模块对象的所有代码字符串 最后,让你看一下这个增殖的程序,你可以把它放到某个工作簿的按键上 其中黑体部分注意一下,它只复制第1个工作簿的THISWORKBOOK模块代码,如果你要改进,必须指明名字,比如你的工作簿是EXCELHOME.XLS,自已填上 代码的效果是,每运行一次,生成一个NEW BOOK,NEWBOOK的THISWORKBOOK上会有同样的代码 但不要认为这是病毒...当然你一定要这么想也没办法。在技术安全性上,这与病毒区别很大,安全性、应用和代码复制的实用性,本身的平衡是要考量的,为什么在OFFICE97以后要进行宏的运行限制,为什么要进行数字签名,这比起“代码控制下复制代码”,安全性是更重要的 Sub addcode() Set x = Workbooks(1).VBProject.VBComponents(1) L = x.CodeModule.CountOfLines strmycode = x.CodeModule.Lines(1, L) Set x = Workbooks.Add.VBProject.VBComponents(1) Set myCM = x.CodeModule myCM.AddFromString strmycode End Sub |