excel - 如何在 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...
解决方案
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
推荐阅读
- html - R中的动态抓取:需要用户滚动以加载更多信息的网页
- angular - 如何在我的应用程序中显示我的库的组件
- javascript - 检查 mongoDB 的返回文档是否具有特定属性
- python - 从 mysql 数据库中检索表情符号
- macos - 将 Safari 中的固定标签导出到新 Mac 的方法是什么?
- javascript - 如何启用 HTML5 Canvas Pan 效果
- php - php exec()没有显示预期的输出
- sql - 从月份获取所有日期 - Oracle SQL
- python - 通过替换空值来合并具有相同初始元素的子列表
- c# - 如何使用 .NET 从 AWS S3 检索时过滤模式匹配文件?