Access2003のフォームでボタンをクリックすると特定のレポートだけをメールの添付ファイルとして送信したいです。
よろしくご教授ください。<(_ _)>
研修の受付フォームに送信ボタンを作りました。
ボタンをクリックするとメールソフトが起動されPDF添付ファイルとして添付されるのですが
フォームと同じ社員番号だけ添付したいのです。
状況
テーブル T_社員マスター T_講座マスター T_研修受付リスト
クエリ Q_研修受付
フォーム F_研修受付入力(クエリを基に作りました。)
レポート R_社員ごと受講リスト(社員番号ごとに研修受講履歴のレポートを作りました。)
作ったプログラムです。(小生プログラムの知識がありません。これはネットからサンプルを見ながら
作ってみました。おかしな所がございましたらご教授くださいませ)
Option Compare Database
Option Explicit
'”R_社員ごと受講リスト”の所にはレポートの名前を書く
Private Const conReportName = "R_社員ごと受講リスト"
-----------------------------------------------------------------
Private Sub メール送信_Click()
On Error Resume Next
DoCmd.SendObject ObjectType:=acSendReport, _
ObjectName:=conReportName, _
OutputFormat:=acFormatPDF, _
To:=Me.メールアドレス, _
cc:=Me.メールアドレス1, _
Subject:="研修受講履歴", _
MessageText:="研修受講履歴を添付しましたのでよろしくお願いします."
'PDFやXLS添付ファイルの形式を指定する
End Sub
-----------------------------------------------------------------
Private Sub report_open(cancel As Integer)
If IsLoaded("F_研修受付入力") Then
Forms("F_研修受付入力").SetFilter Me
End Sub
-----------------------------------------------------------------
Public Sub SetFilter(rpt As Report)
With rpt
.Filter = "T_社員マスター.社員番号 =" & 社員番号
.FilterOn = True
End With
End Sub
No.1ベストアンサー
- 回答日時:
メール送信_Click()については最後に
述べます。
>Private Sub report_open(cancel As Integer)
>If IsLoaded("F_研修受付入力") Then
>Forms("F_研修受付入力").SetFilter Me
>End Sub
IsLoadedをこのように使うなら、Accessは関数とみなすので
フォームが表示されているか確認するIsloaded関数を作成
する必要があります。これはAccessのサンプルのNorthwindow
というファイルの標準モジュールのユーティリティ関数に登録
してある以下のコードを標準モジュールに貼り付けます。
Function IsLoaded(ByVal strFormName As String) As Boolean
' 指定したフォームがフォーム ビューまたはデータシート ビューで開かれている場合 True を返します。
Const conObjStateClosed = 0
Const conDesignView = 0
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
If Forms(strFormName).CurrentView <> conDesignView Then
IsLoaded = True
End If
End If
End Function
あるいは、CurrentProjectオブジェクトを使って、
IsLoaded関数を使わずに、
>If IsLoaded("F_研修受付入力") Then
を
If CurrentProject.AllForms("フォーム1").IsLoaded Then
とします。この場合は標準モジュールに上記の関数を設定
する必要はありません。この場合のIsLoadedは
IsLoadedプロパティとして検索してみてください。あるいは
ヘルプを参照してください。
次に、
>Forms("F_研修受付入力").SetFilter Me
ですが、これは提示されている関数をプロパティ
のように使っていますがこのような使い方は
しません。そこで先に関数SetFilterをみてみます。
>Public Sub SetFilter(rpt As Report)
>With rpt
>.Filter = "T_社員マスター.社員番号 =" & 社員番号
>.FilterOn = True
>End With
>End Sub
の作り方ですが、
>.Filter = "T_社員マスター.社員番号 =" & 社員番号
の等号の右側の社員番号はレポートのテキストボックスの
社員番号になるのでしょう。また等号の左側はレポートの
レコードソースなのかもしれません。説明していくと
長くなるので、レポートを開くときフォームの社員番号を
参照してその番号にあった社員のデータを表示したい、
とうことならば、
>.Filter = "T_社員マスター.社員番号 =" & 社員番号
は、
.Filter = "[社員番号]=" & Forms!F_研修受付入力!社員番号
のようにします。したがって、SetFilter関数は以下のように
します。
Public Sub SetFilter(rpt As Report)
With rpt
.Filter = "[社員番号]=" & Forms!F_研修受付入力!社員番号
.FilterOn = True
End With
End Sub
ここで、"[社員番号]=" & Forms!F_研修受付入力!社員番号
の[社員番号]はレポートの社員番号という名前のテキスト
ボックスを指しています。
そこで、また前にもどって、report_openについてですが、
SetFilter関数には引数、SetFilter(rpt As Report)の
ropが設定してあるので、SetFilterを使うときは、
SetFilter(何か)
のような使い方をしなければなりません。したがって、
report_openは、
Private Sub report_open(cancel As Integer)
If IsLoaded("F_研修受付入力") Then
SetFilter Reports!R_社員ごと受講リスト
End If
End Sub
のようにします。なお、If文のあとのEnd Ifが抜けているの
追加しました。
【字数制限のために次に】
piroin654様
ご教授ありがとうございます。<(_ _)>
本当に!本当に!ありがとうございます。<(_ _)>
早速やってみました。
Public Sub SetFilter(rpt As Report)
With rpt
.Filter = "[社員番号]=" & Forms!F_研修受付入力!社員番号
.FilterOn = True
End With
End Sub
これを記述したら出来ました。
必要なデータのみ抽出されました。(*^_^*)感動しました!
それと、これはまた別で質問をしないといけないのかもしれませんが・・・
(別でないといけないときはご指摘ください。すみません)
ご教授頂いたように設定したら、フォームの社員番号と同じレポートがPDFファイルとなり添付される
ようになりました。しかし、新規に入力したデータだけ「メール送信」ボタンを押しても反応が
ありません。これはなぜでしょうか?
その他の、
Private Sub report_open(cancel As Integer)
If IsLoaded("F_研修受付入力") Then
SetFilter Reports!R_社員ごと受講リスト
End If
End Sub
上記の記述をするとOUTLOOKが起動されませんでした。
またNo3の記述
Private Sub report_open(cancel As Integer)
If CurrentProject.AllForms("F_研修受付入力").IsLoaded Then
Forms("F_研修受付入力").SetFilter Me
End Sub
変えてみましたがやはりOUTLLOKが起動しませんでした。
そして、「指定したフォームがフォームビューまたはデータシートビューで開かれている場合Trueをかえします。」も貼り付けてみましたがOUTLOOKが起動しなくなりました。
何か小生の設定が間違っておりますか?
お手数をおかけいたしますが、よろしくお願いいたします。
No.3
- 回答日時:
訂正です。
#1において、
>If IsLoaded("F_研修受付入力") Then
を
If CurrentProject.AllForms("フォーム1").IsLoaded Then
となっていますが、
If CurrentProject.AllForms("F_研修受付入力").IsLoaded Then
としてください。フォーム名が違っていました。
ありがとうございました。
不明な点も解決いたしました。
とても単純でメールアドレスが入力されていなかったからのようです。
この度は、本当にご丁寧にご教授頂き心から感謝いたします。
また機会がございましたらよろしくお願いいたします。
No.2
- 回答日時:
最後になりましたが、メール送信_Click()ですが、
Access2003では標準でファイルのPDF変換はありません。
したがって、DoCmd.SendObjectは提示されているようには
使えません。したがって、PDF変換のソフトを使って一旦
レポートをPDFに変換する工程を入れて、メールに添付
するようにしなければなりません。有償のアドビ、
あるいはフリーのソフトで変換します。したがって
提示されたコードはAccess2007ならば使えますが、
Access2003ではコードを変更しなければなりません。
なお、フリーのPDF変換ソフトは以下にあります。
http://www.lebans.com/reporttopdf.htm
サンプルに必要な変換用のDLL(ソフトのようなもの
と思ってください)が同梱されています。サンプルには
使い方が書いてありますが、すべて英語です。
piroin654様
ありがとうございます。
PDFが入っていない社員もいるので助かります。
そして、No1のお礼のところに補足説明を一緒に書いてしまいました。
大変失礼いたしました。
不慣れで申し訳ございません。<(_ _)>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【SQL】existsでの商演算
-
Accessで別テーブルの値をフォ...
-
access 自動採番 「10-AA-000...
-
沿線コード
-
ACCESSで大量の更新を行うと「...
-
実績累計の求め方と意味を教え...
-
MERGE文を単体テーブルに対して...
-
[VBA] ADOの Clone と AddNew
-
サブレンジ分割されたNDB(富士...
-
sqlplusの処理が途中でとまる
-
【至急】Accessでの大量データ...
-
unionの結果は集計はできないで...
-
SET句内で複数の条件を指定して...
-
アクセスでレポートの1印刷内...
-
ちなみになぜv=(v・e1)e1+(v・e...
-
"カレントレコードがありません...
-
ACCESSでテーブルのMAX値(文字...
-
空白文字とスペースの検索
-
VB6.0のIsNull関数に相当するもの
-
DataGridViewの内容をDBに反映...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで別テーブルの値をフォ...
-
最新の日付とその金額をクエリ...
-
Accessでのレコード存在チェック
-
[Access]異なるレコード間の文...
-
【SQL】existsでの商演算
-
access 自動採番 「10-AA-000...
-
Recordset.FindFirstについて
-
access 自動採番 年が変わる...
-
【アクセスVBA】テーブルにフィ...
-
質問です。 下記のテーブルとデ...
-
access 請求番号の自動採番
-
Accessで日付が変わると番号が...
-
アクセスで「空き番」の確認
-
【Access】選択クエリのグルー...
-
Access 文字+年ごとの自動採番
-
Access:抽出して、色をつけたい。
-
vba 直前の操作はキャンセルさ...
-
SELECT * FROM `生徒名簿` INNE...
-
サイベースには、オラクルのROW...
-
条件をつけて日付の古い行を抜...
おすすめ情報