You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Basic 4 运行计算器代码提示Expected Array报错如何解决

报错原因分析

核心问题是你在代码中声明了名为Val的字符串变量,覆盖了Visual Basic内置的Val()类型转换函数。当你后续调用Val(num)、Val(txtOutput.Text)时,VB会将Val识别为你自定义的普通变量,认为你要执行数组取值操作,因此抛出「Expected Array(期望数组)」报错。

可行解决方案
  • 第一步:直接删除代码中的Dim Val As String这行声明即可,Val是VB原生内置函数,无需额外声明即可直接使用,删除后即可解决当前的报错问题。
  • 第二步:可同步优化代码中存在的其他逻辑问题,避免后续出现其他运行错误:
    • 当前代码中operator是过程内局部变量,每次点击等于按钮都会被重置为0,无法读取之前选择运算符时存储的值,需要将operator、num变量改为模块级/全局变量,放在过程外部声明
    • 代码中声明的sd变量未被使用,可以直接删除
    • 执行除法、取模运算前需要判断除数是否为0,避免触发除零报错
修正后参考代码
' 把这两个变量放到代码模块的顶部,过程外声明,作为模块级变量
Dim operator As Integer
Dim num As String

Private Sub Command12_Click()
    Dim result As Integer
    ' 除数校验,避免除零错误
    If (operator = 4 Or operator = 5) And Val(txtOutput.Text) = 0 Then
        txtOutput.Text = "错误"
        Exit Sub
    End If

    If operator = 1 Then
        result = Val(num) + Val(txtOutput.Text)
        txtOutput.Text = result
    ElseIf operator = 2 Then
        result = Val(num) - Val(txtOutput.Text)
        txtOutput.Text = result
    ElseIf operator = 3 Then
        result = Val(num) * Val(txtOutput.Text)
        txtOutput.Text = result
    ElseIf operator = 4 Then
        result = Val(num) / Val(txtOutput.Text)
        txtOutput.Text = result
    ElseIf operator = 5 Then
        result = Val(num) Mod Val(txtOutput.Text)
        txtOutput.Text = result
    ElseIf operator = 6 Then
        result = Val(num) * Val(num)
        txtOutput.Text = result
    End If
End Sub

内容的提问来源于stack exchange,提问作者Fraaaaaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:18:03