将列从一个excel复制到另一个并从python运行宏

时间:2016-07-13 04:06:52

标签: python excel vba excel-vba

我正在尝试将所有列从合并文件复制到摘要文件并从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表中运行宏时,它给出了下标超出范围的错误。请让我知道我哪里出错了

1 个答案:

答案 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语句定义了名为sourceColumntargetColumn的变量,但您的代码使用了未声明的不同变量。如果您没有使用Option Explicit,这通常是推荐的,但我想可以忽略这样的小型一次性宏,您不需要DIM变量。