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

时间:2014-07-11 15:38:15

标签: excel vba excel-vba

好的,这就是我想要实现的目标:我正在尝试复制来自" Sheet2"的所有VBA代码。到"表3"代码窗格。我并不是指将模块从一个模块复制到另一个模块,而是指excel工作表对象代码。

我已经添加了对MS VB for Applications Extensibility 5.3的引用

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

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

2 个答案:

答案 0 :(得分:10)

使用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

除了添加对“参考MS VB for Applications Extensibility 5.3 ”的引用之外

您还需要enable programmatic access到VBA项目。

  

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

答案 1 :(得分:2)

谢谢大家!在测试了上面的多个建议后,其中“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