Sub 單元格區(qū)域轉(zhuǎn)化為數(shù)組()
Dim f As Variant f = ActiveSheet.Range('a1:c4') Debug.Print f(1, 1) End Sub 在這一段代碼里,如果將“dim f as variant”,,改為“dim f() as variant”,,提示“類型不匹配”的錯誤 Sub 動態(tài)數(shù)組演示() Dim myArr() As String ReDim myArr(0) myArr(0) = '一車間' ReDim Preserve myArr(2) myArr(1) = '二車間' myArr(2) = '三車間' Debug.Print myArr(0), myArr(2) End Sub 在這一段代碼里,如果將“Dim myArr() As String'改為“Dim myArr As String”,,提示“缺少數(shù)組”的錯誤 我的困惑在于,,定義數(shù)組時,數(shù)組名后面到底什么時候需要加括號,,加不加括號有什么區(qū)別,?或是說什么情況下需要加括號,什么情況下不需要加括號,? 分享到新浪微博 2樓 wpxxsyzx LV16 2014-10-8 17:21
簡單的說,,執(zhí)行f = ActiveSheet.Range('a1:c4')之前,f就是一個變體變量,,執(zhí)行之后成為一個數(shù)組,,不能將單元格區(qū)域直接賦值給一個數(shù)組,所以,,你最后的問題也就不存在了
3樓 liu-aguang LV6 2014-10-8 17:58
ActiveSheet.Range('a1:c4')
這個區(qū)域它被組織為一個Variant變量下包含數(shù)組(當(dāng)然還有其它),所以語句: Dim f As Variant f = ActiveSheet.Range('a1:c4') 將之賦與一個Variant變量(f),則轉(zhuǎn)化為變量f包含一個數(shù)組. 而語句: Dim f() As Variant f = ActiveSheet.Range('a1:c4') 是把一個Variant變量賦與一個數(shù)組,所以提示'類型不匹配' 但可以: Dim f() As Variant f = ActiveSheet.Range('a1:c4').value 這樣明確指定區(qū)域的值,它本身就是一個數(shù)組,所以可以直接傳遞給Variant數(shù)組. 4樓 liu-aguang LV6 2014-10-8 18:09
本帖最后由 liu-aguang 于 2014-10-8 18:10 編輯
如果在Range前面不加限定則下面語句都可以正常執(zhí)行: dim f,k() f=range('a1:c4') f=range('a1:c4').value k=range('a1:c4') k=range('a1:c4').value 原因是Range的默認屬性是Value,它是一個數(shù)組. 上面前兩句與后兩句其意義是不同: 前兩句是將數(shù)組賦與一個Variant變量,讓其包含一個數(shù)組. 后兩句是將一個數(shù)組整體傳遞給另一個數(shù)組. 5樓 香川群子 LV7 2014-10-8 20:23
簡單說,,是這樣子: 一、在VBA中自己定義數(shù)組時,,需要用() 如: Dim arr(1 To 10) 【必須使用常量】 或 ReDim arr(1 To m) 【可以使用變量,、且可以ReDim改變最后一維的大小】 注意,這樣的數(shù)組變量不能用 arr=Range的方式賦值,。(兩者類型不同,、后者是Variant類型變量) 教條的定義數(shù)組方式為: Dim arr() ReDim arr(1 To 5) 呵呵,之前的Dim應(yīng)該是多余的,。 ………… 二,、Dim arr 或 Dim arr as Variant 此時,可以把工作表Range區(qū)域直接賦值給arr得到一個Variant類型的二維數(shù)組,。 這里,,Variant是變量類型,而二維數(shù)組是其結(jié)果,。實際上不能認為這里的arr是一個數(shù)組類型的變量,。 ……………… 總結(jié): 一,、如果你想要把工作表Range區(qū)域讀入VBA數(shù)組變量,那么不允許使用括號,,即不能 Dim arr() 二,、如果你想在VBA中直接定義數(shù)組變量(往往會通過直接循環(huán)計算來賦值),那么應(yīng)該用括號 Dim arr() |
|
來自: L羅樂 > 《數(shù)組公式》