Excel vba 计算函数给出错误 2029

Excel vba Evaluate function giving error 2029

我这辈子都搞不懂为什么 Evaluate 会抛出错误 2029 (#NAME)。该项目正在使用人口普查程序为任何给定数量的众议院议员(目前为 435 人)分配众议院席位。有许多扩大众议院规模的提议。我正在调查一些预算和经济影响。

我的工作簿有一个名为 sheet 的 PVC。我试图在 E 列(分配给给定状态的席位数量)中找到 C 列(两个字母的州缩写)中的值的最大值。对于这段代码中的无关内容,我提前表示歉意。信不信由你,我删除了好几行。

感谢您的任何建议。我尝试过用户定义的函数 MaxIf() 但运气不佳。

Sub CountSeatsEval()

  Dim lNoSeats, lG2, lastrow, lStateRow, lStateSeats, lStateNo As Long
  Dim sFileName, sPathName, sFunction, sSearchValue, sSearchState As String
  Dim sStateAbbr, vStateSeats As Variant
  Dim wsSource, wsTarget As Worksheet
  Dim rMaxRange, rSearchValue, rSearchState As Range
  Dim rLookup1 As Range
  Set wsSource = ThisWorkbook.Worksheets("PVC")
  'Following line is to make life easy temporarily
  Set wsTarget = ThisWorkbook.Worksheets("PVC")
  lNoSeats = wsSource.Range("G2").Value
...
  'Copy and paste G2 to replace formula with value
  wsTarget.Range("G2").Copy
  wsTarget.Range("G2").PasteSpecial (xlPasteValues)
  lastrow = wsTarget.Cells(Rows.Count, 6).End(xlUp).Row
...
  sSearchValue = "'PVC'!E2:$E$" & lastrow
  sSearchState = "'PVC'!$C"
...
   sStateAbbr = "CA"
   lStateRow = 6
   vStateSeats = Evaluate("IF((MAXIFS(sSearchValue, sSearchState, sSearchState))>0,(MAXIFS(sSearchValue, sSearchState, sSearchState)),1)")
End Sub

sSearchValuesSearchState 是 VBA 局部变量:

Dim sFileName, sPathName, sFunction, sSearchValue, sSearchState As String

请注意,此语句将 sSearchState 声明为 String,然后将所有其他 4 个变量保留为未声明类型,使它们成为隐式 Variant 变量(请参阅 VariableTypeNotDeclared Rubberduck 检查详情)。

作为局部 VBA 变量,它们存在于 VBA 运行时上下文中,而 Excel 对它们的存在一无所知 - 所以你得到 #NAME?错误:

在 Excel 中,每当您尝试计算包含 Excel 在当前上下文中无法解析的名称的公式时,您都会收到 #NAME? 错误。

所以您需要VBA计算变量的值,然后将结果表达式发送到Excel的计算引擎;您可以通过拆分字符串并使用 concatenation 运算符 (&):

来完成此操作
vStateSeats = wsTarget.Evaluate("IF((MAXIFS(" & sSearchValue & "," & sSearchState & "," & sSearchState & "))>0,(MAXIFS(" & sSearchValue & "," & sSearchState & "," & sSearchState & ")),1)")

不合格,Evaluate 将调用 [_Global].Evaluate,本质上是 Application.Evaluate,它可能会或可能不会产生所需的结果 - 通过使用特定的 Worksheet 对其进行限定对象,公式在该工作表的上下文中计算。