我得到
不匹配错误13
在尝试运行我的代码时。我想我知道是什么原因造成的,但我不知道该如何解决。
不匹配错误是说RegionFcstAmt1 type is Variant/String
,但是右边的表达式类型是Variant / Integer
Sub ShowUserForm1()
TheAdjustment = ActiveCell.Value
TheSubFamily = Cells(ActiveCell.Row, 1)
Site = Cells(1, 1)
UserForm1.RegionFcstAmt1.Value = Application.WorksheetFunction.IfError(Application.WorksheetFunction.SumProduct(Application.WorksheetFunction.SumIfs(Application.WorksheetFunction.Index(Sheets("REV DATA").Range("$AK:$BH"),Application.Match(ForecastDate, Sheets("REV DATA").Range("$AK$3:$BH$3"), 0)), Sheets("REV DATA").Range("$A:$A"), Sheets("TOTAL CHANGES").Range("$A6"), Sheets("REV DATA").Range("$H:$H"), TheSubFamily, Sheets("REV DATA").Range("$D:$D"), Sheets("TOTAL CHANGES").Range("$C6"), Sheets("REV DATA").Range("$E:$E"), Sheets("TOTAL CHANGES").Range("$D6:$F6"))), 0)
UserForm1.Show
End Sub
答案 0 :(得分:0)
主要问题是,您嵌套所有WorksheetFunction而不验证每个结果。我建议将每个WorksheetFunction的每个结果写入一个变量,并在另一个WorksheetFunction中使用它之前对其进行验证。
这样,调试起来就容易得多,因为如果其中一个出现错误,您就可以准确地找到哪个。
首先定义您的工作表,这样您就不必一遍又一遍地重复
Dim wsData As Worksheet
Set wsData = ThisWorkbooks.Worksheets("REV DATA")
Dim wsTotal As Worksheet
Set wsTotal = ThisWorkbooks.Worksheets("TOTAL CHANGES")
Dim MatchResult As Double
MatchResult = Application.Match(ForecastDate, wsData.Range("AK3:BH3"), 0)
'note that here is the first problem because `ForecastDate` is not defined and therefore empty
'validate if match was successful if not exit
If IsError(MatchResult) Then
MsgBox "'" & ForecastDate & "' did not match.", vbCritical
Exit Sub
End If
Dim IndexResult As Double
IndexResult = Application.WorksheetFunction.Index(wsData.Range("AK:BH"), MatchResult)
Dim SumIfsResult As Double
SumIfsResult = Application.WorksheetFunction.SumIfs(IndexResult, wsData.Range("A:A"), wsTotal.Range("A6"), wsData.Range("H:H"), TheSubFamily, wsData.Range("D:D"), wsTotal.Range("C6"), wsData.Range("E:$"), wsTotal.Range("D6:F6"))), 0)
因此现在变得很奇怪,因为您尝试SumProduct
的结果SumIfs
(仅返回类型为Double
的一个值)。因此,这根本没有任何意义,因为例如一个值的SumProduct
例如。 5
将是5
。
这里的问题是,您不能使用WorksheetFunctions逐个“翻译” 单元格中的公式。也许看看Application.Evaluate method是否适合您。
至少上面的代码显示了如何结合变量使用WorksheetFunctions来验证每个函数的子结果的想法。
我认为您尝试执行的操作有点错误。我建议提出一个新问题,告诉您您实际要做什么。实际上,您尝试过的公式无法正常工作。