【问题标题】:Calculator won't perform basic arithmetic calculations计算器不会执行基本的算术计算
【发布时间】:2020-07-01 01:42:42
【问题描述】:

我对 VBA 比较陌生,并且一直在努力学习它。我首先尝试编写一个计算器并对其进行编程以执行基本计算,例如加法、除法、减法和乘法。但是,当我尝试使用下面的代码执行这些函数时,计算器不会编译并执行上述计算。

Private Sub cmdBtnEql_Click()

On Error GoTo ErrOcccered
     
     If txtDisplay = "Cannot divide by Zero" Then txtDisplay = Empty
     
     
     If txtRes <> "" And calVal Then
        FNum = Val(txtDisplay): SNum = Val(txtRes)
        Select Case calVal
            Case "Add"
                txtRes = FNum + SNum
            Case "Minus"
                txtRes = FNum - SNum
            Case "Multiplication"
                txtRes = FNum * SNum
            Case "Divide"
                If SNum = 0 Then
                    txtRes = "Cannot divide by zero"
                Else
                    txtRes = FNum / SNum
                End If
            Case Else
        End Select
    End If
ErrOcccered:

End Sub

但是,此过程实际上并不执行上述计算。我可以单击按钮,并且相应的数字确实显示在用户表单的文本框中,没有进行任何计算。这段代码不是我个人的,我正在使用我在网上找到的另一个代码,并试图了解所有语法和语义在 VBA 中是如何工作的。我感谢您的帮助!谢谢

【问题讨论】:

  • 请提供minimal reproducible example。逻辑的关键位似乎是Select Case calVal,但你让我们不知道calVal 是什么或它如何获得它的价值。我们或许可以猜到——但最好告诉我们。至于如何粘贴代码——突出显示它并点击Ctrl + k(或使用编辑窗口中的代码图标)。
  • txtRes,你在做什么?你似乎什么也没做,然后想知道为什么什么都没有发生。这个 sub 似乎实际上并没有做任何事情。

标签: excel vba excel-2016


【解决方案1】:

在代码的这一行放置一个断点。 If txtRes &lt;&gt; "" And calVal Then 使用 F8 单步执行您的代码并找出它的确切作用。

你会发现它永远不会超过这一行,因为有一个测试 calVal 是否有一个不是零的值。当然,calVal 应该包含一个单词,例如“Add”,因此不能有除零以外的数值。

将此测试更改为

If txtRes <> "" And len(calVal) > 0 Then

但仍然使用 F8 的方法来检查您的代码。

顺便说一句,txtRes = FNum + SNum 在技术上是正确的,但实际上令人困惑。上面的一位评论员将 txtRes 误认为是一个变量。更好的语法是在代码中包含默认属性。

txtRes.Value = FNum + SNum

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多