Hallo zusammen,
ich habe ein Problem beim zurückschreiben eines Arrays als Block in einen teilweise gefilterten Bereich.
Die Größe, Dimension oder der Inhalt des Arrays ist irrelevant, das Verhalten ist immer gleich.
Mein Array bildet einen Bereich ab, viele Zeilen, viele Spalten und einige Zeilen werden aus den schon erstellten/eingelesenen Zeilen berechnet.
Quasi: Einlesen von Zeile 1 und Zeile 2 ins Array, dann Zeile 1 vom Array + Zeile 2 vom Array ergibt Zeile 3 vom Array. (vereinfacht)
Wenn alle Zeilen des Zielbereichs sichtbar sind geht das mit dem Zurückschreiben. Ich mach dann Range(Cells(x,y),Cells(x,y) = Array.
Dabei ist der Zellbereich (Cells(x,y)) von links oben bis unten rechts meines Zielbereichs.
Aber sobald eine Zeile des Zielbereichs durch den normalen Filter ausgeblendet wurde, wird das Array vom Inhalt noch richtig erstellt aber beim zurückschreiben in den teilweise gefilterten Zielbereich schreibt er nur noch die erste Zeile des Arrays in alle sichtbaren Zeilen des Zielbereichs.
Ich verstehe nicht wieso und ob man das beheben kann.
Wenn der Bereich komplett ausgeblendet ist, wird das Array auch korrekt erstellt und eingefügt. Es funktioniert einzig bei dem teilweise gefilterten Bereich nicht mit dem reinschreiben als Block.
Meine Möglichkeiten sind, das Array zeilenweise in den Bereich zurückzugeben oder vor dem blockweise zurückschreiben alle Zeilen wieder einzublenden. Ich würde gerne den Grund verstehen von dem Fehler (Bug?).
Mit dem Makro "testen" hab ich dann ganz stark vereinfacht einfach mal rumprobiert.
Ich hab die zweite Zeile vom Zielbereich mal ein- und ausgeblendet.
Sub testen()
Dim test As Variant
Dim i As Byte
ReDim test(1 To 3, 1 To 1)
For i = 1 To 3
test(i, 1) = Cells(3 + i, 2)
Next i
'Cells(9, 2) = test(1, 1)
'Cells(10, 2) = test(2, 1)
'Cells(11, 2) = test(3, 1)
Range(Cells(9, 2), Cells(11, 2)) = test
End Sub
|