• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AccessのフォームをExcelに出力)

AccessのフォームをExcelに出力

このQ&Aのポイント
  • AccessのフォームをExcelに出力するためのVBAコードに関して、Access2007で発生するエラーについての解決方法を教えてください。
  • また、クエリから抽出して保存する方法ではなく、フォームの表示結果を直接Excelに出力する方法を提案してください。
  • WindowsXPとOffice2007でエラーが発生する理由やその対策についても教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> PCの何か設定?と考えたりもしたのですが、はっきりとした原因がわからないのでは、 > 他の人にDBを使っていただけないので、エラーにならないVBAでいきたいです。 こちらのOSはWinXPのみなので、そちらでの全ての状況を確認できたわけでは ありませんが、対処法は(多分)見つかりましたのでご報告します。 【対処方法】 現状のコードを以下のように修正します(OutputToメソッドで対応可)。 <現状> DoCmd.OutputTo acOutputForm, "フォーム1", acSpreadsheetTypeExcel9 (「WinXP&Acc2003」で出力可、「WinXP&Acc2007」で出力不可を確認) <修正> DoCmd.OutputTo acOutputForm, "フォーム1", acOutputXls (「WinXP&Acc2003」、「WinXP&Acc2007」ともに出力可を確認) 【説明】 VBE画面で「OutputTo」のところにカーソルを移動した状態でF1キーを押すと、 対応するヘルプが表示されるので確認されることをお勧めしますが、このメソッドの 第3引数(OutputFormat)には、「AcFormat」クラスの定数(→「acFormat~」で 始まる形になっています)を指定することになっています。 ・・・なのにAcc2003だと、本来「TransferSpreadsheet」メソッドで使用するはずの 「AcSpreadsheetType」クラスに属するacSpreadsheetTypExcel9を指定しても、 エラーにならずに出力できてしまうようです。 一方、Acc2007では、これが厳密に適用されるようになったため、提示されたコード では、「現在出力しようとしているオブジェクトの形式は無効です」とのエラーが発生 するようになったものと推測されます。 ・・・従って、上記の修正は、「本来Acc2003のOutputToでも使用されるべき 引数の型」を指定しただけ、ということになりますので、OS・Applicationの違いに 関係なく、エラーは発生しなくなるものと思います。 (なまじAcc2003で柔軟に対応されてしまったために、Acc2007への移行で余計な  混乱を招かれてしまった、ということかと・・・(汗)) ※TransferSpreadsheetメソッドの件は、元々OutputToメソッドの代替策として   検討されたものと思いますので、省略します。   (フォームの出力には対応していないので、強引にやるなら一時テーブルを   作成してデータをコピーして・・・といったことになり、煩雑ですので)

usatti
質問者

お礼

大変参考になりました。上記の方法で解決できました。 とても詳しく解説して下さり、わかりやすくて、大変助かりました。ありがとうございました。

関連するQ&A