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

vba index(array) debug-resistenter Fehler

vba index(array) debug-resistenter Fehler
20.12.2015 18:20:17
Michael
Hi zusammen,
ich pfriemle grad an einer saublöden Geschichte herum, bei der ich langsam nicht mehr weiß, wo ich hinlangen soll, um den Fehler zu finden.
Es handelt sich um zwei sehr ähnliche Subs, die aus einem 2D- array Daten spaltenweise wegschreiben.
i ist die Spalte im Zielblatt, im waagrechten Array Sp steht entweder 0, dann passiert nix, oder die Nr. der Spalte im Array a, die übernommen werden soll.
Bei der ersten Variante funktioniert der Index völlig problemlos, bei der zweiten zickt er.
Variante 1:
Debug.Print UBound(a, 1) & "" & UBound(a, 2)
For i = 1 To UBound(Sp, 2)
If Sp(1, i) > 0 Then
Debug.Print "a=" & TypeName(a) & " oben >" & oben & "" & i & " = " & TypeName(maxz) & _
" Sp(1,i)  = " & TypeName(i) & " " & a(1, Sp(1, i))
test = WorksheetFunction.Index(a, 0, Sp(1, i))
Konto.Cells(oben, i).Resize(maxz, 1) = _
WorksheetFunction.Index(a, 0, Sp(1, i))
End If
Next
Variante 2:
Debug.Print UBound(a, 1) & "" & UBound(a, 2)
For i = 1 To UBound(Sp, 2)
If Sp(1, i) > 0 Then
''' Ersatzweise Schleife läuft...
'''    For k = 1 To maxz
'''      ganzeSpalte(k, 1) = a(k, Sp(1, i))
'''    Next
'''    Konto.Cells(uKto, i).Resize(maxz, 1) = ganzeSpalte
Debug.Print "a=" & TypeName(a) & " ukto >" & uKto & "" & i & " = " & TypeName(maxz) & _
" Sp(1,i)  = " & TypeName(i) & " " & a(1, Sp(1, i))
Konto.Cells(uKto, i).Resize(maxz, 10).Interior.Color = vbGreen
Konto.Cells(uKto, i).Resize(maxz, 10) = a  ' schreibt brav das ganze Array
MsgBox a(1, 1)                          ' gibt brav den ersten Wert aus
'  ************* keine der weiteren Zeilen geht *************************
MsgBox WorksheetFunction.Index(a, 1, 1)          ' Typen unverträglich
test = WorksheetFunction.Index(a, 0, Sp(1, i))   ' Typen unverträglich
Konto.Cells(uKto, i).Resize(maxz, 1) = _
WorksheetFunction.Index(a, 0, Sp(1, i))         ' Typen unverträglich
End If
Next

Debug-Ausgabe:
Variante 1: *************
25610
a=Variant() oben >2151 = Long Sp(1,i)  = Long 29.12.2015
[usw., bis]
a=Variant() oben >2159 = Long Sp(1,i)  = Long V1000
Variante 2: *************
20010
a=Variant() ukto >2151 = Long Sp(1,i)  = Long 02.01.2015
... und Ende bei i=1.
a(1,1) existiert ja offensichtlich,
[ebenso a(1, Sp(1, i)) (ganz rechts in der debug-Zeile),]
aber WorksheetFunction.Index(a, 1, 1) führt zu einem Fehler.
test ist ein Variant, das keine besondere Funktion hat außer dem Test: in V1 geht's, in V2 nicht. Die Zeile mit der Zuweisung habe ich von V1 nach V2 kopiert - sie ist völlig identisch.
Die drei Zeilen in V2 nach dem d.print sind eigentlich auch unnütz, sie dienten nur der visuellen Überprüfung.
Alle Variablentypen sind identisch, die Werte sind innerhalb der array-Grenzen, alles paßt, aber es geht trotzdem nicht.
Hat noch jemand ein Idee?
Die Geschichte ist einigermaßen esoterisch; der workaraound tut ja, aber es fuchst mich.
Schöne Grüße,
Michael
P.S.: Nebenbei ist mir aufgefallen, daß die arrays bei "Datum" anscheinend nicht das interne Format übernehmen, sondern Text, so daß kopierte Datumsspalten nachbearbeitet werden müssen.

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vba index(array) debug-resistenter Fehler
20.12.2015 20:38:05
Daniel
HI
kannst du mal die Datei hochladen?
so ist das ganze doch etwas unvollständig.
Wie werden denn die Arrays dimensioniert und befüllt? gibt es da unterschiede?
bei mir (Excel 2010) funktionieren beide Codevarianten (mit dem selben Array a)
Gruss Daniel

AW: vba index(array) debug-resistenter Fehler
21.12.2015 14:52:26
Michael
Hi Daniel,
ich hab's befürchtet - das Ganze ist meine eigene Buchhaltung, die hier verwurschtelt wird. Vom einen Blatt werden Sollstellungen ins Konto geschrieben, vom anderen die importierten Bankdaten.
Im linken, oberen Eck steht auf alle Fälle ein Datum (das im Debug ganz rechts ausgegeben wird); der Punkt ist, daß a(1,1) geht und WorksheetFunction.Index(a, 1, 1) nicht, obwohl beide auf das gleiche Datum zugreifen (den 02.01.2015) - das sollte völlig unabhängig davon sein, was sonst noch im Array steht (nix Besonderes, Datum, Vw-zweck, Umsatz).
Hm. Ich schaffe es heute leider nicht, die Datei mit Spieldaten zu befüllen und komme morgen nochmal darauf zu zurück.
Vielen Dank erst Mal und schöne Grüße,
Michael

Anzeige
Scheinbar
25.12.2015 17:13:05
Michael
Hi Daniel,
scheinbar kommt der Fehler, wenn in das als Variant deklarierte Array eine Spalte geladen wird, die Strings länger als x enthält. Ich hab's jetzt nicht auf einen definitiven Wert festgenagelt.
Verblüffend ist, daß das Array sehr wohl eingelesen und auch brav wieder geschrieben wird, wenn man es nur *nicht* mit Index macht.
Datei anbei: https://www.herber.de/bbs/user/102450.xlsm
In Import!C24 steht ein String mit 300nochwas Zeichen, da geht es nicht, wenn Du ihn löschst oder mit einem kurzen überschreibst, geht es.
Verblüffend finde ich es auch insofern, als man ja oft mit "endlosen" Strings hantiert, wenn man sie etwa mit split in ein array steckt...
Na gut, auf zum (weiter-)Feiern!
Schöne Feiertage noch, guten Rutsch, und vielen Dank für's Bearbeiten,
schöne Grüße,
Michael
Anzeige

329 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige