Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1704to1708
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

Listbox / Laufzeitfehler 380

Listbox / Laufzeitfehler 380
05.08.2019 21:26:50
Marc
Guten Abend liebe Forumsgemeinde,
ich möchte eine Listbox in einem Userform befüllen mit einem Array, so wie ich es in einem anderen Makro auch schon getan habe aber diesmal will es irgendwie nicht klappen.
Ich bekomme immer "Eigenschaft Liste konnte nicht gesetzt werden. Ungültiger Eigenschaftswert. "
Das ist der Code mit dem das Array erzeugt wird:
' Event Handler
Private Sub m_TWSControl_symbolSamples(ByVal reqId As Long, ByVal contractDescriptions As  _
TWSLib.IContractDescriptionList)
' Array für Listbox füllen
Dim cd As TWSLib.ComContractDescription
Dim derivateTypes As String
Dim i As Long
Dim J As Long
For i = 0 To contractDescriptions.Count - 1
Set cd = contractDescriptions.Item(i)
ReDim Preserve vArray(5, i)
vArray(0, i) = contractDescriptions.Item(i).contract.conId
vArray(1, i) = contractDescriptions.Item(i).contract.Symbol
vArray(2, i) = contractDescriptions.Item(i).contract.secType
vArray(3, i) = contractDescriptions.Item(i).contract.primaryExchange
vArray(4, i) = contractDescriptions.Item(i).contract.currency
derivateTypes = ""
For J = 0 To cd.DerivativeSecTypes.Count - 1
derivateTypes = derivateTypes & cd.DerivativeSecTypes.Item(J) & Space(1)
Next J
vArray(5, i) = derivateTypes
' Array transponieren für Format der Listbox
ReDim tArray(i, 5)
tArray(i, 0) = vArray(0, i)
tArray(i, 1) = vArray(1, i)
tArray(i, 2) = vArray(2, i)
tArray(i, 3) = vArray(3, i)
tArray(i, 4) = vArray(4, i)
tArray(i, 5) = vArray(5, i)
Debug.Print tArray(i, 0)
Debug.Print tArray(i, 1)
Debug.Print tArray(i, 2)
Debug.Print tArray(i, 3)
Debug.Print tArray(i, 4)
Debug.Print tArray(i, 5)
Next i
End Sub 

Und mit folgendem Code wird die Listbox dann erzeugt:
Sub Userform_Activate()
ListBox1.ColumnCount = 6
ListBox1.ColumnWidths = "2cm;2cm;2cm;2cm;2cm;2cm"
ListBox1.List = tArray
End Sub

Ich finde den Fehler einfach nicht.
Seltsamerweise wurden die Daten zunächst ein oder zwei mal in die Listbox übernommen und dann ging es plötzlich nicht mehr aber ich finde die Ursache nicht.
hat jemand eine Idee?
VG,
marc

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox / Laufzeitfehler 380
05.08.2019 22:02:42
Marc
Noch ein Hinweis:
Die Arrays habe ich in einem Modul als öffentliche Variablen deklariert:
Public vArray() As String
Public tArray() As String

AW: Listbox / Laufzeitfehler 380
05.08.2019 22:58:34
Marc
Ich vermute, dass es sich bei dem ersten Wert um ein Nummernformat handelt und die Listbox den Wert deshalb nicht anerkennt.
So sieht das, was im Direktfenster ausgegeben wird aus:
 254628928
GBLIZ
STK
NASDAQ.NMS
USD
CFD 
Man beachte das Leerzeichen vor der Nummer in der ersten Zeile. Ich vermute hier sitzt ein unsichtbares Hochkomma. Wenn mir jemand einen Tipp geben kann wie ich diesen Teil des Arrays in Text umwandlen kann bzw. dieses leere Feld dort wegbekomme (sofern es die Ursache sein könnte) dann wäre mir geholfen. :)
Anzeige
AW: Listbox / Laufzeitfehler 380
06.08.2019 05:37:20
Hajo_Zi
frage jemand der neben Dir sitzt der sieht die Datei.
Die meisten hier sehen Sie nicht.
Da Sie nicht auf Deinen Rechner schauen.
Vielleicht sollte die Datei verlinkt werden?
Benutze hier im Forum die Funktion zum hochladen. Falls Du die nicht benutzen möchtest beachte, von unsicheren Servern wie z.B. www.file-upload.net lade ich keine Datei runter. (lt. Einschätzung meines Virenprogramms)

