質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

0回答

5296閲覧

エラー:一つ以上の必要なパラメータが設定されていませんの解決方法を教えてください。

oftn

総合スコア19

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/07/27 12:36

編集2020/07/28 13:46

以下のような動作をするマクロを作ったのですが、
エラー「一つ以上の比すようなパラメータが設定されていません」と出てしまいます。
調べたところSQL文のエラーのようなので、エラーになりそうな箇所を記載します。
以下の処理のうち、②までは処理でき、③の処理のところになると、標記のエラーが出てしまいます。
お恥ずかしながら、DBもVBAも調べながら書いているため、エラーの解決方法も調べてもうまくわからず…。
修正のためお力を貸してください。

【マクロの動作】
VBA付のEXCELファイルを作成しセルに、年号と「\nn.nnn.nn.nn\社員管理\勤怠管理\H32\例月処理」のフォルダパスと「進行管理表.xlsx」のファイルパスを入力して「日程調整依頼時処理」ボタンを押すと下記のように動作をする。

① 「日程調整依頼時処理」ボタンを押すと「進行管理表.xlsx」の「システムから貼り付け」シートの社員番号と「進行管理表」シートの社員番号が同一の場合に値を転記。
② 「進行管理表」シートのF列の2行目から最終行まで、「進行管理表」シートのL列(ヒアリング必須者)が漢字の「〇」でK列(ストレス診断)が空白か「保」の場合は、「未入力者(対象者)」シートに転記。
③ 「進行管理表」シートのF列の2行目から最終行まで、「進行管理表」シートのL列(ヒアリング必須者)が「〇」でなく、かつK列(ストレス診断)が「済」の場合は、「希望者免除者一覧」シートに転記。
④ 最初に選択したフォルダパスで、うしろが同じフォルダ名の対象者抽出フォルダ内の「02必須者.xlsx」「03免除者希望者.xlsx」ファイルを日程調整依頼時フォルダにコピーする。同じファイルがあった場合は、上書き。
⑤ 「進行管理表」シートのF列の2行目から最終行まで、「進行管理表」シートのL列(ヒアリング必須者)が漢字の「〇」でK列(ストレス診断)が空白か「保」の場合は、「02必須者.xlsx」ファイルの先頭のシートのL列(社員番号)が同一の場合にF列(ストレス診断列)に「未」と記入する。
⑥ 「進行管理表」シートのL列(ヒアリング必須者)が漢字の「〇」でなく「進行管理表」シートのM列(ヒアリング必須者(免除可))もしくはN列(希望者)が漢字の「〇」でK列(ストレス診断)が「済」の場合は、K列(ストレス診断)が空白か「保」の場合は、「03免除者希望者.xlsx」ファイルの先頭のシートのL列(社員番号)が同一の行を削除する。
削除して2行目以上の行がなくなった場合は、ファイルを削除する。

VBA

1'module1 2 3 'DATA.accdb初期化(基本毎回作成) 4 FOLDER_NAME = ThisWorkbook.Path 5 Target = FOLDER_NAME & "\" & PCST_DB 6 If Dir(Target) <> "" Then 7 Kill Target 8 End If 9 If Dir(Target) = "" Then 10 Call fc_CreateDatabase 11 End If 12 13 14 '希望者免除者一覧シート データ貼り付け 15 SQL_str = "SELECT qry_DATA1K.所属部, qry_DATA1K.上長名, qry_DATA1K.所属, qry_DATA1K.社員番号, qry_DATA1K.氏名, qry_DATA1K.[ヒアリング必須者], qry_DATA1K.希望者 " 16 SQL_str = SQL_str & "FROM qry_DATA1K " 17 SQL_str = SQL_str & "ORDER BY qry_DATA1K.ROW " 18 db_rst.Open SQL_str, db_Con, 1, 2 19 With WS3 20 .Range("B2").CopyFromRecordset db_rst 21 db_rst.Close 22 MaxRow = .Cells(.Rows.Count, 5).End(xlUp).Row 23 If MaxRow >= 2 Then 24 .Range("A2") = 1 25 .Range(.Cells(2, 5), .Cells(MaxRow, 5)).Formula = .Range(.Cells(2, 5), .Cells(MaxRow, 5)).Value 26 End If 27 If MaxRow >= 3 Then 28 .Range("A3") = 2 29 End If 30 If MaxRow >= 4 Then 31 .Range("A2:A3").AutoFill Destination:=.Range(.Cells(2, 1), .Cells(MaxRow, 1)), Type:=xlFillDefault 32 End If 33 End With 34 35 SQL_str = "SELECT * FROM tbl_DATA5" 36 db_rst.Open SQL_str, db_Con, 2, 2 37 '所属一覧シート データ取得 38 With WS5 39 MaxRow = .Cells(.Rows.Count, 4).End(xlUp).Row 40 41 42 '02必須者.xlsxファイル最初のシート データ更新 43 SQL_str = "UPDATE tbl_DATAP02 INNER JOIN qry_DATA1M ON tbl_DATAP02.社員番号 = qry_DATA1M.社員番号 SET tbl_DATAP02.[問診票] = [qry_DATA1M]![問診票]" 44 db_Con.Execute SQL_str 45 46 47 '02必須者.xlsxファイル最初のシート データ貼り付け 48 SQL_str = "SELECT tbl_DATAP02.[問診票] " 49 SQL_str = SQL_str & "FROM tbl_DATAP02 " 50 SQL_str = SQL_str & "ORDER BY tbl_DATAP02.ROW " 51 db_rst2.Open SQL_str, db_Con, 1, 2 52 .Range("L2").CopyFromRecordset db_rst2 53 db_rst2.Close 54

