我一直在使用下面的代码将VBA模块从一个工作簿压缩到另一个工作簿,我不知道是否有更简单的方法,但它们一直工作正常:
Set srcVba = srcWbk.VBProject
Set srcModule = srcVba.VBComponents(moduleName)
srcModule.Export (path) 'Export from source
trgtVba.VBComponents.Remove VBComponent:=trgtVba.VBComponents.Item(moduleName) 'Remove from target
trgtVba.VBComponents.Import (path) 'Import to target
但是现在我需要复制Sheet中的VBA代码,而不是模块中的VBA代码 . 上述方法不适用于该场景 .
我可以使用什么代码将工作表中的VBA代码从一个工作簿复制到另一个工作簿?
4 回答
您无法删除并重新导入
VBComponent
,因为这会从逻辑上删除整个工作表 . 相反,您必须使用CodeModule
来操作组件中的文本:如果有人在这里寻找VSTO相当于Chel的答案,这里是:
注意事项:
您必须添加对 Microsoft.Vbe.Interop 的引用才能执行此操作 .
我需要调用
DeleteLines
. 因人而异 .Patrick的代码不适用于Worksheets(事实上,它会将代码传输到错误的模块) . 解决方法是在目标工作簿中创建新工作表,然后复制代码(也可以复制并粘贴工作表数据/函数/格式) .
另一件不起作用的是UserForms . 您可以复制代码,但我不知道如何在不使用导出/导入方法的情况下复制实际表单(包括所有控件) .
扩展Patrick的代码:
这是来自不同来源的编译代码以及这一个帖子 . 我的贡献是将所有代码从VBE(Sheets / Thisworkbook / Userforms / Modules / Classes)复制到新工作簿的代码 .
我创建了这个,因为我有一个损坏的工作簿,并制作代码来恢复所有没有损坏的代码,包括代码 . (此部分仅恢复代码引用):