Search code examples
arraysvbalotus-dominolotusscript

LotusScript ans Two dimensional Array & subscription out or range error


Hello I have two dimensional array as below in LotusScript.

Counter = 0
While Not (ProcessingViewDoc Is Nothing )
    Redim Preserve AllRecrods(Counter,0)  
    AllRecrods(Counter,0)   = ProcessingViewDoc.Test1(0)
    Redim Preserve AllRecrods(Counter,1)  
    AllRecrods(Counter,1)   = ProcessingViewDoc.Test2(0)
    Redim Preserve AllRecrods(Counter,2)  

    Set ProcessingViewDoc  = ProcessingView.GetNextDocument(ProcessingViewDoc)
    Counter = Counter +1
Wend

When It processes next document it does and reaches to counter 1 and second document it gives me error subscription out of range. Here is global declaration of array.

Dim AllRecrods() As Variant

Here is the line when it gives error when it goes to loop second time.

Redim Preserve AllRecrods(Counter,0) 

Solution

  • In addition to Richard's excellent answer, I would suggest a couple of things.

    1) Instead of While Not (ProcessingViewDoc Is Nothing) (which contains two negatives, making it harder to read), use Do Until doc Is Nothing. It is much clearer.

    2) If you use a list, you don't have to worry about redim of the array. You could make it a list of a custom data type, and if you use the UNID of the document as the key, you can quickly connect the values back to the originating document.

    My code would look something like this:

    --- Declarations ---
    Type recordData
        value1 As String
        value2 As String
    End Type
    
    
    --- Main Code ---
    Dim allRecords List As recordData
    Dim unid as String
    Do Until ProcessingViewDoc Is Nothing 
        unid = ProcessingViewDoc.UniqueID
        allRecords(unid).value1 = ProcessingViewDoc.Test1(0)
        allRecords(unid).value2 = ProcessingViewDoc.Test2(0)
        Set ProcessingViewDoc  = ProcessingView.GetNextDocument(ProcessingViewDoc)
    Loop