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

3dim Array in 3 Worksheets schreiben

3dim Array in 3 Worksheets schreiben
26.04.2018 02:35:25
Rainer
Hallo Excelfreunde,
ich habe diese Beispieldatei etwas bearbeitet: http://michael-schwimmer.de/vba087.htm
Das Ziel ist es, die RGB Informationen aus varPixelarray("AllPixel") in 3 verschiedene Worksheets "R","G","B" zu schreiben um damit Berechnungen anstellen zu können. varPixelarray("AllPixel") ist 3dimensional (Y,X,[R,G,B]). Mein Versuch es in 2dimensionale Array zu konvertieren erzeugt die neuen Arrays varPixelarray("Red"), varPixelarray("Green"), varPixelarray("Blue"). Diese lassen sich aber nicht in das Worksheet schreiben (Fehler 1004):
'Sheets("R").Range(Sheets("R").Cells(1, 1), Sheets("R").Cells(UBound(varPixelarray("Red"), 2),  _
UBound(varPixelarray("Red"), 1))) = varPixelarray("Red")
Stattdessen überführe ich sie mit einer doppelten For To Schleife in neue Arrays, welche sich dann problemlos speichern lassen. Leider dauert diese For To Schleife sehr lange, gerade bei großen Bilddateien. In der Function "ColFromPic" wird die gleiche Schleife ausgeführt, aber dort dauert es nur Augenblicke.
Ich vermute, der Pferdefuß ist der Typ der Arrays. "varPixelarray" ist vom Typ "Variant/Byte", aber meine neuen Arrays ("Arr_R", "Arr_G", "Arr_B") sind vom Typ "Variant/Variant".
Warum lässt sich das Array vom Typ Byte nicht in das Worksheet schreiben?
Oder warum ist die For To Schleife in der Function "ColFromPic" so schnell, aber in der Sub "cmdNeueDatei_Click" so langsam?
Hier ist meine bearbeitete Datei: https://www.herber.de/bbs/user/121290.xlsm
Vielen Dank im Vorraus,
Rainer

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 3dim Array in 3 Worksheets schreiben
26.04.2018 09:01:43
Luschi
Hallo Rainer,
Du mußt das Array drehen (1- oder 2mal), bei mir nur einmal:

With Sheets("R")
.Range(.Cells(1, 1), .Cells(UBound(varPixelarray("Red"), 2), UBound(varPixelarray("Red"), 1)) _
) = WorksheetFunction.Transpose(Arr_R)
End With
With Sheets("G")
.Range(.Cells(1, 1), .Cells(UBound(varPixelarray("Red"), 2), UBound(varPixelarray("Red"), 1)) _
) = WorksheetFunction.Transpose(Arr_R)
End With
With Sheets("B")
.Range(.Cells(1, 1), .Cells(UBound(varPixelarray("Red"), 2), UBound(varPixelarray("Red"), 1)) _
) = WorksheetFunction.Transpose(Arr_R)
End With
Gruß von Luschi
aus klein-Paris
Anzeige
AW: 3dim Array in 3 Worksheets schreiben
26.04.2018 10:10:29
Rainer
Hallo Luschi,
ja, drehen tut sich bei mir auch grad alles...
Aber du bist SPITZE und hast den (vermutlich sehr blöden) Fehler gleich gefunden...
Ganz richtig sieht es dann so aus, das "Arr_R" ist überflüssig.
With Sheets("R")
.Range(.Cells(1, 1), .Cells(UBound(varPixelarray("Red"), 2), UBound(varPixelarray("Red"), 1)) _
_
) = WorksheetFunction.Transpose(varPixelarray("Red"))
End With
Riesendank nochmal!
Rainer

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige