簡體   English   中英

在VBA中使用范圍數組 - Excel

[英]Using an Array of Ranges in VBA - Excel

VBA是否支持使用范圍變量數組?

dim rangeArray() as range
dim count as integer
dim i as integer

count = 3

redim rangeArray(1 to count)

for i = 1 to count
  msgbox rangeArray(i).cells(1,1).value
next

我不能讓它在這種類型的應用程序中工作。 我想以一定的順序存儲一系列范圍作為“主副本”。 然后我可以添加,刪除,排序或對此數組執行任何操作,然后將其打印到excel中的一系列范圍。 看起來excel似乎不支持這一點 - 它只是強迫您將數據存儲在電子表格中,並且您必須重新讀取它才能使用它。

不,數組不能保存對象。 但o 對象可以容納對象。 我認為你可能想要的是一個Range對象,它由各種特定的其他Range對象組成。 在這個例子中,rMaster是我的“數組”,它包含三個單元格。

Sub StoreRanges()

    Dim rMaster As Range
    Dim rCell As Range

    Set rMaster = Sheet1.Range("A1")
    Set rMaster = Union(rMaster, Sheet1.Range("A10"))
    Set rMaster = Union(rMaster, Sheet1.Range("A20"))

    For Each rCell In rMaster
        MsgBox rCell.Address
    Next rCell

End Sub

通過我新發現的知識,數組可以容納范圍(thnx jtolle),這是一個如何在數組中存儲范圍並對它們進行排序的示例

Sub UseArray()

    Dim aRng(1 To 3) As Range
    Dim i As Long

    Set aRng(1) = Range("a1")
    Set aRng(2) = Range("a10")
    Set aRng(3) = Range("a20")

    BubbleSortRangeArray aRng

    For i = LBound(aRng) To UBound(aRng)
        Debug.Print aRng(i).Address, aRng(i).Value
    Next i

End Sub

Sub BubbleSortRangeArray(ByRef vArr As Variant)

    Dim i As Long, j As Long
    Dim vTemp As Variant

    For i = LBound(vArr) To UBound(vArr) - 1
        For j = i To UBound(vArr)
            If vArr(i).Value > vArr(j).Value Then
                Set vTemp = vArr(i)
                Set vArr(i) = vArr(j)
                Set vArr(j) = vTemp
            End If
        Next j
    Next i

End Sub

目前還不完全清楚你想做什么,但......

如果您想要一個集合,為什么不使用VBA集合對象?

Dim myRanges as New Collection

Collection.Item可以是任何對象,包括Range。

Range對象不包含數據 ; 它包含對工作表單元格的引用。 如果您想要集合中的Range 內容 ,則必須將它們復制到工作表中或從工作表中復制它們。

與Java一樣,無論是在Array還是Collection中,您的VBA變量都是短暫的。 如果要在再次打開文件時關閉文件並將數據放在那里,則必須將其放在工作表單元格中。 工作表是您的持久性機制。

我要在這里大踏步前進,所以如果我離開的話,請不理我。 我認為您正在尋找的建議是設置一個單獨的工作表作為您的“數據庫”,填充包含原始數據的List / Table對象。 在這之前,是你的“用戶表”,你在那里做有趣的東西,參考數據庫表中的數據。 說出一切。

對我來說,你所談論的內容並不完全清楚。

如果你問的是創建Range的能力,它可以映射到任何東西並且自己存在,那么不,沒有辦法。 Range對象只是指某個工作表區域的東西。 它沒有任何自己的存儲或東西。 Range類的幾個不同實例也可以引用相同的工作表區域。

如果你只是想在數組中存儲一些引用,那就沒關系了,那就去吧。 您的代碼唯一的問題是您在使用它們之前不會初始化數組元素:由於Range是一個引用類型,所有元素都默認使用Nothing來初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM