Option Compare Database
Private Sub コマンド101_Click()
Dim myStr As String '条件
myStr = ""
'-------------------------------------日時検索--------------------
If IsDate(開始日.Value) And IsDate(終了日.Value) Then
myStr = myStr & " And (日時 Between #" & 開始日.Value _
& "# And #" & 終了日.Value & "#)"
ElseIf IsDate(開始日.Value) Then
myStr = myStr & " And 日時=#" & 開始日.Value & "#"
ElseIf IsDate(終了日.Value) Then
myStr = myStr & " And 日時=#" & 終了日.Value & "#"
End If
'-------------------------------------日時検索終了--------------------
'-------------------------------------周知者検索---------------------
If Not IsNull(Me.周知者) Then
myStr = myStr & " And 周知者= '" & 周知者.Value & "'"
End If
'-------------------------------------周知者検索終了---------------------
'-------------------------------------分類---------------------
If Not IsNull(大分類) Then
myStr = myStr & " And 大分類 Like '" & 大分類.Value & "'"
End If
If Not IsNull(中分類) Then
myStr = myStr & " And 中分類 Like '" & 中分類.Value & "'"
End If
If Not IsNull(小分類) Then
myStr = myStr & " And 小分類 Like '" & 小分類.Value & "'"
End If
'-------------------------------------内容---------------------
If Not IsNull(内容) Then
myStr = myStr & " And 内容 Like '" & 内容.Value & "'"
End If
'-------------------------------------検索フォーム起動---------------------
If myStr = "" Then
MsgBox "抽出条件を入力してください。", vbCritical, "エラー"
Else
DoCmd.OpenForm "F_周知", , , Mid(myStr, 6)
DoCmd.Close acForm, Me.Name
End If
End Sub
上のコードは検索フォームのコードで、ACCESSの書籍の参考にして自分で記載しました。
DoCmd.OpenForm "F_周知", , , Mid(myStr, 6)
↑のこのコードの意味が調べても意味がわからないのです。
どのような意味なのか、お手数ですが、ご教示をお願いします。
コードの意味が分からないときは、まずはヘルプを参照しましょう。
OpenForm をクリックしてカーソルを置いてF1キーを押すとヘルプページが表示されます。下記のページです。
DoCmd.OpenForm メソッド (Access) | Microsoft Docs
上記の構文をみると4番目のパラメータ(引数)は WhereCondition です。
この下のほうにそれぞれのパラメータの役割が説明してあります。WhereConditionの説明は下記です。
ちょっと遠回りな説明ですが、抽出条件式を文字列として設定するということです。
Mid(myStr, 6) の部分は、やはりMidにカーソルを置いてF1キーを押してヘルプを表示させます。「キーワード」というページが表示されました。下の方にスクロールしていくと「Mid 関数」というリンクがありますのでそれをクリックします。下記のページか表示されます。(ダイレクトにこのページにいけないところがちょっち使いづらいですね。)
Mid 関数 (Visual Basic for Applications) | Microsoft Docs
これを読めば、Mid(myStr, 6) は myStrに格納されている文字列の6桁目以降を取り出しているとわかります。
上の方のコードで myStr変数に条件式を格納しているのですが、" And 条件式" というように前に不要な" And "が付いているので、それを削除しているのです。
分からないコードがあったらこんな感じで調べてみてください。F1でのヘルプは結構目的のページにたどり着けない場合もあります。その場合は「VBA 分からないコード」というようなキーワードで調べればたいてい解説ページにたどり着けます。
いつもご丁寧ありがとうございます。
ヘルプを熟読します。
ありがとうございました。
Mid(myStr, 6)
はMid()関数を使った複数の中からいくつかを選ぶときに使うよくある手法ですね。これをそうだと解説しているのはあまり見ない気がします。謎の数字「6」は
Len(" And ") + 1
で求められる数値です。(「And」の前後に空白スペースが入っています)条件が複数選ばれると前後の条件を" And "でつなぐことになりますが、そのままコードにするならば、条件追加の時にはすでに条件があるかどうかをチェックするということになります
ex)前提条件を考えた検索条件の追加コードの一部
何回も同じことをしているIfが出てきて手間だし読みにくいですね
そこで、最初かどうかにかかわらず、条件にはすべて先頭に" And "をつけておこう、処理の最後に先頭の" And "を削除するようにしようというのが
Mid(myStr, 6)
ですhiroton様
返信おくれて申し訳ありません。
詳しい回答ありがとうございました。