进入无限循环

时间:2019-09-04 14:10:38

标签: excel vba

我是vba的新手,所以我从发现的示例以及类似的东西开始。

现在,我正在尝试做一个例子,我在互联网上发现了一个有关您必须猜测随机数的游戏的例子。

我的游戏基于3列和2个按钮。

在第一列“Nºintroducido”中,我想要显示用户在输入框中输入的数字,

在第二列“Situación”中,我希望程序告诉用户随机数是否大于,小于或等于他引入的数字

并且第三列“ Intentos”必须显示用户所需的尝试次数。

所有这些必须在我按下“ Jugar”按钮时发生,但是这进入了无限循环,我什至注释掉了代码块以了解问题出在哪里,而我找不到它。最极端的是,我使用的代码与示例中的代码相同。

image

这是我的代码:

Private Sub CommandButton2_Click()

    Dim aleatorio, minum, fila As Integer

    aleatorio = Math.Round(Math.Rnd * 100)
    Debug.Print aleatorio

    While aleatorio <> minum
        minum = InputBox("Introduce un nº entre 1 y 100", "", , 150, 150)

'        Range("c22").Offset(fila, 0).Value = minum
'
'        If aleatorio > minum Then
'            MsgBox "El nº es más alto"
'        ElseIf aleatorio < minum Then
'            MsgBox "El nº es más bajo"
'        Else
'            MsgBox "Correcto"
'        End If
    Wend
End Sub

我正在使用debug.print来知道随机数,并且我尝试放置出现的相同数字,但输入框永远不会关闭。

2 个答案:

答案 0 :(得分:4)

当您不定义变量时,VBA会尝试为您这样做。因此aleatorio = Math.Round(Math.Rnd * 100)将作为Variant/Single变量传递,而InputBox("Introduce un nº entre 1 y 100", "", , 150, 150)将作为Variant/String变量传递,请参见下面的“手表”:

enter image description here

因此,无限循环来自将数字值与字符串值进行比较,例如:71"71",这将永远不会相同。要进行更改,您可以将minim变量转换为数字值,例如:

minum = CDbl(InputBox("Introduce un nº entre 1 y 100", "", , 150, 150))

或者:

minum  = Application.InputBox("Introduce un nº entre 1 y 100", "", , 150, 150, Type:=2)

或者甚至更好地声明变量:

Dim aleatorio As Double, minum As Double, fila as Double

答案 1 :(得分:3)

尝试将所有变量都定义为整数,第一次通过minum变量将其读取为字符串并且从不等于整数变量时,我尝试了此操作,并奏效了。

Private Sub CommandButton2_Click()

Dim aleatorio As Integer, minum As Integer, fila As Integer

aleatorio = Math.Round(Math.Rnd * 100)
Debug.Print aleatorio

While aleatorio <> minum
    minum = InputBox("Introduce un nº entre 1 y 100", "", , 150, 150)

    Range("c22").Offset(fila, 0).Value = minum

    If aleatorio > minum Then
        MsgBox "El nº es más alto"
    ElseIf aleatorio < minum Then
        MsgBox "El nº es más bajo"
    Else
        MsgBox "Correcto"
    End If
Wend
End Sub