- 締切済み
アクセスVBA If式
早速ですが、質問させて頂きます。 ACCESS VBAで、各ボックスに入力された数字に対し、論理式が立てられており、全項目ボックスに入力をし『チェック』ボタンを押すと基準を超えるものに『再チェックが必要な項目があります』というメッセージを出した上に、それを赤で反転させる、というのを作成中です。 簡単な図で表すと []はボックスだと思ってください 高さ[ ] 横[ ] 縦[ ] 体積[ ] [チェック]←ボタン 高さが20を超えた場合、要再チェック 横が10以下の場合、要再チェック 縦が5未満又は15を超える場合、要再チェック 体積 高さ*横*縦 が3000以下の場合、要再チェック Private Sub コマンド1_Click() ← チェックボタンをクリック '要チェックか調べます 要チェック = Y If 高さ >= 20 Then Y = Y + 1 End If If 横 <= 10 Then Y = Y + 1 End If If 縦 < 5 Then Y = Y + 1 End If If 縦 >= 15 Then Y = Y + 1 End If ~中略 If Y >= 1 Then Msg = MsgBox("要再チェック項目があります。 ", vbOKOnly + vbExclamation, "確認してください") End If If Y = 0 Then Msg = MsgBox("再チェックは必要ありません。 ", vbOKOnly + vbInformation, "確認してください") End If 体積に関しては、式マクロを組んでいます。 以上です。赤に反転させる方法は分かりませんでした・・・。 このように1つずつIf式でやるのは、あまり綺麗じゃないと思いますし、たったこれだけの簡単な式でも、うまく機能してくれません(涙) どうかお助けいただけませんでしょうか。よろしくお願いしたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
論理式は論理式で書いた方がシンプルになりますよ! ・未入力時の対策もした方がいいです。 Private Sub コマンド0_Click() Dim isOK(3) As Boolean Dim Answer As Integer isOK(1) = Not (Nz(Me.高) >= 20) isOK(2) = Not (Nz(Me.横) <= 10) isOK(3) = Not (Nz(Me.縦) < 5 Or Nz(Me.縦) >= 15) Me.高.BackColor = RGB(255, -255 * isOK(1), -255 * isOK(1)) Me.横.BackColor = RGB(255, -255 * isOK(2), -255 * isOK(2)) Me.縦.BackColor = RGB(255, -255 * isOK(3), -255 * isOK(3)) isOK(0) = isOK(1) * isOK(2) * isOK(3) If Not isOK(0) Then Answer = MsgBox("要再チェック項目があります。 ", vbOKOnly + vbExclamation, "確認してください") Else Answer = MsgBox("再チェックは必要ありません。 ", vbOKOnly + vbInformation, "確認してください") End If If Answer = vbYes Then ' ' Answer = vbYes の場合のアクションをどうするのか気になりました。 ' End If Me.体積 = Nz(Me.高) * Nz(Me.横) * Nz(Me.縦) End Sub
- Shige29
- ベストアンサー率23% (121/520)
単純に条件付き書式じゃダメなんですかね? 条件に合わない物はボックス内を赤くしておく。 そのうえで、それでもなおチェックボタンを押そうとしたら、注意文を出して押せなくする。 つまり、こう。 if 高さ >= 20 Then msgbox 略 exit sub else if 略 then ※条件数だけ追加する。 msgbox 略 exit sub end if exit subを入れることで、クリックイベントから抜け出します。 条件付き書式の方は、最初から赤いのが嫌なら、未入力状態の時は白。 規定外数値の場合は赤を指定すれば良いのでは? ちなみに未入力を指定するには、式を選んでから以下のような記述をします。 Nz([高さ],"")=""