VBA - Array mit .Interior.ColorIndex füllen ?

21/10/2007 - 00:46 von Klaus Oberdalhoff | Report spam
Hi,

ich nutze den Tipp von M. Zimmermann, mit dem man die Daten eines
Excelsheets blitzschnell (ohne Loop) in ein Array einlesen / wieder auslesen
kann ...

Man definiert und setzt den Range, zum Lesen aus dem Array definiert man
vorher das Array
bzw. zum Schreiben ins Array definiert man einfach ein Variant ...

Dim rg as Range

Dim ArrXLIn

Dim ArrXlOut
ReDim ArrXlOut(1 To 15000, 1 To 7)

...
set rg ...
rg.Value = ArrXlOut
bzw.
ArrXlIn = rg.Value

soweit - so schnell

Meine Frage: Geht das auch beispielsweise mit .Interior.ColorIndex oder
.Font oder oder ?
(Ich habe es nur mit "Value" zum Laufen gebracht)

Hintergrundinfo:

Ich weiss wohl, dass und wie ich durch jede einzelne Zelle loopen kann, aber
das DAUERT. Wàre halt fein, wenn es für .Interior.ColorIndex oder
.Interior.Color oder andere Werte aus dem Sheet eine àhnlich schnelle Lösung
gàbe (ohne Loop "by Hand")

Meine Idee ist halt, im Prinzip aus einem Excel-Sheet, das ich für einen
Kunden auswerten (und veràndert wieder erzeugen) muss und das z.B. Farben
als Informationen enthàlt, mehrere Sheets mit jeweils allen Zellen zu
erstellen, Quasi:
Sheet 1 = Value <Spalte 1 bis Spalte n und Zeile 1 bis Zeile n enthàlt den
Wert>
Sheet 2 = ColorIndex
Sheet 3 = Color
Sheet 4 = Font

Meistens ist ja die Anzahl der Objekttypen, die man auswerten will,
begrenzt.
Mit den Werten, die ich auswerten will, fülle ich diese Sheets und werte sie
dann im Memory via Array aus und den Excerpt, die relevanten Daten,
speichere ich in einer Datenbank. Oder hat jemand eine bessere Idee ?

mit freundlichen Grüßen aus Nürnberg

Klaus Oberdalhoff KObd@gmx.de
Ich unterstütze PASS Deutschland e.V. (http://www.sqlpass.de)
Nàchstes Treffen in Nürnberg am 23.10.2007
 

Lesen sie die antworten

#1 Lorenz Hölscher
21/10/2007 - 07:43 | Warnen spam
Hallo Klaus,

das Beispiel ist noch nicht perfekt, aber vielleicht schon ein
Einstieg:
________________________________
Option Explicit

Dim rngAlles As Range
Dim arrZellen As Variant

Sub inArray()
Set arrZellen = ActiveCell.CurrentRegion
End Sub


Sub ausArray()
Dim rngNeu As Range
Dim i As Integer

ReDim arrRestZellen(CInt(ActiveCell.CurrentRegion.Cells.Count /
2))
For i = 0 To UBound(arrRestZellen)
If rngNeu Is Nothing Then
Set rngNeu = arrZellen(i).Cells
Else
Set rngNeu = Union(rngNeu, arrZellen(i).Cells)
End If
Next
rngNeu.Interior.Color = vbRed
End Sub
________________________________________

Ich habe einfach ein paar Zellen mit Daten gefüllt und will
anschließend die Hàlfte davon rot fàrben. Die Datenliste fülle ich in
"inArray" in ein Array, welches ich in "ausArray" verarbeite und das
verbleibende Range-Objekt auf einen Schlag fàrben kann.

Es geht also und Du kannst es bestimmt auch noch eleganter
schreiben... ;->

tschö, Lorenz

Ähnliche fragen