我有一个要复制在同一工作簿上的带有VBA代码的工作表(在Excel上,右键单击工作表名称并查看代码)。
使用workbook.copy_worksheet()
时,工作表中包含的VBA代码丢失。
我看过worksheet.vba_code
属性,但它似乎仅包含某些工作表属性,而不包含VBA代码。
答案 0 :(得分:1)
我认为问题在于工作表本身不包含任何VBA代码。它作为Blob存储在XLSX包中,并且很可能包含对特定工作表的硬编码引用。不幸的是,OOXML规范未涵盖VBA斑点,因此没有办法知道。如果您手动复制vba_code属性,您可能可以,但是不能保证,Excel可能会抱怨该文件。
答案 1 :(得分:0)
我发现的解决方法是将VBA代码添加到工作簿本身,该工作簿彼此从工作表中复制VBA代码。
我在工作簿的VBA代码中添加了此代码:
Private Sub Workbook_Open()
Dim CodeCopy As Object
Dim CodePaste As Object
Dim numLines As Integer
Dim sheetNumber As Integer
Set CodeCopy = ActiveWorkbook.VBProject.VBComponents(Worksheets(1).CodeName).CodeModule
For sheetNumber = 2 To Worksheets.Count
Set CodePaste = ActiveWorkbook.VBProject.VBComponents(Worksheets(sheetNumber).CodeName).CodeModule
numLines = CodeCopy.CountOfLines
If CodePaste.CountOfLines > 1 Then
CodePaste.DeleteLines 1, CodePaste.CountOfLines
End If
CodePaste.AddFromString CodeCopy.Lines(1, numLines)
Next
End Sub