• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:特定のレポートだけをメールの添付ファイルとして送信)

Access2003のフォームで特定のレポートをメールの添付ファイルとして送信する方法

このQ&Aのポイント
  • Access2003のフォームでボタンをクリックすると特定のレポートだけをメールの添付ファイルとして送信する方法について教えてください。
  • 現在、フォーム上に表示されている受験番号の人だけをレポートから抽出してメールに添付する方法を知りたいです。
  • メールが起動されなくなる問題を解決するために、プログラムの修正方法を教えてください。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

新しく書き直したか、新規にファイルを 作ったのかが不明ですが、 >下記プログラムを記述しました。 で、記述漏れのある関数なりプロシージャが あるか、その関数名が違っている、という 可能性があると思いますが。 たとえば、 Public Sub SetFilter(rpt As Report) With rpt .Filter = "[受験番号]=" & Forms!F_社員情報!受験番号 .FilterOn = True End With End Sub というプロシージャは標準モジュールに 設定されていますか。 それと、 >Private Function IsLoaded(strName As String) _ >As Boolean >IsLoaded = (SysCmd(acSysCmdGetObjectState, acForm, strName) <> 0) >End Function はPrivateになっていますが、もし標準モジュールに おくならば、Public あるいは、単に Function IsLoaded(strName As String) As Boolean とするようにします。 また、IsLoadedを以下のような使い方をする場合は、 Private Sub report_open(cancel As Integer) If CurrentProject.AllForms("F_社員情報").IsLoaded Then SetFilter Reports!R結果情報 End If End Sub >Private Function IsLoaded(strName As String) _ >As Boolean >IsLoaded = (SysCmd(acSysCmdGetObjectState, acForm, strName) <> 0) >End Function というプロシージャは標準モジュールに登録する 必要はありません。これはAccess2003では CurrentProjectオブジェクトに設定してある IsLoadedプロパティでフォームが開いているか 確認できるからです。この場合のIsLoadedは Access2003に登録されているプロパティです。 もし、 >If CurrentProject.AllForms("F_社員情報").IsLoaded Then を If IsLaoded("F_社員情報") Then のような使い方をするならば標準モジュールに 設定が必要になります。この場合のIsLoaded はユーザ定義関数と言って、Accessが標準で 搭載しているものではないということです。 名称が同じIsLoadedで間違いやすいのですが、 >Function IsLoaded(strName As String) _ >As Boolean >IsLoaded = (SysCmd(acSysCmdGetObjectState, acForm, strName) <> 0) >End Function を Function myIsLoaded(strName As String) _ As Boolean myIsLoaded = (SysCmd(acSysCmdGetObjectState, acForm, strName) <> 0) End Function のようにIsLoadedをmyIsLoadedに変更して 使ってみるとよくわかります。 その場合は、 If myIsLaoded("F_社員情報") Then のような使い方をします。

yukirin5_2006
質問者

補足

piroin654様 これは、新規のファイルから作りました。 そして、標準モジュールには何もないです。 クラスモジュール?(見た所アイコンがクラスモジュールと同じでした。) 設定した方法は、フォームの送信ボタンのプロパティシートのイベントからコードを選んで設定しました。 Option Compare Database Private Sub メール送信_Click() Public Sub SetFilter(rpt As Report) の部分はフォームのモジュールに書かれています。 これだけの場合は、【メール送信】ボタンをクリックするとメールが起動し全ての社員のレポートの内容がPDFに変換され添付されます。 続いて、レポートのクラスモジュールに記述されている内容が・・・ Option Compare Database Option Explicit --------------------------------------------------------------- Private Sub report_open(cancel As Integer) If CurrentProject.AllForms("F_社員情報").IsLoaded Then SetFilter Reports!R結果情報 End If End Sub --------------------------------------------------------------- Private Function IsLoaded(strName As String) _ As Boolean IsLoaded = (SysCmd(acSysCmdGetObjectState, acForm, strName) <> 0) End Function --------------------------------------------------------------- 上記3点です。 Private Sub report_open(cancel As Integer)を記述すると 【メール送信】ボタンをクリックしてもエラーも出なければ、メールも起動されなくなります。 記述する場所も関係するのですね・・・ お手数をお掛け致しますがよろしくご教授お願いいたします。 宜しくお願いいたします。

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

フォームにある Public Sub SetFilter(rpt As Report) With rpt .Filter = "[受験番号]=" & Forms!F_社員情報!受験番号 .FilterOn = True End With End Sub を標準モジュールに設定してください。フォームのほうは 削除してください。これで一度確かめてみてください。

yukirin5_2006
質問者

お礼

piroin654様 いつもありがとうございました。 一つ一つ前回教えて頂いたのと何が違うか検証した結果 データ型が違う事が判明いたしました。 データ型を変更したら出来ました。 ありがとうございました。

yukirin5_2006
質問者

補足

piroin654様 ありがとうございます。 やってみましたが、メールが起動されませんでした。 標準モジュールを追加し、上記のプログラムを移動してみましたが出来ませんでした。 この設定プラス以前教えていただいたレポートの記述を Function myIsLoaded(strName As String) _ As Boolean myIsLoaded = (SysCmd(acSysCmdGetObjectState, acForm, strName) <> 0) End Function にも変更してやってみましたが駄目でした。 他に何か良い方法がございましたらご指導のほど宜しくお願いいたします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

最初に伺うことが抜けていました。 エラーが出たとき、デバッグを 選択するとどこにカーソルが あたりますか?

yukirin5_2006
質問者

補足

piroin654様 フォームの送信ボタンをクリックすると、特にエラーは出ません。 一応、レポートが開かれているような画面がでますがすぐに消えてしまいます。 フォームを開いた状態で、レポートをダブルクリックすると Private Sub report_open(cancel As Integer) If CurrentProject.AllForms("F_受験者データ").IsLoaded Then SetFilter Reports!R結果通知票 End If End Sub のPrivate Sub report_open(cancel As Integer) が黄色くなります。そして、SetFilter が選択されます。 宜しくお願いいたします。

関連するQ&A