Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1580to1584
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Collections variabel addressieren

Collections variabel addressieren
18.09.2017 16:01:33
Tom
Hallo zusammen,
ich bei derzeit an einem Modul dran, welches sechs Arbeitsmappen öffnet, welche jeweils
27 Worksheets beinhalten. Die Struktur der Arbeitsmappen ist dabei immer gleich. Die aus diesen Worksheets gesammelten Daten möchte ich nun auf Collections verteilen, da ich schlußendlich aus jeder Collection einen Wert generieren muss.
Soweit so gut, ich habe das Ganze so aufgebaut das erst alle Arbeitsmappen geöffnet werden und dann per Schleife alle Worksheets durchlaufen werden. Der Plan war dann dabei die Werte (Nach Prüfung auf bestimmte Vorraussetzungen, direkt in eine Collection zu packen.
Jetzt habe ich allerdings das Problem, das ich den Wert nicht an die Collection übergeben kann, da ich die Collection nicht über eine Variable angesprochen bekomme.
Ich möchte allerdings auch nicht 27 mal "If" hintereinander schmeissen.
Die benötigte Collection ergibt sich aus den letzten 2 Zeichen des Worksheet Namens.
z.B. "XQ". Diesen Gleiche ich mit einem Array ab in dem die benötigten Kürzel hinterlegt sind. Um die Collection anzusprechen muss ich noch ein "C" davor setzen, da teilweise numerische Werte am Anfang der Kürzel stehen.
Ausschnitt:
For I = 0 To UBound(Plants)
If Right(SH.Name, 2) = Plants(I) Then 'SH Name ist der Worksheet Name und Plants das Array
CStr("C" & Plants(I)).Add wb.Worksheets(SH.Name).Cells(Reihe, 22).Value 'Dieser Teil scheitert :(
End If
Next
Da ich da jetzt schon eine Weile daran brüte, wäre ich für jede Hilfe dankbar.
Viele Grüße
Tom

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Collections variabel addressieren
18.09.2017 16:22:24
mmat
Hi,
tja, leider gibt's für den Datentyp Collection keine Liste, sonst wäre der korrekte Syntax wohl:
Collections("C" & Plants(I)).Add Wert
Aber ohne das Problem näher zu kennen, fällt mir nix besseres ein wie 27 x IF (bzw. eine Select-Block).
Ggf. geht ein mehrdimensionales Array.
AW: Collections variabel addressieren
18.09.2017 16:48:48
Luschi
Hallo Tom,
mach es wie hier, erstelle neben den Collections noch eine Dictionary, siehe hier:
https://stackoverflow.com/questions/35444816/vba-can-i-put-a-collection-inside-a-scripting-dictionary
und sprich die Collections über das Dictionary an.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Collections variabel addressieren
18.09.2017 16:57:58
Gerd
Hallo Tom!
Sub SammlungEINS()
Dim SH As Worksheet, I As Long, Plants() As Variant, Colli As Collection, Reihe As Long, wb As  _
Workbook
Set Colli = New Collection: Set wb = ThisWorkbook: Set SH = Tabelle1
SH.Name = "XY"
ReDim Plants(1)
Plants(0) = "XY"
Plants(1) = "AB"
Reihe = 2
For I = 0 To UBound(Plants)
If Right(SH.Name, 2) = Plants(I) Then 'SH Name ist der Worksheet Name und Plants das Array
Colli.Add CStr("42" & wb.Worksheets(SH.Name).Cells(Reihe, 22).Value), (CStr("C" & Plants(I)))  ' _
Dieser Teil scheitert :(
End If
Next
MsgBox Colli("C" & Plants(0))
End Sub

Gruß Gerd
Anzeige
AW: Collections variabel addressieren
19.09.2017 11:29:37
Tom
Hallo Luschi,
das hat funktioniert. Herzlichen Dank! :)
Es gab noch die Problematik, dass sich die Keys wiederholen und dies zu einem Fehler geführt hat, das habe ich jetzt aber umgangen indem ich das Dictionary kurzfristig auslagere und später alles wieder zusammenführe.
Der Vollständigkeit halber das Ergebnis:
For I = 0 To UBound(Plants)
If Right(SH.Name, 2) = Plants(I) Then
CubeColl.Add (wb.Worksheets(SH.Name).Cells(Reihe, 19).Value)
End If
Next
End If
End If
Next cell
End With
End Select
If CubeColl.Count > 0 Then
If CubeDict.exists(Right(SH.Name, 2)) Then 'Prüfung ob Key in CubeDict bereits vorhanden
For Each A In CubeDict(Right(SH.Name, 2))
TempColl.Add A
Next A
For Each B In CubeColl
TempColl.Add B
Next B
CubeDict.Remove Right(SH.Name, 2)
CubeDict.Add Right(SH.Name, 2), TempColl
Set TempColl = New Collection
Set CubeColl = New Collection
Else
CubeDict.Add Right(SH.Name, 2), CubeColl
Set CubeColl = New Collection
End If
End If
Next 'Next Case
End If
Next 'Next Workbook
Danke natürlich auch für die anderen Antworten. Thema ist erledigt.
Viele Grüße
Tom
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige