2017-08-01 66 views
2

MSDN documentation中,它表示Application.Evaluate方法採用單個參數,稱爲Name,其數據類型爲Variant。什麼Name意味着在這方面的描述是:Excel中「名稱」的含義VBA

公式或使用Microsoft Excel的命名約定對象的名稱。名稱的長度必須小於或等於255個字符。

*強調自己

究竟是Excel的命名約定是什麼意思?什麼規則管理它,以及這些規則在哪裏記錄?

在文章的備註部,有可能類型的Name可以使用的一些示例 - 但是一種類型的,可以在該方法中使用的

定義的名稱。您可以用宏的語言指定任何名稱。

這引出了問題;什麼是「宏的語言中的名字」定義爲?或者爲了更緊密地結合我試圖解決的具體編程問題; blahApplication.Evaluate(blah)可以正確評估函數嗎?

+0

https://support.office.com/en-gb/article/Define-and-use-names-in-formulas-4d0f13ac-53b7-422e-afd2-abd7ff379c64#bmsyntax_rules_for_names? – pnuts

+0

在鏈接下提供的示例清楚地顯示了可以使用哪種參數來使此方法正常工作。我不明白混淆的地方。 – Sgdva

+0

@sgdva是的,也許我不清楚這個問題,但在**備註**部分它有一行「*定義的名稱。您可以在宏的語言中指定任何名稱。*」 - 這是令人困惑的我(以及我所引用的摘錄中提到的「命名約定」)所談論的 - 一些神祕的「宏觀語言」)。也許* pnuts *'的鏈接將揭示一些亮點,但我會看看這個。 – Greedo

回答

6

在Excel中,一個Name(在範圍內的情況下),可能意味着幾件事情:

定義名稱

例如,如果您選擇單元格「A1」,並在左上角屏幕的一角更改爲「A1」至"MyCellName"您現在有一個Named Range。這允許您在公式中引用"MyCellName"而不是"A1"。這對於恆定的輸入範圍或爲更大範圍定義名稱時特別有用。

命名範圍可以重疊

說,例如起見,你現在突出"A1-B3",改變Name"MyNamedRange"。和以前一樣,你可以在公式中使用這個名字。您仍然可以參考"MyCellName"以及"A1",儘管它在"MyNamedRange"之內。

自動名稱

曾經創造了一個TablePivotTable?實質上,這些也成爲名稱。他們可以用他們的名字來引用。例如,如果您創建表格,則默認名稱爲Table1。在公式中,您可以使用Table1(對VLOOKUPS超級有用)引用整個表格。

默認名稱

最常見名稱是純範圍。 "A1"是指向單元格"A1"的名稱。每個細胞都一樣。即使已定義名稱的單元格仍然可以通過它們的範圍引用來引用。

的文章

所有文章說的目的是,你可以使用指的是一系列的標準方法是指一個範圍。如果我做Application.Evaluate "MyNamedCell"它將評估"A1",如果我做Application.Evaluate "A1"它將再次評估"A1"

對於評估變量,實際發生的是Application.Evaluate首先解析範圍參考(確定您所傳遞參數的含義),然後對該對象進行操作。只要您通過可評估的有效Range參考,它就會對其進行評估。這意味着你可以把一堆範圍引用放到一個類的數組中,這個類的屬性是...看看我要用這個去哪裏? 使用任何你想要的,但最後它需要知道範圍在哪裏。

編輯:關於您更新的'名稱是什麼?'的編輯,您需要一些可以傳入和評估的字符串。非常簡單。

Dim SomeFoo as Range 
Set SomeFoo = ThisWorkbook.Sheets(1).Range 

' Isnt what we need since evaluate wants a string 
' NOTE: This will implicitly take the .Value property of SomeFoo and 
' try to evaluate that. This is fine, but bad coding practice (assuming SomeFoo's value is the address) 
Application.Evaluate(SomeFoo).Value = "SomeString" 

' The address can be successfully evaluated as a string 
Application.Evaluate(SomeFoo.Address).Value = "SomeString" 

' If SomeFoo contains an address/name it can be successfully evaluated 
Application.Evaluate(SomeFoo.Value).Value = "SomeString" 
+0

另外:一個名稱不需要指向一個Range,它可以引用一個常量值,例如「10」或「whatever 「 –

+0

^學到了一些新的東西:)。 –