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.