如何在 VBA for Excel 中声明(变暗)应用程序匹配项的总和?



我正在尝试声明三个应用程序.匹配行号的总和。如果我将所有这些部分添加到手表中,我会看到每个匹配项的值(例如:1、1、1(,但是当我将它们相加时,我在手表中得到"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

手表: 表达式 : 值 : 类型 手表 : 应用程序匹配(K(1(, TB13, 0( : 1 : 变体/双精度 监视 : 应用程序匹配(K(2(, TC13, 0( : 1 : 变体/双手表 :应用程序匹配(K(2(, TF13, 0( : 1 : 变体/双


手表 : S13 : 0 : 整数
监视 :SD13  0 : 整数

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

顺便说一句,我试图在下面声明一个简单的公式,并且仍然在手表中得到"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与该问题有任何关系。尽管如此,我想我会为我的情况提及它。

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

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...
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

请尝试以下操作:

Dim S1 As Integer
Dim S2 As Integer
Dim S3 As Integer
S1 = Application.Match(K(3), Range("TF13"), 0) 
S2 = Application.Match(K(2), Range("TC13"), 0) 
S3 = Application.Match(K(1), Range("TB13"), 0)
Dim SD13 As Integer
SD13 = (S1 + S2 + S3) / 3
msgbox "S1: " & S1 & ", S2: " & S2 & ", S3: " & S3 & ", SD13: " & SD13

现在 S1、S2、S3 和 SD13 的结果如何?

好的,所以我解决了我的问题,所提供的信息看不到这个问题。不好意思。

我的代码是这样的:

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...

相关内容

最新更新