Access 2010で実行時エラー3061

このQ&Aのポイント
  • Access 2010でDoCmd.SendObjectを使用してメールを自動生成したいのですが、実行時エラー3061でとまってしまいます。デバッグすると、Set RS = DB.OpenRecordset("30DaysQuery")でとまっています。
  • 生成するメールは1通、その本文に複数データを列記という形です。
  • 大した知識もなく作っています。言葉足らず、情報足らずの点があれば、ご指摘ください。よろしくお願いします。
回答を見る
  • ベストアンサー

Access 2010で実行時エラー3061

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

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

  • ベストアンサー
  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.3

> 下記のように書き換えたところ、「エラー3265 このコレクションには項目がありません」とい うエラーに変わり、 はい、これなら一目で原因がわかります。 かなり分かりにくいメッセージではありますが、この場合には 「レコードセットの フィールドコレクション に 指定した項目名が見つからないよ」 という意味でしょう。 実際には、エラーになった行にあるコレクション の種類ごとに調べる必要があります。 (フォームのテキストボックス名が間違っている場合など。) 項目数が少ない場合は 止まって、黄色になっている行の 項目名の上にマウスを持っていくと 正常なものはその値、間違っている項目名のところは 「コレクションには項目がありません」 が表示されます。 では、フィールド名は絶対に間違っていないのになぜ? という疑問にはこちら。 Access 2007 の予約語と記号 http://office.microsoft.com/ja-jp/access-help/HA010030643.aspx Access データベースでの作業時に使用すべきでない特殊文字 http://support.microsoft.com/kb/826763/ja フィールド、コントロール、およびオブジェクトの名前について http://office.microsoft.com/ja-jp/access-help/HP005186769.aspx 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 など のような命名 がお勧めです。

Beginner37
質問者

お礼

またも、どんぴしゃです。ありがとうございま す。 自分でも「Report#」というフィールド名はよく ないような気になって、#をやめたのですが、変 わらず。。 ご指摘のフォーム名を変えたら動きました!予 約語というものがあるのなら、エラーとなって 弾いてくれたらいいのになと素人は思いまし た。。^^; 動きました!と言っても、また別の箇所でエ ラーが起きてしまいました。。1件の質問で、い くつものエラーについて尋ねて、ずるいように 思えてきたので、別件として質問を作成しま す。またよろしくお願いします。

その他の回答 (2)

  • m3_maki
  • ベストアンサー率64% (295/459)
回答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 のバージョンによっては別のエラーが発生する可能性がありますので。 あと、パッと見で気になる点として 数字で始まるオブジェクト名はトラブルの元です。 可能なら英字から始まるように変更しましょう。

Beginner37
質問者

お礼

コメントありがとうございます。番号の後の メッセージのほうが重要だと分かっていません でした。すみませんでした。 参考リンクの「フォーム参照のパラメータクエ リ・・」というのがまさに当てはまったと思い ます。 下記のように書き換えたところ、「エラー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

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答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 'これは何のため?

Beginner37
質問者

お礼

コメントありがとうございます。ですが、すみ ません、私が本当にわかってないです。 行継続文字、すみません、理解していないです。 'Resume Next"、参考にしたスクリプトにあったのをそのままコピーしたのだと思います。 m3_makiさんのコメントを参考に書き換えてみ たところ、別のエラーになりました。なにかお 気づきの点があれば、またコメントをよろしく お願いします。

