2014-12-02 140 views
5

考慮variant()和variant之間是否有區別?

Dim u As Variant, v() As Variant 

u = Range("A1:B3").Value 
v = Range("A1:B3").Value 

現在有u和v之間有什麼區別?如果不是,將v聲明爲變體數組而不是將其簡單地聲明爲變體是多餘的?

+0

我沒有看到任何好處聲明它作爲一個變種數組。 – Rory 2014-12-02 13:38:57

+0

你可以提出一個論點,即添加()是有用的,因爲它表明有關v的用法的* intent *,這有助於其他人閱讀你的代碼(或稍後對你) – 2014-12-03 01:10:29

+0

我發現添加()是它試圖給它分配一個空數組時導致錯誤。例如,如果某個函數返回一個數組但數組爲空,那麼v = SomeFunction()將導致運行時錯誤,但u = SomeFunction()不會。 – 2014-12-17 13:17:09

回答

2

有差異。將Variant想象成在您的計算機上處​​於較低級別並且具有應用程序編程接口(API)的VBA。這個低級別的東西是一個VARIANT和Windows附帶幾個功能,可以讓你在很多語言中操作它; VBA就是其中之一。

v是這樣的一個Visual Basic數組VARIANT s,u是一個單一的。

發現差異的一種方法是使用VarType(v),其計算結果爲vbArray + vbVariantVarType(u)評估爲vbEmpty。您可以在分配到範圍內容之前對其進行測試。

在您的具體情況下,Excel-VBA在分配到v時做了一些有趣的事情(我認爲沒有任何其他術語):它「知道」目標類型是一個數組,並執行稍微不同的強制。 uv與設置爲Excel.Range的值完全相同。

+0

除非你用'Range()'選擇一個單元格,其中賦值爲'v'將會失敗。 – ja72 2014-12-02 19:10:15

+0

對我而言,它們都評估爲'vbVariant + vbArray',除非選擇了一個單元格,如果它包含一個數字,則評估爲'vbDouble'。 – ja72 2014-12-02 19:33:05