Registriert seit: 26.09.2015
Version(en): 2013
08.02.2022, 16:28
(Dieser Beitrag wurde zuletzt bearbeitet: 08.02.2022, 16:42 von Stefan1.)
ich muss eine Zeile in ein Array einlesen, das geschieht wie folgt:
Dim aZ() as variant
aZ = Sheets("Daten").range("A1:IV1").value
... Hier folgt die Verwendung des Arrays.
Sheets("Daten").Range("A1:IV1").value = aZ
Leider kann es kein Range-Objekt sein, weil die Abarbeitung von mehreren Zeilen im gleichen VBA-Modul/Prozedur möglich sein muss. Trotzdem möchte ich im Falle einer einzelnen Zeile das damit generierte mehrdimensionales Array (1 to 1, 1 to x) nicht Zellenweise sondern als ganze Zelle an einem Stück reinschreiben, aus Geschwindigkeitsgründen. Vielleicht muss es in ein zweites Array umgeschrieben werden, doch ich weiss nicht so recht wie, damit es dann wieder auf diese einzelne Zeile passt.
Vielen Dank und Gruss
Stefan
Registriert seit: 17.04.2019
Version(en): M$ 365 AfE v2009 / Office2013
Sorry, aber Ich verstehe nicht was Du vorhast.
Registriert seit: 26.09.2015
Version(en): 2013
ok, manchmal kommt nur eine Zeile also von "A1:IV1" (1 Zeile) und manchmal "A1:IV5" (mehrere Zeilen). Ich möchte beide Möglichkeiten in einem Ruck in die Tabelle schreiben und es so lange als Möglich als Array bearbeiten.
Registriert seit: 17.04.2019
Version(en): M$ 365 AfE v2009 / Office2013
08.02.2022, 16:56
(Dieser Beitrag wurde zuletzt bearbeitet: 08.02.2022, 17:02 von Mase.)
Ah, kapiert.
Da Du mit dieser Methode stets ein 2D-Array bekommst, egal ob A1:V1 oder A1:IV5, musste der .Resize()-Eigenschaft nur mitteilen, welche Dimensionen Dein 2D-Array bereithält.
Code:
Range.Resize(AnzahlZeilen, AnzahlSpalten).Value = Array
Folglich:
Code:
Range("A1").Resize(UBound(ArrayVariable,1),UBound(ArrayVariable,2)).Value = ArrayVariable
Wenn Dein erster Post so formuliert gewesen wäre wie nach Deiner Korrektur, hätte Ich Dich gleich verstanden :)
Registriert seit: 26.09.2015
Version(en): 2013
08.02.2022, 17:50
(Dieser Beitrag wurde zuletzt bearbeitet: 08.02.2022, 17:53 von Stefan1.)
Guten Tag Marco
Sorry, für die notwendige Nachbesserung meinerseits und vielen Dank für Deine Bemühungen. Leider geht es nicht, nun stehen in allen Zellen der Zeile entlang immer der gleiche Begriff aus dem Array von Position 1, 1.
so gemacht:
Dim lR as long
lR = 5
aY = ws.Range("A" & lR & ":IV" & lR).value
.....
ws.Range("A" & lR).Resize(Ubound(aY, 1), uBound(aY, 2)).value = aY
.. und das Array ist korrekt abgefüllt (1.1, 1.2, 1.3 usw.) mit den zu erwartenden Attributen. Gibt es allenfalls Probleme mit ausgeblendeten Spalten hierin?
Gruss und Dank.
Stefan
Registriert seit: 17.04.2019
Version(en): M$ 365 AfE v2009 / Office2013
Jup.
Aber probier den Code doch selbst mal aus (ohne ausgeblendete Spalten).
Registriert seit: 26.09.2015
Version(en): 2013
Guten Tag
Es funktioniert

Muss was falsch gemacht haben beim schrittweise prüfen. Jetzt auch mit ausgeblendeten Spalten. Vielen Dank.
Gruss
Stefan
Registriert seit: 26.09.2015
Version(en): 2013
10.02.2022, 08:58
(Dieser Beitrag wurde zuletzt bearbeitet: 10.02.2022, 09:01 von Stefan1.)
Guten Tag Mase
Danke für die Unterstützung. Es hat geklappt. Es sind in meinem Fall die gefilterten Zeilen, die es nicht verträgt und so scheint mir unabhängig davon, ob es sich bei der Anwendung vom Array um eine sichtbare oder unsichtbare Zeile handelt. Es verträgt dann die Anwendung eines Filters generell nicht. Sobald ich diesen vorher aufhebe, geht das zurückschreiben in die Zeile (auch bei ausblendeten Spalten) einwandfrei. Ist jedoch eine Spalten-Filterung da, dann schreibt das Array den ersten Wert (1, 1) in sämtliche Spalten der Zeile rein. Eigentlich ist das nicht ganz nachvollziehbar, jedoch immerhin überwindbar.
Auf jeden Fall vielen herzlichen Dank für Deine wertvolle Unterstützung.
Gruss
Stefan