如何解决不匹配错误并更正类型?

时间:2019-08-07 16:40:07

标签: excel vba type-mismatch

我得到

  

不匹配错误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

1 个答案:

答案 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来验证每个函数的子结果的想法。

我认为您尝试执行的操作有点错误。我建议提出一个新问题,告诉您您实际要做什么。实际上,您尝试过的公式无法正常工作。