• ベストアンサー

サブフォームのデータを「OfficeLink→Excelに出力」したい

フォームにサブフォームを設置しデータシートビューにしているのですが その状態で OfficeLink→Excelに出力をしても 新たなブックができあがり、フォーム1と言う名のシートができあがりますが データは空です。 親フォームを立ち上げないで サブフォームのみ開き OfficeLink→Excelをすると ちゃんとデータが表示されます。 親フォームを開いた状態のまま サブフォームのデータを OfficeLink→Excelに出力 するにはどうすればいいでしょうか? よろしくお願いします。

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

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

サブフォームの場合、  「ツール(T)→Office Links(L)→Microsoft Office Excelに出力(A)」  「ファイル(F)→エクスポート(E)」で『ファイルの種類』に「Microsoft Excel ~」指定 のどちらについても、出力の対象に指定することはできないようです。 ですので、フォーム上に出力用のボタンを設置するなどして、マクロかVBAで対応する しかないかと思います。 なお、マクロ/VBAで対応する場合も、  フォームとサブフォームの間にリンク親/子フィールドが設定されているか  サブフォームでフィルタをかけた場合にそれを反映するか によって、難易度が大きく変わってきます。 以下に、最も簡単な場合の「説明」と、最も難しい場合の「紹介」をします。 【リンクフィールドはなく、フィルタの反映も不要な場合】 マクロなら「出力」アクションを、VBAなら「DoCmd.OutputTo」をそれぞれ使用して、 サブフォームをExcelに出力します。  <マクロ>   アクション:「出力」     オブジェクトの種類: 「フォーム」     オブジェクト名: 「SF1」     出力ファイル形式: Microsoft Excel 97-2003 (*.xls)     自動起動: 「はい」   ※サブフォームの『ソースオブジェクト』(表示用のフォーム)が「SF1」の場合。  <VBA>   DoCmd.OutputTo acForm, "SF1", "MicrosoftExcelBiff8(*.xls)", , True   ※上記のマクロを作成・保存後、データベースウィンドウでそのマクロが選択(反転    表示)された状態で、メニューから「ツール(T)→マクロ(M)→マクロを Visual Basic    に変換(B)」を実行すると、上記のVBAが自動で作成されるので、参考まで。 注:「出力/OutputTo」は、Accessのバージョンによっては、16000行程度までしか   出力されないため、注意が必要です。   Excel2000~Excel2003の最大行数まで出力する場合は、マクロなら「ワーク   シート変換」アクションを、VBAなら「DoCmd.TransferSpreadsheet」を使用   してください。 【リンクフィールドがあるか、フィルタの反映が必要な場合】 こちらはかなり面倒なので、イメージの紹介だけですが・・・(汗) ひとつは、サブフォームで現在表示しているレコードを1件ずつExcelのセルに転記、 という方法です。 (マクロの場合はサブフォーム上で先頭レコードからレコード移動を繰り返す形、  VBAではDAOかADOのRecordsetを使用して同様に先頭から移動を繰り返す) こちらのサイトが参考になります: http://www.nurs.or.jp/~ppoy/access/access/acF019.html もうひとつの方法としては、Excelの「CopyFromRecordset」を使用するというものです。 上と違って「レコードの移動」はしないので効率的ですが、大きな問題がひとつ・・・ 以下が参考になりますが、説明されているのは「ExcelからAccessのデータを読み込む」 形となっていますので、「AccessからExcelを開いて、CopyFromRecordsetを実行」と いう形にコードを修正してやる必要があります(汗): http://support.microsoft.com/kb/246335/ja ・・・以上、参考まで。

1hdthd
質問者

お礼

「DoCmd.OutputTo acForm, "SF1", "MicrosoftExcelBiff8(*.xls)", , True」 このコードでできました!ありがとうございます。

関連するQ&A

専門家に質問してみよう