AW: Listbox / Laufzeitfehler 380
06.08.2019 07:27:03
Marc
Hallo Hajo,
ich hätte vielleicht noch dazu sagen sollen, dass der Event Handler Daten verarbeitet, die von der Interactive Brokers API zurückgegeben werden. Ich war dann doch noch etwas weiter gekommen und habe es geschafft zumindest eine Zeile in die Listbox zu bekommen, dann verweilt das Makro jedoch im Play Modus ohne weitere Zeilen hinzu zu fügen. Geschafft hatte ich das indem ich das Leerzeichen vor der Nummer des ersten Wertes rausgenommen hatte:
ReDim tArray(i, 5)
tArray(i, 0) = vArray(0, i)
tArray(i, 0) = Trim(tArray(i, 0))
tArray(i, 0) = CStr(tArray(i, 0))
tArray(i, 1) = vArray(1, i)
tArray(i, 2) = vArray(2, i)
tArray(i, 3) = vArray(3, i)
tArray(i, 4) = vArray(4, i)
tArray(i, 5) = vArray(5, i)
tArray(i, 5) = Replace(tArray(i, 5), " ", ",")
Ein Formatproblem scheint es also nicht mehr zu geben denn der Laufzeitfehler 380 taucht nicht mehr auf aber woran liegt es, dass die Listbox nur mit einer zeile gefüllt wird und dann geht es nicht weiter?
Da die Daten im Direktfenster alle angezeigt werden kann das Problem nur auf einen Fehler innerhalb des Klassenmoduls (Event Handler) zurückzuführen sein, dass ich hier geposted habe. Das Hochladen sollte nicht nötig sein.
VG,
Marc
Anzeige
AW: Listbox / Laufzeitfehler 380
06.08.2019 18:17:33
onur
Mit jedem
ReDim tArray(i, 5)

löschst du doch alle alten i-Werte im Array.
Es werden nur die Werte vom aktuellen i gespeichert, von i-1 z.B. gelöscht.
vArray(0, i) = contractDescriptions.Item(i).contract.conId
vArray(1, i) = contractDescriptions.Item(i).contract.Symbol
vArray(2, i) = contractDescriptions.Item(i).contract.secType
vArray(3, i) = contractDescriptions.Item(i).contract.primaryExchange
vArray(4, i) = contractDescriptions.Item(i).contract.currency

und was ist mit
vArray(5, i) ?
Vertausche die Dimensionen beider Arrays, dann kannst du mit Redim Preserve die alten Werte erhalten.
Anzeige
AW: Listbox / Laufzeitfehler 380
06.08.2019 20:43:27
Marc
Besten dank an Dich Onur, Du hast sicherlich recht aber ich hab es jetzt etwas anders gelöst. Da ich ja die exakte Dimensionierung des zweiten Arrays schon kenne habe ich nun einfach zwei Schleifen erstellt und es vor der zweiten Schleife, mit der es transponiert wird, exakt dimensioniert. Der Geistesblitz hat diesmal allerdings echt lange auf sich warten lassen. =D
Siehst dann so aus:
' Event Handler
Private Sub m_TWSControl_symbolSamples(ByVal reqId As Long, ByVal contractDescriptions As  _
TWSLib.IContractDescriptionList)
' Array für Listbox füllen
Dim cd As TWSLib.ComContractDescription
Dim derivateTypes As String
Dim i As Long
Dim J As Long
For i = 0 To contractDescriptions.Count - 1
Set cd = contractDescriptions.Item(i)
ReDim Preserve vArray(5, i)
vArray(0, i) = contractDescriptions.Item(i).contract.conId
vArray(1, i) = contractDescriptions.Item(i).contract.Symbol
vArray(2, i) = contractDescriptions.Item(i).contract.secType
vArray(3, i) = contractDescriptions.Item(i).contract.primaryExchange
vArray(4, i) = contractDescriptions.Item(i).contract.currency
derivateTypes = ""
For J = 0 To cd.DerivativeSecTypes.Count - 1
derivateTypes = derivateTypes & cd.DerivativeSecTypes.Item(J) & Space(1)
Next J
vArray(5, i) = derivateTypes
Next i
' Array transponieren für Format der Listbox
ReDim tArray(contractDescriptions.Count - 1, 5)
For i = 0 To contractDescriptions.Count - 1
tArray(i, 0) = vArray(0, i)
tArray(i, 0) = Trim(tArray(i, 0))
tArray(i, 0) = CStr(tArray(i, 0))
tArray(i, 1) = vArray(1, i)
tArray(i, 2) = vArray(2, i)
tArray(i, 3) = vArray(3, i)
tArray(i, 4) = vArray(4, i)
tArray(i, 5) = vArray(5, i)
tArray(i, 5) = Replace(tArray(i, 5), " ", ",")
Debug.Print tArray(i, 0)
Debug.Print tArray(i, 1)
Debug.Print tArray(i, 2)
Debug.Print tArray(i, 3)
Debug.Print tArray(i, 4)
Debug.Print tArray(i, 5)
Next i
End Sub

Anzeige
...und damit erledigt! (owT)
07.08.2019 08:37:16
EtoPHG

AW: ...und damit erledigt! (owT)
07.08.2019 08:54:11
Marc
Sorry, vergessen das Häkchen raus zu nehmen.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige