OpenpyXL:运行时错误6溢出

时间:2017-07-05 16:00:24

标签: excel vba excel-vba openpyxl

我有一个程序利用openpyxl打开两个现有的Excel文件。一个是一个简单的工作表,其中包含需要复制到另一个文件的数据,这个工作簿包含许多工作表和使用此复制数据的VBA宏。但是,当VBA代码运行时,我得到运行时错误6溢出。奇怪的是,如果我手动将所有必需的单元格复制到工作簿中,那么宏运行顺利。但是当此过程自动化时,即使单元格中的值相同,也会弹出此错误。下面是将数据从一个工作表转录到另一个工作表的代码。

def transcribe_client_data_to_workbooks():
    _active_sheet_index = 5
    for client in set(cdict.values()):
        report_path = r'C:\Program Files\Notepad++\reports' + '\\' + 
        string.replace(client,'/','-') + '_report.csv'
        wb = openpyxl.load_workbook('Bucket-Asset Allocation Model.xlsm', 
             read_only = False, keep_vba = True)
        ws = wb.active
        with open(report_path, 'rU') as f:
            reader = csv.reader(f)
            for row_index, row in enumerate(reader):
                for column_index, cell in enumerate(row):
                    column_letter = get_column_letter((column_index+1))
                    ws[column_letter+str(row_index+1)] = cell
            f.close()
        wb.save('C:\\Program Files\\Notepad++\\workbooks\\' + 
        string.replace(client,'/','-') + '_workbook.xlsm')

我不明白为什么在自动复制此数据时会收到此错误消息,但在我手动复制/粘贴时则不会。我在每次迭代时打开相同的工作簿模板,然后在复制适当的数据后将其另存为新模板。作为参考,这是发生错误的VBA代码部分。

Do Until Sheets("Raw Data").Cells(crow, 1).Value = Empty
                aNumber = Sheets("Raw Data").Cells(crow, 1).Value
                ticker = Sheets("Raw Data").Cells(crow, 9).Value
                security = Sheets("Raw Data").Cells(crow, 8).Value
                mValue = Sheets("Raw Data").Cells(crow, 12).Value
                bAmt = Sheets("Raw Data").Cells(crow, 18).Value
                uGain = Sheets("Raw Data").Cells(crow, 20).Value
                    Do Until Sheets("Accounts").Cells(acrow, 1).Value = aNumber
                    acrow = acrow + 1
                    Loop

具体地说,它发生在增加acrow的行上: acrow = acrow + 1 我尝试将acrow从整数更改为long,但这只会导致程序无限期运行,直到我单击或取消它,此时我收到运行时错误'1004',应用程序定义或对象定义错误,直接在acrow增量之前的行。

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

John Coleman对溢出的位置是正确的。问题是我将aNumber写为字符串,而aNumber在VBA中声明为Variant类型,根据文档可以表示除固定长度字符串以外的任何内容。我只是改变了我的策略并将帐号编写成整数来解决问题。