繁体   English   中英

使用 VBA 代码将 VBA 代码从一个工作表复制到另一个工作表

[英]Copy VBA code from one Worksheet to another using VBA code

好的,这就是我想要完成的:我试图将所有 VBA 代码从“Sheet2”复制到“Sheet 3”代码窗格。 我不是指从一个模块复制到另一个模块,而是 Excel 表对象代码。

我已经为应用程序扩展性 5.3 添加了对 MS VB 的引用

我不知道从哪里开始,但这是我的开始,它不会去任何地方,而且可能都是错误的。 请帮助 - 只想以编程方式将工作表 vba 代码复制到另一个工作表 vba 窗格。

Dim CodeCopy As VBIDE.CodePane
Set CodeCopy = ActiveWorkbook.VBProject.VBComponents("Sheet2").VBE
ActiveWorkbook.VBProject.VBComponenets("Sheet3").CodeModule = CodeCopy

使用CodeModule对象而不是CodePane ,然后您可以创建第二个变量来表示目标模块(您将在其中“粘贴”代码)。

Sub test()

Dim CodeCopy As VBIDE.CodeModule
Dim CodePaste As VBIDE.CodeModule
Dim numLines As Integer

Set CodeCopy = ActiveWorkbook.VBProject.VBComponents("Sheet2").CodeModule
Set CodePaste = ActiveWorkbook.VBProject.VBComponents("Sheet3").CodeModule

numLines = CodeCopy.CountOfLines
'Use this line to erase all code that might already be in sheet3:
'If CodePaste.CountOfLines > 1 Then CodePaste.DeleteLines 1, CodePaste.CountOfLines

CodePaste.AddFromString CodeCopy.Lines(1, numLines)
End Sub

除了添加对“ Reference to MS VB for Applications Extensibility 5.3 ”的引用外

您还需要启用对 VBA 项目的编程访问

在 Excel 2007+ 中,单击主功能区上的开发人员项,然后单击代码面板中的宏安全项。 在该对话框中,选择宏设置并检查对 VBA 项目对象模型的信任访问。

谢谢你们! 在测试上述多个建议后,其中“b”是工作表名称,您必须使用.CodeName ,而不是.Name

Set CodePaste = ActiveWorkbook.VBProject.VBComponents(WorkShe‌ets(b).CodeName).Cod‌​eModule

如果您已将目标工作表设置为对象:

Dim T As Worksheet  
Set T = Worksheets("Test")  

那么你只需要:

Set CodePaste = ActiveWorkbook.VBProject.VBComponents(Worksheets(T.Name).CodeName).Cod‌​eModule

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM