2016-10-09 104 views
-1

我想用VBScript来处理EXCEL而不是VBA。但我遇到的代码中的错误调用方法时Range.Find,见下如何在VBS中使用excel内建常量

Function find_range(wb, domain, var) 
    Dim sheet 
    Dim rg1, rg2, rg3 
    Set sheet = wb.Sheets(domain) 

    Set rg1 = sheet.Range("D:D").Find(var, , xlValues, xlWhole) 

    If Not rg1 is Nothing Then 
     'msgbox rg1.Cells(1,1).row 
     Set rg2 = sheet.Cells(rg1.Cells(1,1).row, 19) 
     msgbox(rg2.value) 
    End if 
End Function 

执行时find_range功能,我

变量未定义 “xlValues” “xlWhole”

错误。

所以我想我不能在VBScript中以这种方式使用excel内置常量。
那么正确的方法是什么?

+2

通过声明它们。通常我们只是把const的值放入。所以'func(xlCrap)'变成'func(3)'。在https://www.microsoft.com/zh-cn/download/details.aspx?id=2764 –

+0

@Noodles Link中断时,请参阅const关键字。 –

+0

看起来它已被取下。我把一份副本放在我的skydrive上https://1drv.ms/f/s!AvqkaKIXzvDieQFjUcKneSZhDjw –

回答

2

不幸的是,这些命名常量是Excel对象库的一部分,VBScript无法引用,所以最好的方法是在Excel VBA中的对象浏览器中查找命名常量或通过各种引用在线查找,然后创建自己的命名常量和在你的代码中使用它们。

在这个例子中,您使用了两个枚举,可以通过查找Range.Find() method来识别。

  • xlValues被命名在xlFindLookIn枚举常量,其值为-4163
  • xlWholexlLookAt枚举中的一个已命名常量,其值为1

所以一旦你知道了值,你可以定义它们,你的代码应该工作,不需要更多的更改。

Const xlValues = -4163 
Const xlWhole = 1 

理想的情况下,这些值应该在你的脚本的全局范围,使他们对任何功能或程序访问的声明。

您可能会问为什么不指定数值?那么,如果你在多个地方使用这个值,那么这确实是一个有效的方法,那么如果该值有变化(但在这种情况下不太可能),那么你必须在多个地方修改该值。使用命名常量,您可以进行更改,并且在代码中引用该值的任何地方也会发生更改。

还值得注意的是,VBScript只对数值感兴趣,所以技术上你可以任意指定常量。但是,遵循命名约定是一种很好的做法,特别是如果您在Excel VBA中重新使用了功能代码。