【问题标题】:Cannot individual add digits of number together in vba不能在vba中单独添加数字的数字
【发布时间】:2020-06-09 15:25:24
【问题描述】:

我希望能够将 4 位数字的各个数字相加,但它似乎不起作用。 我纯粹在 VBA 代码中执行此操作。结果输出到工作表。 我已经提取了部分代码并将其放入单独的宏中进行测试,仍然得到相同的结果。它将数字连接在一起。 我已经添加了很多 msgbox 行以查看它在做什么,但无法弄清楚为什么在这种情况下 main 的值没有添加到 intm 变量中。 变量 intd1 到 intd4 正确获取值,但是当我尝试将它们一起添加到 intm 时,它只是将它们连接在一起。

Sub AddDigits()
'
' Add individual digits of number together
'
Dim intd1, intd2, intd3, intd4, main, intm As Integer

main = 1234
    intd1 = Left(main, 1)
MsgBox (intd1)
    intd2 = Mid(main, 2, 1)
MsgBox (intd2)
    intd3 = Mid(main, 3, 1)
MsgBox (intd3)
    intd4 = Right(main, 1)
MsgBox (intd4)
    intm = intd1 + intd2 + intd3 + intd4
MsgBox ("intm = " & intm & Chr(13) & _
        "intd1 = " & intd1 & Chr(13) & _
        "intd2 = " & intd2 & Chr(13) & _
        "intd3 = " & intd3 & Chr(13) & _
        "intd4 = " & intd4 & Chr(13))
End Sub

【问题讨论】:

  • 这就是我们在 VBA 领域宣扬“每行一个点”的原因。
  • intm = Application.Evaluate("SUMPRODUCT(--(MID(" & main & ",ROW(1:4),1)))")

标签: vba addition


【解决方案1】:

当你按照你的方式声明变量时,第一位都是“变体”,而VBA你使用的Mid、Left和Right都是字符串函数,所以VBA将变体转换为字符串:

如果你适当地调暗变量,你会得到预期的结果:

Sub AddDigits()
'
' Add individual digits of number together
'
Dim intd1 As Integer, _
    intd2 As Integer, _
    intd3 As Integer, _
    intd4 As Integer, _
    main As Integer, _
    intm As Integer

main = 1234
    intd1 = Left(main, 1)
MsgBox (intd1)
    intd2 = Mid(main, 2, 1)
MsgBox (intd2)
    intd3 = Mid(main, 3, 1)
MsgBox (intd3)
    intd4 = Right(main, 1)
MsgBox (intd4)
    intm = intd1 + intd2 + intd3 + intd4
MsgBox ("intm = " & intm & Chr(13) & _
        "intd1 = " & intd1 & Chr(13) & _
        "intd2 = " & intd2 & Chr(13) & _
        "intd3 = " & intd3 & Chr(13) & _
        "intd4 = " & intd4 & Chr(13))
End Sub

【讨论】:

  • 谢谢。你是明星。我不明白为什么在一行上声明变量与分别声明每个变量不同?我认为简洁的编码更好。
  • @StephenePrivate 很高兴为您提供帮助!这正是微软设计它的方式......在 VBA 中你必须分别声明每一个,没有办法绕过它(除非你在代码中转换值,这并不理想)。这只是在 VBA 中工作时必须忍受的那些事情之一。一旦你习惯了它并没有那么糟糕。祝你项目的其余部分好运!
【解决方案2】:

除了上面的答案,你还可以在代码后面的任何地方转换数据类型。要将任何内容转换为 int,请使用 Cint。同样对于其他类型转换,您检查link

 intm = CInt(intd1) + CInt(intd2) + CInt(intd3) + CInt(intd4)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 2011-09-25
    • 2013-03-08
    相关资源
    最近更新 更多