- ベストアンサー
サブフォームのデータを「OfficeLink→Excelに出力」したい
フォームにサブフォームを設置しデータシートビューにしているのですが その状態で OfficeLink→Excelに出力をしても 新たなブックができあがり、フォーム1と言う名のシートができあがりますが データは空です。 親フォームを立ち上げないで サブフォームのみ開き OfficeLink→Excelをすると ちゃんとデータが表示されます。 親フォームを開いた状態のまま サブフォームのデータを OfficeLink→Excelに出力 するにはどうすればいいでしょうか? よろしくお願いします。
- みんなの回答 (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 ・・・以上、参考まで。
お礼
「DoCmd.OutputTo acForm, "SF1", "MicrosoftExcelBiff8(*.xls)", , True」 このコードでできました!ありがとうございます。