VBA

1module2 2 3 db_Con.Open 4 db_Cmd.ActiveConnection = db_Con 5 db_Cmd.CommandText = "CREATE TABLE tbl_DATA1 (" & _ 6 "対象月 TEXT(255), 所属部 TEXT(255), 担当 TEXT(255), 所属 TEXT(255), 社員番号 TEXT(255), 氏名 TEXT(255)," & _ 7 "チェックシート TEXT(255), 問診票 TEXT(255), ヒアリング必須者免除可 TEXT(255), ヒアリング必須者免除可免除可 TEXT(255), 希望者 TEXT(255), ROW LONG)" 8 db_Cmd.Execute 9 db_Cmd.CommandText = "CREATE VIEW qry_DATA1M AS " & _ 10 "SELECT tbl_DATA1.所属部, tbl_DATA1.担当, tbl_DATA1.所属, tbl_DATA1.社員番号, tbl_DATA1.氏名, tbl_DATA1.[問診票], tbl_DATA1.ROW " & _ 11 "FROM tbl_DATA1 " & _ 12 "WHERE (((tbl_DATA1.[問診票]) Is Null Or (tbl_DATA1.[問診票])='保') AND ((tbl_DATA1.[ヒアリング必須者免除可])='〇')) " 13 db_Cmd.Execute 14 db_Cmd.CommandText = "CREATE VIEW qry_DATA1K AS " & _ 15 "SELECT tbl_DATA1.所属部, tbl_DATA1.担当, tbl_DATA1.所属, tbl_DATA1.社員番号, tbl_DATA1.氏名, tbl_DATA1.[ヒアリング必須者免除可免除可], tbl_DATA1.希望者, tbl_DATA1.ROW " & _ 16 "FROM tbl_DATA1 " & _ 17 "WHERE (((tbl_DATA1.[ヒアリング必須者免除可]) Is Null Or (tbl_DATA1.[ヒアリング必須者免除可])<>'〇') AND ((tbl_DATA1.[ヒアリング必須者免除可免除可])='〇') AND ((tbl_DATA1.[問診票])='済')) OR (((tbl_DATA1.[ヒアリング必須者免除可]) Is Null Or (tbl_DATA1.[ヒアリング必須者免除可])<>'〇') AND ((tbl_DATA1.希望者)='〇') AND ((tbl_DATA1.[問診票])='済')) " 18 db_Cmd.Execute 19 db_Cmd.CommandText = "CREATE VIEW qry_DATA1D AS " & _ 20 "SELECT tbl_DATA1.所属部, tbl_DATA1.担当, tbl_DATA1.所属, tbl_DATA1.社員番号, tbl_DATA1.氏名, tbl_DATA1.[ヒアリング必須者免除可免除可], tbl_DATA1.希望者, tbl_DATA1.ROW " & _ 21 "FROM tbl_DATA1 " & _ 22 "WHERE (((tbl_DATA1.[ヒアリング必須者免除可免除可])='〇') AND ((tbl_DATA1.[ヒアリング必須者免除可]) Is Null Or (tbl_DATA1.[ヒアリング必須者免除可])<>'〇') AND ((tbl_DATA1.[問診票]) Is Null Or (tbl_DATA1.[問診票])<>'済' Or (tbl_DATA1.[問診票])='保')) OR (((tbl_DATA1.希望者)='〇') AND ((tbl_DATA1.[ヒアリング必須者免除可]) Is Null Or (tbl_DATA1.[ヒアリング必須者免除可])<>'〇') AND ((tbl_DATA1.[問診票]) Is Null Or (tbl_DATA1.[問診票])<>'済' Or (tbl_DATA1.[問診票])='保')) " 23 db_Cmd.Execute 24

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oftn

2020/07/27 12:41

途中で送信してしまいました。のちほど削除依頼を出します
kai_keitai

2020/07/27 12:59

まずは、どこの行でエラーになっているか、明確にしましょう。 回答はそれからです。 勉強して間もない人ですかね? アチコチ初々しさがあります。 ざっと読みましたが、仮に、エラーが無くても、動作は上手く行かないでしょう。 最後のSelect Case文は必ず5しか判定されないし。 また、サブルーチン LOOPOPEN のソースコードもかなり怪しいです。 サブルーチンLOOPOPENに原因があるかもしれません。 厳しい言い方かもしれませんが、配列の使い方も勉強した方が良いです。 使い方をもっと勉強すれば、ソースコードは、3分の1になります。 ADOのオブジェクトの変数も宣言していますが、どこも使用していないですよね。 使用しない変数をソースコードに残すことは、バグを作り込むことになります。 さらに、どこの行にもSQL文は存在しません。 また、やりたいことを詳しく書いていただきましたが、これでは、回答は出ないでしょう。 ここは、技術者のためのサイトであり、プログラムを無償で作ってくれるサイトではありません。 動作が上手く行かないソースコードを自分なりに、調査して、最低限「ここでエラーになる!」とわかっていないと、ダメです。 厳しいかもしれませんが、丸投げ投稿が最近多いのが残念です。 まずは、自分でアレコレ試してから、ここが怪しいと確信してから、質問して下さい。
meg_

2020/07/27 22:23

> 途中で送信してしまいました。のちほど削除依頼を出します 質問は編集できますので追記すれば良いです。
ttyp03

2020/07/28 00:21

コードタグ(```)の終わりがありません。追加してください。その際、コードのインデントが失われていると思うので、再度コードを貼りつけてください。(きれいな状態で見えるようにしてくださいということ) エラーがどこで出ているのか明確にしてください。 エラーの改善方法の質問であるなら、細かい処理の詳細は不要です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問