2016-10-09 27 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中重新使用了功能代碼。