アプリ版:「スタンプのみでお礼する」機能のリリースについて

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


よろしくお願いします。

A 回答 (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 …

もうひとつの方法としては、Excelの「CopyFromRecordset」を使用するというものです。
上と違って「レコードの移動」はしないので効率的ですが、大きな問題がひとつ・・・
以下が参考になりますが、説明されているのは「ExcelからAccessのデータを読み込む」
形となっていますので、「AccessからExcelを開いて、CopyFromRecordsetを実行」と
いう形にコードを修正してやる必要があります(汗):
http://support.microsoft.com/kb/246335/ja


・・・以上、参考まで。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/17 12:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!