2

我想通过 VBA 使用它-

=MATCH("PlanA",A:A,0)

EVALUATE.

Sub Test()

Dim SectionStartRow As Integer    
Dim planname As String
planname = "PlanA"

SectionStartRow = [MATCH(planname,A:A,0)] 'Error 2029 /// Type mismatch '13

End Sub

我已经尝试过:

SectionStartRow = Evaluate("MATCH(planname,A:A,0)") 'Error 2029 /// Type mismatch '13

SectionStartRow = Evaluate("MATCH(" & planname & ",A:A,0)")

但似乎没有任何效果。请注意,planname变量被一长串函数拒绝。

4

2 回答 2

6

问题是planname需要用字符串引号括起来。excel 等效项是=MATCH("PlanA",A:A,0),并且传递给的字符串Evaluate应与该字符串相同:

SectionStartRow = Evaluate("=MATCH( " & Chr(34) & planname & Chr(34) & ",A:A,0)")

工作正常(使用 Excel 2010 测试)

Chr(34)代表"ASCII 编号中的符号。

另一种解决方法是定义

planname = Chr(34) & "PlanA" & Chr(34)

然后做 SectionStartRow = Evaluate("=MATCH( " & planname & ",A:A,0)")

顺便说一句,我会定义SectionStartRowasLong和 not Integer,因为Integer 如果匹配行在 32,767 之后会抛出错误。

另请注意,在这种情况下, Evaluate(即方括号[])的简写形式将不起作用。仅当括号内的所有内容都是常量而不是变量时才有效。

我希望这有帮助!

于 2014-05-27T09:28:15.537 回答
0

我偶然发现了这个有用的问题,并努力不仅要连接planname它,还要用不同的表来解决它。

我对 Ioannis 回答中的双引号和 & 符号感到困惑。 planname = Chr(34) & "PlanA" & Chr(34)

在我的示例中,以下行的一个版本正确解析了第一个参数。所以只有一个 "& variable &"对我有用。

SectionStartRow = Evaluate("=MATCH('Sheet1'!C " & variablename & ",A:A,0)")

于 2019-03-06T11:32:16.710 回答