2017-05-24 1 views
0

Ich muss Variantenvariablen aus den Elementen eines dynamischen Arrays deklarieren.vba - Deklarieren von Variablen aus Elementen eines dynamischen Arrays

Ich habe ein Array (arrWS), das die Namen bestimmter Blätter enthält, die manuell ausgefüllt wird, und ich möchte "N" Bereich Objekte, wobei "N" ist die Anzahl der Arbeitsblätter.

Sequence: 1- ein Array deklarieren einige Arbeitsblatt Namen enthält ==> varAAA = Array ("Tabelle1", "Sheet3", "Sheet4", ...)

2- die Anzahl der Elemente Get in diesem Array wie die

3- Dann, wenn möglich:

Dim varBBB(1 To N) 
For i = 1 to N 
    varBBB(i) = Sheets(varAAA(i)).UsedRange 
Next N 

Sie im Voraus so vielen Dank.

Antwort

1

Ihr Hauptproblem ist, dass Sie müssen Set Objektvariablen:

'1- Declare an array containing some worksheet names 
' ==> varAAA = Array("Sheet1", "Sheet3", "Sheet4", ...) 
Dim VarAAAA 
varAAA = Array("Sheet1", "Sheet3", "Sheet4") 

'2- Get the number of elements in this array 
Dim N As Long 
N = UBound(varAAA) - LBound(varAAA) + 1 

'3- Then like that if possible: 
'Dim varBBB(1 To N) 
Dim varBBB() As Range 
ReDim varBBB(1 To N) 
'For i = 1 to N 
For i = 1 To N 
'varBBB(i) = Sheets(varAAA(i)).UsedRange 
    Set varBBB(i) = Sheets(varAAA(i - 1 + LBound(varAAA))).UsedRange 
    'Confirm that ranges have been correctly set 
    Debug.Print i, varAAA(i - 1 + LBound(varAAA)), varBBB(i).Address 
'Next N 
Next 
+0

Wie können wir uns auf die Zellen in einem Array von Bereich beziehen? –

+0

@RomcelGeluz Wie auch immer, zB 'varBBB (3) .Cells (1,1)' oder ' varBBB (x) .Range (myRangeVariable) 'oder .... Es unterscheidet sich nicht von der Verwendung eines Nicht-Array' Range' -Objekts, außer dass es indiziert ist. – YowE3K

+0

Oh ja! Ein weiterer Grund, kein 3D-Array zu verwenden (I verwendet, um dies zu tun, um das Blatt mit 3rdD zu vertreten. Danke eine Tonne. –

0

suchen Sie vielleicht für so etwas wie,

Dim arrWS() As String 
Dim iLoop As Integer 

With ThisWorkbook 
    ReDim arrWS(1 To .Sheets.Count) 
    For iLoop = 1 To .Sheets.Count 
    arrWS(iLoop) = .Sheets(iLoop).Name 
    Next 
End With 

dann Sie Ubound(arrWWS) verwenden können den letzten Index des Arrays zu erhalten.

Sie jetzt diesen Code verwenden kann jeden Usedrange in dem Blatt zu speichern,

Dim arrBB() As Variant 
Dim arrHolder() As Variant 

    ReDim arrBB(1 To UBound(arrWS)) 
    For iLoop = LBound(arrWS) To UBound(arrWS) 
    arrHolder() = Sheets(arrWS(iLoop)).UsedRange.Value 
    arrBB(iLoop) = arrHolder() 
    Next 
End Sub 
+0

Vielen Dank für die schnelle Antwort Romcel .. Ihr Code wird alle Blätter der Arbeitsmappe in das Array .. Ich muss pu t nur bestimmte Blätter nicht alle .. diese Blätter sind im Code selbst angegeben. Dann möchte ich Bereichsvariable mit dem gleichen Namen varBBB jeweils für ein Blatt deklarieren (varBBB (1) = Sheets (First Array Element) .UsedRange , varBBB (2 = Sheets (zweites Array-Element) .UsedRange)) – user3286479

+0

Der Beitrag wurde aktualisiert. Sie können den ersten Satz Code ignorieren und mit dem zweiten Satz Code durch das bestimmte Blattarray iterieren. Sie benötigen das 'arrHolder()', um vorübergehend das Array von 'UsedRange' zu ​​halten. –

0

Sie können dies tun:

Dim varBBB() 
Redim varBBB(LBound(varAAA) to UBound(varAAA)) 
For i = LBound(varAAA) to UBound(varAAA) 
    varBBB(i) = Sheets(varAAA(i)).UsedRange 
Next i 
+0

Vielen Dank Rory .. Wenn ich das Sheets-Array wie das erstellen varAAA = Array ("Sheet1", Sheet2 "," Sheet4 ") Ihr Code gibt mir Index außerhalb des Bereichs Fehler. – user3286479

+0

@ user3286479 Dann ist einer der Blattnamen falsch – Rory

+0

Ja, das ist richtig .. danke nochmal :) – user3286479

Verwandte Themen