3

以下のコードがわかりません、助けてください。

変数 b に対して型の不一致エラーを返し続けます。

Dim a As Integer
Dim b As String

a = InputBox("Input the number of items", "Total Number of Items.")
b = InputBox("Which Block?", "Total Number of Items.")

Do While b <> "a" Or "A" Or "B" Or "b"
        MsgBox ("Invalid Block. Try again, Input A or B")
        b = InputBox("Which Block?", "SELECT BLOCK.")
Loop
     If b = "a" Or "A" Then
        Me.ComboBox1.List = Worksheets("Sheet1").Range("a3:a39").Value
    Else
        Me.ComboBox2.List = Worksheets("Sheet2").Range("a3:a35").Value
    End If
4

3 に答える 3

5

を使用Application.InputBoxして、テキスト入力を強制しa、数値入力を強制することができますb

を使用UCASE$すると、テストが短縮されます

Dim a As Long
Dim b As String

a = Application.InputBox("Input the number of items", "Total Number of Items.", , , , , , 1)
b = Application.InputBox("Which Block?", "Total Number of Items.", , , , , 2)

Do While UCase$(b) <> "A" And UCase$(b) <> "B"
b = Application.InputBox("Which Block?", "Invalid Entry - Total Number of Items.", , , , , 2)
Loop
于 2012-12-14T07:43:59.360 に答える
1

論理的な欠陥だと思います。変化する

Do While UCase$(b) <> "A" or UCase$(b) <> "B"

の中へ

Do While UCase$(b) <> "A" AND UCase$(b) <> "B"

于 2012-12-14T09:46:11.863 に答える
0

問題は、「b」変数をテストする方法です。

違う

Do While b <> "a" Or "A" Or "B" Or "b"

Do While b <> "a" Or b <> "A" Or b <> "B" Or b <> "b"

同じことが if 句にも当てはまります

代わりに

If b = "a" Or "A" Then

使用する

If b = "a" Or b = "A" Then

編集:

Do ループに正しい構文を使用すると、While 条件の作成方法が原因で、コードが無限ループに入りました。たとえば、inputBox が "B" を取得した場合、それは sill "<>b" or "<>a" or... なので、再びループに入ります。ユーザーが何を入力しても、他の条件とは常に異なります。

編集2:

これを試してください。同じエラーを取得しますか?

Sub TryThis()
    Dim a As Integer
    Dim b As String

    a = InputBox("Input the number of items", "Total Number of Items.")
    b = InputBox("Which Block?", "Total Number of Items.")

    Do While b <> "a" And b <> "A" And b <> "B" And b <> "b"
            MsgBox ("Invalid Block. Try again, Input A or B")
            b = InputBox("Which Block?", "SELECT BLOCK.")
    Loop

    Debug.Print "InputBox b Correctly filled"

    If b = "a" Or b = "A" Then
        Debug.Print "User Input A"
    Else
        Debug.Print "User Input: " & b
    End If
End Sub
于 2012-12-14T09:05:10.337 に答える