评估()不起作用

时间:2015-08-28 17:01:44

标签: excel excel-vba vba

我是evaluate的新手。因此,如果以下代码有效

If Evaluate("=NOT(ISERROR(MATCH(" & temp & ",C:C,0)))") Then

为什么下面没有这个?

If Evaluate("=NOT(ISERROR(MATCH(" & c & ",sal,0)))") Then

temp是一个字符串,c是数组中的一个元素,它也看起来也是一个字符串。 C:C是活动表上的范围。 sal是单独表格上的范围。

Set wsSal = ThisWorkbook.Worksheets("Sal Sum")    
Set sal = wsSal.Range("C17:C50")

我试过了

If Evaluate("=NOT(ISERROR(MATCH(c ,sal,0)))") Then

这给我一个运行时错误13类型不匹配。

通过不工作,前者输入if语句,后者不输入。

1 个答案:

答案 0 :(得分:2)

您可以创建一个名为sal的已定义名称,而不是将sal定义为对象变量并将其设置为范围。

从工作表中打开名称管理器。

输入姓名' sal`

Refers To字段中,输入='Sal Sum'!$C$17:$C$50

确认姓名。

现在,您可以按照您所描述的方式使用Evaluate()和sal

<强>更新

这是您可以更容易维护的另一种方式。

使wsSal成为模块级变量。

使sal_成为模块级常量:

Const sal = "C17:C50"

创建一个功能:

Function sal()
    sal = wsSal.Range(sal_)
End Function

现在,您可以按照您所描述的方式使用Evaluate()和sal