2017-07-05 9 views
0

2つの既存のExcelファイルを開くopenpyxlを利用したプログラムがあります。 1つは、多数のワークシートを含むワークブックと、このコピーされたデータを使用するVBAマクロを含む、別のファイルにコピーする必要のあるデータを含む単純なワークシートです。しかし、VBAコードが実行されると、ランタイムエラー6のオーバーフローが発生します。奇妙なことは、必要なすべてのセルをワークブックに手動でコピーすると、マクロが問題なく実行されるということです。しかし、このプロセスを自動化すると、セルの値が同じであっても、このエラーがポップアップします。以下は、あるワークシートから別のワークシートへデータを転記するコードです。OpenpyXL:ランタイムエラー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 + 1 acrow私は長いの整数からacrowを変更しようとしたが、私はそれをクリックするか、またはキャンセルされるまで、それはちょうど、プログラムが無期限に実行させますその時点で、acrowのインクリメントの直前の行にランタイムエラー '1004'、アプリケーション定義またはオブジェクト定義エラーが表示されます。

ありがとうございます、ありがとうございます!

+1

したがって、Pythonコードが実行されても例外はありません。 –

+0

全くありません。エラーを発生させることなく、コピー先のフォルダに新しい埋め込みワークブックを生成します。作成するワークブックは、追加データを除いてロードしたテンプレートと同じです。 keep_vbaをtrueに設定しましたが、ワークブックの一部の部分が保持されていない可能性がありますか? VBAコードがもっと必要な場合は教えてください。 –

+0

さらに、ワークブックのテンプレートは488 KBであるのに対して、塗りつぶされたコピーは〜180 KBであることに気がつきました。すべてのマクロが保存されているように見えますが、これはテンプレートをロードして再保存するときに重要な機能が失われていることを示していますか? –

答えて

0

John Colemanは、オーバーフローの位置について正しいものでした。問題は、文字列としてaNumberを記述していて、aNumberがVariant型としてVBAで宣言されていたことです。ドキュメントによれば、固定長の文字列以外を表すことができます。私は単に戦略を変え、アカウント番号を整数として書いて問題を解決しました。

関連する問題