首页 > 解决方案 > 如何在 VBA for Excel 中声明(Dim)应用程序匹配的总和?

问题描述

我试图声明三个Application.Match行号的总和。如果我将所有这些部分添加到Watches中,我会看到每个匹配项的Values(例如:1、1、1),但是当我将它们相加时,我会在 watch Value中得到“0” 。下面是调试时的相关代码和观察结果。

Dim S13 As Integer
 S13 = Application.Match(K(3), TF13, 0) + Application.Match(K(2), TC13, 0) + Application.Match(K(1), TB13, 0)
Dim SD13 As Integer
 SD13 = S13 / 3

手表:表达式:值:类型
手表:Application.Match(K(1), TB13, 0):1:Variant/Double
Watch:Application.Match(K(2), TC13, 0):1:Variant/Double
Watch : Application.Match(K(2), TF13, 0) : 1 : Variant/Double
Watch : S13    : 0 : Integer
Watch : SD13 : 0 : Integer

我在 S13 上尝试了“Long”和其他声明,但我真的只需要它是“Integer”,因为这个数字应该超过类型字符限制。

顺便说一句,我试图在下面声明一个简单的公式,但仍然在Watches中将“0”作为

Dim X As Integer: X = 3 / 3
Dim Y As Integer: Y = 1 + 1 + 1
Dim Z As Integer: Z = "1" + "1" + "1"

也就是说,我不太确定Application.Match是否与该问题有关。尽管如此,我想我会在我的情况下提到它。

更新:新的测试场景
我打开了一个新的工作簿和模块,输入了下面的代码并得到了预期的结果,TEST1 为“2”,TEST2 为“1”。看起来我可能有不同的问题影响我的其他工作簿。有人想出主意来帮助我开始调查吗?

Sub TEST()
Dim TEST1 As Integer: TEST1 = 1 + 1 ' Works
Dim TEST2 As Integer: TEST2 = 2 / 2 ' Works
MsgBox TEST1 & " : " & TEST2 ' Message is "2 : 1"
End Sub

问题已解决:
我发现了我的问题,提供的信息无法看到(抱歉)。我的代码就像:

ElseIf...
'Dim don't go here...
    Dim S13 As Integer: S13 = Application.Match(K(3), TF13, 0) _
      + Application.Match(K(2), TC13, 0) _
      + Application.Match(K(1), TB13, 0)
    Dim SD13 As Integer: SD13 = S13 / 3
ElseIf Not IsError(Application.Match(K(3), TF13, 0)) _
  And Not IsError(Application.Match(K(2), TC13, 0)) _
  And Not IsError(Application.Match(K(1), TB13, 0)) Then
    If <<some formula to help me validate match above (e.g.: all true and all same number)>> Then
      Worksheets("MATCHES").Range("$A" & ARR & ":" & "$F" & ARR) _
       = TR13.Range("$A" & SD13 & ":" & "$F" & SD13)
    End If
ElseIf...

该代码将我的声明放在我的ElseIf/Then之前(进入之前的ElseIf),而不是将它放在需要声明变量的Then之后。下面是更正。

ElseIf...
ElseIf Not IsError(Application.Match(K(3), TF13, 0)) _
  And Not IsError(Application.Match(K(2), TC13, 0)) _
  And Not IsError(Application.Match(K(1), TB13, 0)) Then
'Dim go here...
    Dim S13 As Integer: S13 = Application.Match(K(3), TF13, 0) _
      + Application.Match(K(2), TC13, 0) _
      + Application.Match(K(1), TB13, 0)
    Dim SD13 As Integer: SD13 = S13 / 3
    If <<some formula to help me validate match above (e.g.: all true and all same number)>> Then
      Worksheets("MATCHES").Range("$A" & ARR & ":" & "$F" & ARR) _
       = TR13.Range("$A" & SD13 & ":" & "$F" & SD13)
    End If
ElseIf...

标签: excelvba

解决方案


Dim S13 As Integer
 S13 = CInt(Application.Match(K(3), TF13, 0)) + CInt(Application.Match(K(2), TC13, 0)) + CInt(Application.Match(K(1), TB13, 0))
 Dim SD13 As Integer
  SD13 = S13 \ 3

推荐阅读