楼主你要实现相同的题目,应该先生成一个随机的题目册,然后再开始答题,而不是像你那样直接随机题目
而且,text控件本身就有用户输入功能,并不需要Inputbox进行输入,text也由于会被修改,并不适合用来展示题目。
我给一个框架,代码并没有写完,只写到生成题目并展示,并且可以记录答案。最后得分、清空结果、打乱顺序没有写。如果有保存题目的需要可以写入txt文档进行保存读取。


Dim Str As String '记录数据,每次text1被修改时,检查输入的是否是数字,如果不是数字,则改回之前的数字
Dim QuestionA() As Integer '记录第一个数字
Dim QuestionB() As Integer '记录第二个数字
Dim QuestionC() As Byte '记录符号,1-5分别对应加减乘除余
Dim Result() As String '记录结果
Dim QuestionNum As Integer '记录题目数量
'生成题目
Private Sub Command2_Click()
Dim InputStr As String
'确保输入的数字为正整数,且不超过1000
Do
InputStr = InputBox("请输入需要生成的题目数量:" & Chr(10) & "(请输入正整数,最多生成1000题)", "计算", "100")
Loop Until (IsNumeric(InputStr) And (Not InputStr Like "*.*") And Val(InputStr) > 0 And Val(InputStr) <= 1000) Or InputStr = ""
If InputStr = "" Then Exit Sub
List1.Clear
QuestionNum = Val(InputStr) '记录题目数量
'重新定义数组范围,由于代码序号是从0开始,所以减少一个
ReDim QuestionA(QuestionNum - 1) As Integer
ReDim QuestionB(QuestionNum - 1) As Integer
ReDim QuestionC(QuestionNum - 1) As Byte
ReDim Result(QuestionNum - 1) As String
Dim Box As Integer '用于交换数字时,临时存储
For i = 0 To QuestionNum - 1
Result(QuestionNum - 1) = "" '清空答案,题目则必定随机一次,没必要清空
Randomize '初始化随机数列
QuestionC(i) = Int(Rnd() * 5) + 1
If QuestionC(i) = 4 Then '除法单独设置以保证结果为整数
'先随机除数,防止出现结果为一的送分题,除数应小于50
QuestionB(i) = Int(Rnd() * 40) + 10 '如果不是题目要求,个人建议除数应该可以取一位数
'随机一个不为1的正整数商,并满足被除数为两位数,将商乘以除数得出被除数
QuestionA(i) = QuestionB(i) * (Int(Rnd * Int(100 / QuestionB(i) - 1)) + 2)
Else
QuestionA(i) = Int(Rnd() * 90)
QuestionB(i) = Int(Rnd() * 90)
If QuestionC(i) = 5 Then '求余时,防止被除数小于或等于除数时给出送分题
Do Until QuestionA(i) <> QuestionB(i) '确保不相等
QuestionB(i) = Int(Rnd() * 90)
Loop
If QuestionA(i) < QuestionB(i) Then '交换两个数字
Box = QuestionA(i)
QuestionA(i) = QuestionB(i)
QuestionB(i) = Box
End If
End If
End If
List1.AddItem QuestionA(i) & " " & 获取符号(QuestionC(i)) & " " & QuestionB(i) & " = "
Next
End Sub
Private Sub List1_Click()
'显示题目和玩家输入的答案
Dim Spl As Variant
Spl = Split(List1.List(List1.ListIndex), "=") '以等号分割,等号前为题目,等号后为答案
Label1 = Spl(0) & "="
Str = Mid(Spl(1), 2) '分割后,答案前有一个空格,去除这个空格
Text1 = Str
End Sub
'防止文本框输入非数字内容
Private Sub Text1_Change()
If List1.ListIndex = -1 Then Text1 = "": Exit Sub '如果没有选择题目,则不计算
'由于结果没有小数点,小数点不用单独检测
'检测文本框在输入后,内容是否为数字或者为空或者为负号
If Not (IsNumeric(Text1) Or Text1 = "" Or Text1 = "-") Then
Text1 = Str '如果输入后文本框内不是数字,则改回之前记录的文本
Else
Str = Text1 '如果输入后文本框内是数字,则记录文本框内容
Result(List1.ListIndex) = Text1 '记录答案
List1.List(List1.ListIndex) = QuestionA(List1.ListIndex) & " " & 获取符号(QuestionC(List1.ListIndex)) & " " & QuestionB(List1.ListIndex) & " = " & Result(List1.ListIndex)
End If
End Sub
'为了防止看不懂,这个公式我用中文
Function 获取符号(Operator As Byte) As String
Select Case Operator
Case 1: 获取符号 = "+"
Case 2: 获取符号 = "-"
Case 3: 获取符号 = "*"
Case 4: 获取符号 = "/"
Case 5: 获取符号 = "M"
End Select
End Function