好的,这就是我想要实现的目标:我正在尝试复制来自" 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
答案 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(WorkSheets(b).CodeName).CodeModule
如果您已将目标工作表设置为对象:
Dim T As Worksheet
Set T = Worksheets("Test")
然后你只需要:
Set CodePaste = ActiveWorkbook.VBProject.VBComponents(Worksheets(T.Name).CodeName).CodeModule