我是vba的新手,所以我从发现的示例以及类似的东西开始。
现在,我正在尝试做一个例子,我在互联网上发现了一个有关您必须猜测随机数的游戏的例子。
我的游戏基于3列和2个按钮。
在第一列“Nºintroducido”中,我想要显示用户在输入框中输入的数字,
在第二列“Situación”中,我希望程序告诉用户随机数是否大于,小于或等于他引入的数字
并且第三列“ Intentos”必须显示用户所需的尝试次数。
所有这些必须在我按下“ Jugar”按钮时发生,但是这进入了无限循环,我什至注释掉了代码块以了解问题出在哪里,而我找不到它。最极端的是,我使用的代码与示例中的代码相同。
这是我的代码:
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来知道随机数,并且我尝试放置出现的相同数字,但输入框永远不会关闭。
答案 0 :(得分:4)
当您不定义变量时,VBA会尝试为您这样做。因此aleatorio = Math.Round(Math.Rnd * 100)
将作为Variant/Single
变量传递,而InputBox("Introduce un nº entre 1 y 100", "", , 150, 150)
将作为Variant/String
变量传递,请参见下面的“手表”:
因此,无限循环来自将数字值与字符串值进行比较,例如: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