HERBERS Excel-Forum - das Archiv
System.collections.arraylist
Born

Guten Tag,
ich versuche, ein Array dynamisch zu füllen. Im Internet an verschiedenen
Orten wird das über die VB-ArrayList gemacht. Muß man
dazu eine bestimmte Library einbinden?
Ich bekomme schon am Anfang bei Set objArraylst= CreateObject("System.Collections.arraylist")
eine Fehlermeldung:
"Laufzeitfehler.... Automatisierungsfehler"
Herzlichen Dank
Born

VBA<>VB
Rudi

Hallo,
was hast du genau vor?
Gruß
Rudi
AW: System.collections.arraylist
Reinhard

Hallo Born,
von Ransi fand ich auf
http://www.office-loesung.de/ftopic142856_0_0_asc.php?sid=4e93697d3adb47ff6ae63533fd69f986#595267
den nachfolgenden Code. Er läuft problemlos durch.
Public Sub test()
Dim objArrLst
Dim Mein_Array()
Dim L As Long
Dim scrDic
Set objArrLst = CreateObject("System.collections.arraylist")
Set scrDic = CreateObject("Scripting.dictionary")
Mein_Array = Array(1, 1, 1, 1, 2, 1, 4, 5, 4, 5)
On Error Resume Next
For L = 0 To UBound(Mein_Array) - 1
If Not scrDic.exists(Mein_Array(L)) Then
scrDic.Add Mein_Array(L), L
objArrLst.Add Mein_Array(L)
End If
Next
On Error GoTo 0
Erase Mein_Array
With objArrLst
.Sort
Mein_Array = .ToArray
End With
'Jetzt ist Mein_Array sortiert ohne Duplikate
Set objArrLst = Nothing
Set scrDic = Nothing
End Sub

Gruß
Reinhard
läuft bei mir nicht
Rudi

Automatisierungsfehler.
Gruß
Rudi
AW: läuft bei mir nicht
Born

Ja genau, Rudi,
ja, was heißt "Automatisierungsfehler"?
Ich will ReDim/Presever umgehen.
Born
AW: läuft bei mir nicht
ransi

HAllo Born
Ich habe auch Excel 2007.
DA läuft das auch.
Das Problem war schonmal in irgendeinem Thread.
Das System.Collections hatte sich irgendwie mit SQL-Server gebissen...
Es wurde damals keine Lösung erarbeitet.
Ich will ReDim preserve umgehen.

Auch dafür gibt es mit Arrays oder Dictionarys Lösungen.
Was hast du genau vor ?
ransi
AW: läuft bei mir nicht
Born

Hallo ransi,
danke fürs Schreiben.
Ich will eine Spalte aus Excel, die bei jedem Durchgang um ein paar Zahlen erweitert wird,
in ein Array packen.
Bisher habe ich einfach alle Werte in ein zweidimensionales Array gepackt:
AR = ActiveSheet.Range(Cells(9, 8), Cells(Range("B1000").End(xlUp).Row, 8))
Jetzt ist mir aufgefallen, daß nicht alle Werte aus der Spalte im Array sein sollten,
deshalb die Schleife:
For i = 1 to lrow
If Cells(i + 8, 8) <> 0 Then
s = s + 1
AR(s) = Cells(i + 8, 8)
End If
Next i
Aber da kriege ich Probleme eben damit, daß jetzt nicht nur lrow, sondern auch die
Menge der Werte im Array jedesmal anders ist. Und ich verstehe nicht, warum man
ein Array nicht mit
Dim AR(Range("B5")) dimensionieren kann.
Gruß und Dank,
Born
AW: läuft bei mir nicht
Luschi

Hallo Ransi,
ArrayList ist ein Objekt von .NET-Framework 3.5.
(siehe http://msdn.microsoft.com/en-us/library/system.collections.arraylist_members.aspx ).
Wer diese Komponennte nicht installiert hat, kann ie auch nicht nutzen.
Gruß von Luschi
aus klein-Paris
AW: läuft bei mir nicht
Reinhard

Hallo Rudi,
tut mir leid, mein Fehler die Version nicht anzugeben.
Ich habe es auf XL2000 getestet, da lief es.
Gruß
Reinhard
AW: läuft bei mir nicht
Born

Hallo Reinhard,
ich habe die XL2007.
Gruß,
Born
System.collections.arraylist ?
Born

Hat noch jemand eine Idee?
AW: System.collections.arraylist ?
ransi

HAllo
Die ArrayList ist in der mscorlib.dll enthalten.
Versuch mal den Verweis händisch zu setzen und dann so:
Public Sub machs()
Dim objAL As New ArrayList
objAL.Add 123
MsgBox objAL.Count
End Sub


Wenn das auch nicht funktioniert, hake den Versuch mit der Arraylist ab....
Dann versuch sowas:
Option Explicit


Public Sub test()
Dim AR As Variant
Dim objDic As Object
Dim L As Long
Dim vntOUT As Variant
Set objDic = CreateObject("Scripting.Dictionary")
AR = ActiveSheet.Range(Cells(9, 8), Cells(Range("B1000").End(xlUp).Row, 8))
For L = LBound(AR) To UBound(AR)
    If AR(L, 1) <> 0 Then objDic(L) = AR(L, 1)
Next
vntOUT = objDic.items
End Sub


DAs ist ebenfalls sehr schnell und sollte auf jedenfall funktionieren.
ransi
AW: System.collections.arraylist ?
Born

Hallo ransi,
großartige Hilfe, vielen Dank.
Der erste Vorschlag brachte wieder den Automatisierungsfehler.
Vorschlag Nr. 2 wird in die Analen der Array-Erstellung eingehen.
Herzlichen Dank,
born