質問: Access2007でマクロを使ってExcel2007のファイル(xlsx)形式へエキスポートします。その際、 ・「ワークシート変換」を指定 ・ワークシートの種類に「Excel Work book」 ・出力ファイルパスに「(絶対パス)\(ファイル名).xlsx」 としました。 既にAccess2007のテーブルには、65535行を超える200000行のレコードが入っていることが確認できてます。 マクロを実行すると、「指定範囲を広げることができません」とダイアログが出てしまい、マクロが中断し、異常終了してしまいます。 windowsXP SP2 pentium4を使用。 異常終了せず、全レコードをファイルにエキスポートする方法はありませんか? 宜しくおねがいいたします。
回答: > 「指定範囲を広げることができません」とダイアログが出てしまい、マクロが中断し、 > 異常終了してしまいます。 ここで言われている『異常終了』というのは、「以降のマクロが一切処理されなかった」 という意味でよろしいでしょうか。 (Accessアプリケーションが落ちた、といったことではなく、と) それでよろしければ、多分こちらで現象を再現できました。 指定したファイルに、既に同名のワークシートが(そしてそこにデータが)存在するために、 ご質問のエラーになったものと思われます。 上記ダイアログで『Ok』ボタンの右隣に出たはずの『ヘルプ』ボタンを押すと、以下の 文が表示されます: > 指定範囲を広げることはできません。(エラー3434) > Microsoft Excel Version 5.0 の指定範囲に行を追加する際、値が入っているセルを > 検出しました。追加処理によりこのようなセルを上書きすることはできません。 ・・・少なくともAccess2003の『ワークシート変換』では、出力しようとしたワークシートが 既存のものとかぶる場合は上書きされていたはずなのですが、Access2007ではその辺り の仕様が変わってしまったようです。 従って、解決策としては、出力しようとしているxlsxファイルから、当該シートを予め削除 しておく、ということになるかと思います。 (VBAなら自動化できますがマクロでは無理なので、手作業になってしまいますが(汗)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ No.1の方の回答について: マクロの『ワークシート変換』は、VBAの『DoCmd.TransferSpreadsheet』と(ほぼ) 同じものです(前者を、Accessの「VBAに変換」機能を通すと、後者に変換される)。 で、回答中の「acSpreadsheetTypeExcel12」は、「Excel Binary Workbook」を 指定する定数ですので、出力ファイルは指定された「xlsb」ファイル(Excel バイナリ ワーク シート形式)で出力されるため、拡張子が「xlsx」だとエラーになってしまいます。 TransferSpreadsheetで「Excelワークシート形式」(拡張子xlsx)を出力する場合は、 「acSpreadsheetTypeExcel12xml」を指定します。