excel方括號在VBA中的妙處

在許多程序中,我們經常會看到像圖1所示的代碼片段,即出現了帶方括號的字符串 。

excel方括號在VBA中的妙處


圖1
這些方括號里面的字符串為工作簿中定義的名稱,方括號的作用就是告訴VBE編譯器將名稱轉換成相應的單元格或單元格區域 。
其實,這是Evaluate方法的簡寫格式 。
根據VBA幫助文件指出,Evaluate方法將Excel名稱轉換為對象或值 。這樣的解釋確實有點模糊 。
其語法為:
expression.Evaluate(Name)
expression可以省略,即簡寫為:
Evaluate(Name)
參數不只限于名稱,還可以是公式表達式字符串 。
如果參數中沒有變量,還可以更簡略地寫為:
[Name]
使用Evaluate加上帶引號的參數的方法的優點是,可以在表達式中使用變量 。而使用括號簡寫的優點是,不僅簡短,而且在引用對象時會出現對象的屬性和方法的智能提示且不會導致失敗,例如代碼:
Evaluate(“Sheet2”).Activate
運行失敗 。而代碼:
[Sheet2].Activate
成功運行,并且在輸入[Sheet2].后會出現屬性和方法的提示 。
其參數可以是:
A1樣式引用 ??梢允褂肁1樣式引用中對單個單元格的任何引用,所有引用都應該是絕對引用 。
單元格區域 ??梢允褂靡脝卧竦膮^域、交叉和聯合操作符(分別是冒號、空格和逗號) 。
定義的名稱 。可以在宏語言中指定任意名稱 。
外部引用 ??梢允褂茫〔僮鞣赶蚱渌ぷ鞑局械膯卧窕蛘呙Q 。
圖表對象 ??梢灾付ㄈ我鈭D表對象名稱 。
公式表達式 。代表任何有效的公式表達式的字符串 。
下面是VBA幫助中給出的一些示例代碼 。
下列表達式是等價的:
[A1].Value=https://www.i8ku.com/2021/25
Evaluate(“A1”).Value=https://www.i8ku.com/2021/25
trigVariable=[SIN(45)]
trigVariable=Evaluate[“SIN(45)”]
Set firstCellInSheet =Workbooks(“BOOK1.XLS”).Sheets(4).[A1]
Set firstCellInSheet = Workbooks(“BOOK1.XLS”).Sheets(4).Evaluate(“A1”)
下面的代碼演示了在Evaluate方法中使用變量,將工作表Sheet1中單元格A1變為粗體格式:
Worksheets(“Sheet1”).Activate
boldCell = “A1”
Application.Evaluate(boldCell).Font.Bold = True
為什么要使用Evaluate方法?
下面是幾個使用Evaluate方法的優點:
1. 代碼更簡短
大多數情形下,Evaluate方法可以使用方括號的簡寫形式,使代碼更簡短 。
下面的代碼在單元格A1中輸入數值100:
[A1].Value = https://www.i8ku.com/2021/100
[A1] = 100
2. 可以在VBA中使用更多的工作表函數
在VBA中,通過WorksheetFunction對象可以使用很多在VBA中沒有與之等價的工作表函數,但仍有一些工作表函數不能在VBA中使用 。然而,通過Evaluate方法卻可以在VBA中使用這些函數,或者是工作表數組公式 。
例如,由于VBA有等效的IsEmpty函數提供了工作表函數ISBLANK相同的功能,因此不能通過WorksheetFunction對象使用ISBLANK函數 。但是,如果需要在VBA使用ISBLANK函數,可以使用代碼:
Evaluate(“=ISBLANK(A1)”)
[ISBLANK(A1)]
如果工作表單元格A1為空,則返回TRUE,否則返回FALSE 。
3. 公式更直觀
使用Evaluate方法比使用Application.WorksheetFunction更簡單且更直觀,其外觀與工作表函數相同,就像在單元格中編寫的公式一樣 。
例如,在工作表中使用VLOOKUP函數:
=VLOOKUP(D1,A1:B4,2,FALSE)
通常,在VBA中的等效代碼為:
Application.WorksheetFunction.VLookup(Range(“D1”),Range(“A1:B4”), 2, False)

猜你喜歡