関連するQ&A

  • アクセス2010のVBAについて教えて下さい

    前回<http://okwave.jp/qa/q8035701.html>で2つのエラーを解消していただきましたが、新たにDoCmd.SendObject acSendNoObject, , acFormatTXT, RS!Email, "aaa@aaa.mil", , Subject, Body, TrueSetで「2498指定した式はいずれかの引数とデータ型が対応してません」というエラーで止まってしまいました。 「RS!Email」を消すと、メールを生成するので、ここが違っているのは分かりましたが、どう直せばいいのかがわかりません。。「Email」のデータ型はテキスト型になっています。、ハイパーリンク型も試しましたがダメでした。さらに記述を「RS![Email]」としてみましたが、それもダメでした。。 どうぞよろしくお願いします。 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]![fmReport]![ReportID]") = Forms!fmReport!ReportID Set RS = .OpenRecordset Do Until RS.EOF Body = Body & "------------------------------------------------------" & vbCrLf _ & "[Due Date: " & RS!DueDate & "] [Agency: " & RS!Agency & "] [Report: " & RS!ReportNumber & "]" & vbCrLf _ & "Corrective Action: " & RS!CorrectiveAction & vbCrLf _ & "Recommendation: " & RS!Recommendation & vbCrLf RS.MoveNext Loop DoCmd.SendObject acSendNoObject, , acFormatTXT, RS!Email, "aaa@aaa.mil", , Subject, Body, True .Close End With End Sub

  • Access2002 VB がエラー

    Access2002 VBで以下のコーディングをしてます Dim db As Database Dim rs As Recordset Dim fld As Field Set db = CurrentDb Set rs = db.OpenRecordset("ConvertChar") これを実行するとdb宣言行で以下のエラーが表示されます。 コンパイルエラー: ユーザ定義型は定義されていません。 これは何が原因でエラーとなるのでしょうか? 宜しくお願いします。

  • accessのvbaでの実行時エラーについて

    いつもお世話になっております。 Accessのvbaで下記のコードを実行して、データを 取得したいのですが、OpenRecordsetのところで 「実行時エラー'3615' 式で型が一致しません。」 というエラーがでてしまいます。 ーーーーーーーーーーーーーーーーーーーーーーー Dim db As Database Dim Rec As Recordset Dim strSql As String strSql = "SELECT 入金日 FROM 入金チェック WHERE ID IN(SELECT ID FROM 入居者管理 WHERE 物件名 = '" &  strBukken & "')" Set db = CurrentDb() Set Rec = db.OpenRecordset(strSql) ーーーーーーーーーーーーーーーーーーーーーーー 副問合せのしかたがまずいのか、 どうもよくわかりません。 お手数ですが、お分かりの方がおられましたら ご教示お願いいたします。

  • Access2002のVBAエラーで

    クエリで抽出したレコードを利用したいのですがうまくいきません。 Dim ds As Database Dim rs As Recordset Set ds = CurrentDb Set rs = ds.OpenRecordset("クエリ名") デバッグすると  Set rs = ds.OpenRecordset("クエリ名") で止まります。 「実行時エラー’3061’ パラメータが少なすぎます。1を指定してください」のメッセージです。 どのような意味でしょう。教えてください。

  • アクセスVBA 変数での抽出条件の書きかた

    顧客データテーブルからの抽出です。 変数を使った書き方がわかりません。 よろしくお願いします。 テーブルのレコードには [氏名]:鈴木 [telnum]:0123456789 が存在します。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ", dbOpenDynaset) Dim str As String str = "0123456789" rs.Filter = "[telnum] = ' " & str & " ' " Set rs = rs.OpenRecordset MsgBox (rs!氏名) ’←エラーメッセージ”カレントレコードがありません。”が出ます End Sub

  • AccessのDoCmd.SendObjectについて

    AccessVBA初心者(ExcelVBAはまあまあ経験有)の者です。 下記のようにプログラムを組んで実行してみたのですが、 複数レコードあるクエリを読んでいるにもかかわらず、 メールを一通しか送信してくれません。 色々と試してみたのですが、メール本文が短いと送信できるようです。 (送りたいメール本文は1KByte弱で、それだと失敗しますが、メール本文を「test」の四文字だけにするときちんとレコード数だけメール送信してくれます。) 回避策はあるでしょうか。 ---------------------------------------- Public Function メール送信Sub() Dim db As DAO.Database Dim rs As DAO.Recordset Dim 件名 As String Dim 本文 As String Set db = CurrentDb Set rs = db.OpenRecordset("022.メール送信用クエリ", dbOpenForwardOnly, dbDenyWrite) Do Until rs.EOF '件名の作成 件名 = "御注文品発送のご連絡" '本文の作成 本文 = rs!メール本文 ' 本文 = "test" 'メールの送信 DoCmd.SendObject , , acFormatTXT, rs!購入者Eメールアドレス, "(CC用メールアドレス)", , 件名, _ 本文, False rs.MoveNext Loop rs.Close: Set rs = Nothing End Function ----------------------------------------

  • ACCESS2000でテーブルをVBAからテーブルを読み込む方法

    ACCESS2000を使っています。 以下の指定をした場合、「ユーザ定義型は定義されていません」のメッセージが出て、コンパイルが通りません。 なにかインストールや設定が必要なのでしょうか? Dim db As Database Dim rs As Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("テーブル名", dbopendynaset) ヘルプ等を自分なりに参照してみたのですが、わかりません。教えてください。

  • accessからsqlserverにアップサイジングしましたが,テーブ

    accessからsqlserverにアップサイジングしましたが,テーブルにデータを入力出来なくなってしまいました。 Dim rs As DAO.Recordset Dim db As DAO.Database Set db = CurrentDb() Set rs = db.OpenRecordset("確認用", dbOpenDynaset) rs.AddNew rs!品番 = Me.品番 rs.Update 上記のようにDAOを介してテーブルにデータを入れていました。 アップサイジングする前は、問題なかったのですが、どういったことが原因になりますでしょうか?

  • Access VBAでクエリーのレコード件数を取得したいのですが

    Access2003のVBAで次のような構文を用いてクエリーの該当レコード数を取得したいのですがうまく出来ません。 構文又は手法が間違っているのでしょうか。 Dim db As Database Dim rs As Recordset Dim cnt As Long Set db = CurrentDb Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenTable) cnt = rs.RecordCount ※OpenRecordsetの行で「実行時エラー'3219'無効な処理です」と出てしまいます。 又、”該当顧客リストクエリ”では特定の抽出条件を設定して、”顧客リストテーブル”の一部を抽出するようにしています。

  • 実行時エラー'13' :型が一致しません。

    Windows XPで、Access 2002を使用しています。 テーブル1のフィールド1の値を、ハイフン区切りで分割をしたいと思い、split関数を使用して、 下記、VBAを実行しましたが、「実行時エラー'13' :型が一致しません。」と言うエラーが 発生して、先に進む事ができません。 ツール→参照設定で、Microsoft DAO 3.6 Object Libraryにチェックを入れたり外したりしましたが、 全く改善されず、同じエラーが発生します。 DAO.を付けると解決するとの事で、 Dim dbs As DAO.Database Dim rs As DAO.Connection としましても、同じエラーが出ます。 デバッグしますと、 Set rs = dbs.OpenRecordset("select フィールド1 from テーブル1") の所で発生しているようです。 Private Sub コマンド0_Click() Dim dbs As DAO.Database Dim rs As DAO.Connection Set dbs = CurrentDb Set rs = dbs.OpenRecordset("select フィールド1 from テーブル1") Dim Vartemp As Variant Vartemp = Split(rs, "-") Debug.Print Vartemp(0) Debug.Print Vartemp(1) Debug.Print Vartemp(2) Debug.Print Vartemp(3) End Sub 以上、初心者で、行き詰ってしまっておりますので、どうか宜しくお願いします。

専門家に質問してみよう