Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Frame
BildScreenshot zu Frame Frame-Seite mit Beispielarbeitsmappe aufrufen

System.collections.arraylist | Herbers Excel-Forum


Betrifft: System.collections.arraylist von: Born
Geschrieben am: 10.12.2009 11:22:20

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

  

Betrifft: VBA<>VB von: Rudi Maintaire
Geschrieben am: 10.12.2009 11:30:39

Hallo,
was hast du genau vor?

Gruß
Rudi


  

Betrifft: AW: System.collections.arraylist von: Reinhard
Geschrieben am: 10.12.2009 12:41:39

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


  

Betrifft: läuft bei mir nicht von: Rudi Maintaire
Geschrieben am: 10.12.2009 13:04:39

Automatisierungsfehler.

Gruß
Rudi


  

Betrifft: AW: läuft bei mir nicht von: Born
Geschrieben am: 10.12.2009 14:03:52

Ja genau, Rudi,

ja, was heißt "Automatisierungsfehler"?

Ich will ReDim/Presever umgehen.

Born


  

Betrifft: AW: läuft bei mir nicht von: ransi
Geschrieben am: 10.12.2009 17:20:32

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


  

Betrifft: AW: läuft bei mir nicht von: Born
Geschrieben am: 10.12.2009 18:12:16

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


  

Betrifft: AW: läuft bei mir nicht von: Luschi
Geschrieben am: 10.12.2009 19:33:54

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


  

Betrifft: AW: läuft bei mir nicht von: Reinhard
Geschrieben am: 10.12.2009 15:13:56

Hallo Rudi,

tut mir leid, mein Fehler die Version nicht anzugeben.
Ich habe es auf XL2000 getestet, da lief es.

Gruß
Reinhard


  

Betrifft: AW: läuft bei mir nicht von: Born
Geschrieben am: 10.12.2009 15:15:22

Hallo Reinhard,

ich habe die XL2007.

Gruß,

Born


  

Betrifft: System.collections.arraylist ??? von: Born
Geschrieben am: 10.12.2009 17:51:20

Hat noch jemand eine Idee?


  

Betrifft: AW: System.collections.arraylist ??? von: ransi
Geschrieben am: 10.12.2009 18:31:41

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


  

Betrifft: AW: System.collections.arraylist ??? von: Born
Geschrieben am: 10.12.2009 19:00:38

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