• 締切済み

アクセス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式でやるのは、あまり綺麗じゃないと思いますし、たったこれだけの簡単な式でも、うまく機能してくれません(涙) どうかお助けいただけませんでしょうか。よろしくお願いしたします。

みんなの回答

noname#140971
noname#140971
回答No.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)
回答No.1

単純に条件付き書式じゃダメなんですかね? 条件に合わない物はボックス内を赤くしておく。 そのうえで、それでもなおチェックボタンを押そうとしたら、注意文を出して押せなくする。 つまり、こう。 if 高さ >= 20 Then msgbox 略 exit sub else if 略 then ※条件数だけ追加する。 msgbox 略 exit sub end if exit subを入れることで、クリックイベントから抜け出します。 条件付き書式の方は、最初から赤いのが嫌なら、未入力状態の時は白。 規定外数値の場合は赤を指定すれば良いのでは? ちなみに未入力を指定するには、式を選んでから以下のような記述をします。 Nz([高さ],"")=""

関連するQ&A

専門家に質問してみよう