我正在尝试将所有列从合并文件复制到摘要文件并从python运行excel宏,摘要文件包含从A到BB的列,我想只复制到AI,我尝试了下面的代码但是它的不给我任何结果
wbpath = 'C:\\Users\\Summary.xlsb'
excel = Dispatch("Excel.Application")
workbook = excel.Workbooks.Open(wbpath)
strcode = \
'''
Sub MacroCopy()
'
' MacroCopy Macro
'
'
Dim sourceColumn As Range, targetColumn As Range
Set sColumn = Workbooks("C:\\Users\\Consolidated.xlsx").Worksheets(1).Columns("A:AI")
Set tColumn = Workbooks("C:\\Users\\Summary.xlsb").Worksheets(2).Columns("A2")
sColumn.Copy Destination:=tColumn
End Sub
'''
excelModule = workbook.VBProject.VBComponents.Add(1)
excelModule.CodeModule.AddFromString(strcode.strip())
excel.Workbooks(1).Close(SaveChanges=1)
excel.Application.Quit()
当我在excel表中运行宏时,它给出了下标超出范围的错误。请让我知道我哪里出错了
答案 0 :(得分:0)
您的VBA代码中存在许多错误。首先
Set tColumn = Workbooks("C:\\Users\\Summary.xlsb").Worksheets(2).Columns("A2")
无效,因为A2
是单元格引用,而不是列引用。但是,您无法将整个列从一个工作表复制到另一个工作表的第2行,因为目标工作表上没有足够的行。您可以执行以下操作之一:
Set sColumn = Workbooks("C:\\Users\\Consolidated.xlsx").Worksheets(1).Columns("A:AI")
Set tColumn = Workbooks("C:\\Users\\Summary.xlsb").Worksheets(2).Range("A1")
sColumn.Copy Destination:=tColumn
将源表的整个列A:AI
粘贴到目标表的相应列中,或者:
Set sColumn = Workbooks("C:\\Users\\Consolidated.xlsx").Worksheets(1).Range("A1:AI1048575")
Set tColumn = Workbooks("C:\\Users\\Summary.xlsb").Worksheets(2).Range("A2")
sColumn.Copy Destination:=tColumn
将复制粘贴到目标行2时实际适合的源表格中的最大范围 - 因为Excel 2007或更高版本的工作表最多包含1048576行。
最后,您的DIM
语句定义了名为sourceColumn
和targetColumn
的变量,但您的代码使用了未声明的不同变量。如果您没有使用Option Explicit
,这通常是推荐的,但我想可以忽略这样的小型一次性宏,您不需要DIM
变量。