![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
Access 2010でDoCmd.SendObjectを使用してメールを自動生成したいのですが、実行時エラー3061でとまってしまいます。デバッグすると、Set RS = DB.OpenRecordset("30DaysQuery")でとまっています。生成するメールは1通、その本文に複数データを列記という形です。イメージとしてはこんな感じです。→<http://www.tsware.jp/tips/tips_464.htm>
大した知識もなく作っています。言葉足らず、情報足らずの点があれば、ご指摘ください。よろしくお願いします。
Private Sub EmailReminder_Click()
Dim DB As Database
Dim RS As Recordset
Dim Subject As String
Dim Body As String
Subject = "Audit Corrective Actions"
Body = "Good Morning Sir/Ma'am," & vbCrLf _
& "This is an auto generated email." & vbCrLf _
& "In response to a recent audit, your attention is needed for the following item(s)." & vbCrLf & vbCrLf _
& "Please advise when these actions are completed. If you have any questions please feel free to contact our office. Thank you for your help and cooperation in this matter. Have a nice day." & vbCrLf & vbCrLf _
& "Corrective Actions:" & vbCrLf _
Set DB = CurrentDb()
Set RS = DB.OpenRecordset("30DaysQuery")
Do Until RS.EOF
Body = Body &
"------------------------------------------------------" & vbCrLf _
& "[Due Date: " & RS!DueDate & "] [Agency: " & RS!Agency & "] [Report: " & RS!Report# & "]" & vbCrLf _
& "Corrective Action: " & RS!CorrectiveAction & vbCrLf _
& "Recommendation: " & RS!Recommendation & vbCrLf
RS.MoveNext
Loop
DoCmd.SendObject , , acFormatTXT, RS!Email, "***@bbb.com", ,
Subject, Body, True
RS.Close
Resume Next
End Sub
No.3ベストアンサー
- 回答日時:
> 下記のように書き換えたところ、「エラー3265 このコレクションには項目がありません」とい うエラーに変わり、
はい、これなら一目で原因がわかります。
かなり分かりにくいメッセージではありますが、この場合には
「レコードセットの フィールドコレクション に 指定した項目名が見つからないよ」 という意味でしょう。
実際には、エラーになった行にあるコレクション の種類ごとに調べる必要があります。
(フォームのテキストボックス名が間違っている場合など。)
項目数が少ない場合は
止まって、黄色になっている行の 項目名の上にマウスを持っていくと
正常なものはその値、間違っている項目名のところは 「コレクションには項目がありません」 が表示されます。
では、フィールド名は絶対に間違っていないのになぜ?
という疑問にはこちら。
Access 2007 の予約語と記号
http://office.microsoft.com/ja-jp/access-help/HA …
Access データベースでの作業時に使用すべきでない特殊文字
http://support.microsoft.com/kb/826763/ja
フィールド、コントロール、およびオブジェクトの名前について
http://office.microsoft.com/ja-jp/access-help/HP …
Access 2007 または Access 2003 でクエリを実行すると、全角のアラビア数字が原因でエラー メッセージが表示される
http://support.microsoft.com/kb/932994/ja
先頭文字が全角数字のフィールド名を含む Access のクエリを最適化すると、フィールドの定義が失われる場合がある
http://support.microsoft.com/kb/937915/ja
半角カタカナ や 機種依存文字 を 避けるのは言うまでもありません。
"30DaysQuery" のような数字で始まるもの、
"Report" のような 予約語 とぶつかるもの、
「_」 (アンダーバー) 以外の記号(全角・半角) を 含むもの
は、後々分かりにくいエラーなどのトラブルを起こす可能性があります。
できるだけ使用しないことをお勧めします。
直接の回答は
手っ取り早いのは
RS!Report# を RS![Report#] に変更する。
根本的な対策は、「Report#」 という テーブルのフィールド名を変更する。
(例: ReportNo 、 ReportNum など)
テーブルのフィールド名 変更が 影響が大きすぎるなら
クエリの フィールド名 を変更する。
(クエリのフィールドのところに 「ReportNo: Report#」 とか。)
Report という フォーム名もかなりビックリです。
F_Report とか frmReport など のような命名 がお勧めです。
またも、どんぴしゃです。ありがとうございま す。 自分でも「Report#」というフィールド名はよく ないような気になって、#をやめたのですが、変 わらず。。 ご指摘のフォーム名を変えたら動きました!予 約語というものがあるのなら、エラーとなって 弾いてくれたらいいのになと素人は思いまし た。。^^;
動きました!と言っても、また別の箇所でエ ラーが起きてしまいました。。1件の質問で、い くつものエラーについて尋ねて、ずるいように 思えてきたので、別件として質問を作成しま す。またよろしくお願いします。
No.2
- 回答日時:
回答者は、エラー番号とその内容を覚えているわけではありません。
エラーメッセージを正確に書くようにしましょう。
で、回答は、下記を参考にしてください。
[AC95] モジュール実行時「パラメータが少なすぎます。」エラー
http://support.microsoft.com/kb/404918/ja
フォーム参照のパラメータクエリをVBAで扱う方法
http://www.tsware.jp/tips/tips_586.htm
なお、参照先の
Dim dbs As Database
Dim qdf As QueryDef
Dim rst As Recordset
は、上位オブジェクトから
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset
のように記述する方がベターだと思います。
Access のバージョンによっては別のエラーが発生する可能性がありますので。
あと、パッと見で気になる点として
数字で始まるオブジェクト名はトラブルの元です。
可能なら英字から始まるように変更しましょう。
コメントありがとうございます。番号の後の メッセージのほうが重要だと分かっていません でした。すみませんでした。
参考リンクの「フォーム参照のパラメータクエ リ・・」というのがまさに当てはまったと思い ます。
下記のように書き換えたところ、「エラー3265 このコレクションには項目がありません」とい うエラーに変わり、
Body = Body & "------------------------------------------------------" & vbCrLf _
& "[Due Date: " & RS!DueDate & "] [Agency: " & RS!Agency & "] [Report: " & RS!Report# & "]" & vbCrLf _
& "Corrective Action: " & RS!CorrectiveAction & vbCrLf _
& "Recommendation: " & RS!Recommendation & vbCrLf
で止まるようになりました。Reportという フォームを開いた状態で、クエリを開けば、 データは呼び出されています。よろしくお願い します。
Private Sub EmailReminder_Click()
Dim DB As DAO.Database
Dim QD As DAO.QueryDef
Dim RS As DAO.Recordset
Dim Subject As String
Dim Body As String
Subject = "Audit Corrective Actions"
Body = "Good Morning Sir/Ma'am," & vbCrLf _
& "This is an auto generated email." & vbCrLf _
& "Please advise when these actions are completed. If you have any questions please feel free to contact our office. Thank you for your help and cooperation in this matter. Have a nice day." & vbCrLf & vbCrLf _ & "Corrective Actions:" & vbCrLf _
Set DB = CurrentDb()
Set QD = DB.QueryDefs("ReminderQuery")
With QD
.Parameters("[Forms]![Report]![ReportID]") = Forms!Report!ReportID
Set RS = .OpenRecordset
Do Until RS.EOF
Body = Body & "------------------------------------------------------" & vbCrLf _
& "[Due Date: " & RS!DueDate & "] [Agency: " & RS!Agency & "] [Report: " & RS!Report# & "]" & vbCrLf _
& "Corrective Action: " & RS!CorrectiveAction & vbCrLf _
& "Recommendation: " & RS!Recommendation & vbCrLf
RS.MoveNext
Loop
DoCmd.SendObject , , acFormatTXT, RS!Email, "aaa@aaa.com", , Subject, Body, True
.Close
End With
End Sub
No.1
- 回答日時:
気になったところにコメント入れてます。
Dim DB As Database
Dim RS As dao.Recordset 'DAO のレコードセットを使用する
Dim Subject As String
Dim Body As String
Subject = "Audit Corrective Actions"
Body = "Good Morning Sir/Ma'am," & vbCrLf _
& "This is an auto generated email." & vbCrLf _
& "In response to a recent audit, your attention is needed for the following item(s)." & vbCrLf & vbCrLf _
& "Please advise when these actions are completed. If you have any questions please feel free to contact our office. Thank you for your help and cooperation in this matter. Have a nice day." & vbCrLf & vbCrLf _
& "Corrective Actions:" '& vbCrLf _ '行継続文字が中途半端に終わっている
Set DB = CurrentDb()
Set RS = DB.OpenRecordset("30DaysQuery") 'クエリ名ではなくてテーブルを指定した場合で試す
Do Until RS.EOF
Body = Body & vbCrLf & _
"------------------------------------------------------" & vbCrLf _
& "[Due Date: " & RS!DueDate & "] [Agency: " & RS!Agency & "] [Report: " & RS!Report# & "]" & vbCrLf _
& "Corrective Action: " & RS!CorrectiveAction & vbCrLf _
& "Recommendation: " & RS!Recommendation & vbCrLf
RS.MoveNext
Loop
DoCmd.SendObject , , acFormatTXT, RS!Email, "***@bbb.com", , Subject, Body, True
RS.Close: Set RS = Nothing
'Resume Next 'これは何のため?
コメントありがとうございます。ですが、すみ ません、私が本当にわかってないです。
行継続文字、すみません、理解していないです。
'Resume Next"、参考にしたスクリプトにあったのをそのままコピーしたのだと思います。
m3_makiさんのコメントを参考に書き換えてみ たところ、別のエラーになりました。なにかお 気づきの点があれば、またコメントをよろしく お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
パラメータが少なすぎます。1を指定して下さい。""
Excel(エクセル)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
-
4
Access2010 「演算子がありません」エラー
その他(データベース)
-
5
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
-
6
アクセス VBAについて FROM句の構文エラー
Access(アクセス)
-
7
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
8
親フォームからサブフォームのレコードソースを設定
Access(アクセス)
-
9
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
10
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
11
カレントレコードが無い事を判定させる方法
Visual Basic(VBA)
-
12
Accessのサブフォームから値を参照する方法について
その他(データベース)
-
13
「パラメータが少なすぎます。3を指定してください。」って???
Access(アクセス)
-
14
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
15
アクセスVBAのMe!と[ ]
Access(アクセス)
-
16
アクセスのエラー「クエリには出力フィールドが1つ以上必要です。」
その他(Microsoft Office)
-
17
アクセス 実行時エラー3265
その他(プログラミング・Web制作)
-
18
アクセス フォームをリクエリしたい
Access(アクセス)
-
19
Access VBA SQL文で教えてください
PowerPoint(パワーポイント)
-
20
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのフィールド名に半角括...
-
クリスタルレポートで文字列の...
-
INT64対応のprintf系関数はあり...
-
DataTableに特定のフィールドが...
-
2つ目のレコードの値を取得す...
-
c言語で自分のホームディレク...
-
accessでフィールド追加のあと...
-
フィールド名をループの添え字...
-
ACCESSで日別集計をする場合
-
日付と文字列を条件としてDLook...
-
NULLを含む文字列の結合で...
-
クリスタルレポート(8.5)の書式...
-
AccessVBAで他テーブルのデータ...
-
Access 2010で実行時エラー3061
-
ASP.NET 2.0(C#) GridViewのソ...
-
[SQLServer]既に存在するテーブ...
-
クリスタルレポートの式フィー...
-
ACCESSで視覚的タイムテーブル...
-
Access クエリで変数を参照する...
-
SQLで複数のテーブルと結合した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessでフィールド追加のあと...
-
Accessのフィールド名に半角括...
-
クリスタルレポートで困ってい...
-
2つ目のレコードの値を取得す...
-
DataTableに特定のフィールドが...
-
Access 2010で実行時エラー3061
-
INT64対応のprintf系関数はあり...
-
テーブルのデータ型の変更がで...
-
AccessのDAOでフィールド名を配...
-
日付と文字列を条件としてDLook...
-
クリスタルレポートで文字列の...
-
クリスタルレポート(8.5)の書式...
-
Access VBA 添付型フィールド
-
Access クエリで変数を参照する...
-
Accessの画像挿入のVBAコード
-
NULLを含む文字列の結合で...
-
SQLで複数のテーブルと結合した...
-
ACCESSで視覚的タイムテーブル...
-
ACCESSデータベースにV...
-
オートナンバー型を抽出条件に...
おすすめ情報