以下のような動作をするマクロを作ったのですが、
エラー「一つ以上の比すようなパラメータが設定されていません」と出てしまいます。
調べたところ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
あなたの回答
tips
プレビュー