Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
676to680
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
676to680
676to680
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Range zwischenspeichern

Range zwischenspeichern
11.10.2005 12:27:43
Andreas
Hallo Helfer aus dem Forum,
ich habe folgendes vor:
in einem Bereich sollen alle zellen mit Formeln eingefärbt werden. Das habe ich auch schon fertig:
Selection.SpecialCells(xlCellTypeFormulas, 23).Interior.ColorIndex = 3
Nun soll dieser Bereich aber zwischengespeichert werden, um die Hintergründe der Zellen später wieder auf die alten Werte zurücksetzen zu können.
Ich denke da an sowas, wie diese "Auswahl" an ein Feld zu übergeben und später wieder die Farben zurückzuschreiben.
Wer kann mir dabei helfen?

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range zwischenspeichern
11.10.2005 12:33:45
harry
hi,
warum so kompliziert?
For Each acell In Selection
If acell.Interior.ColorIndex = 3 Then
acell.Interior.ColorIndex = 0
End If
Next
tuts doch auch, oder?
liebe grüße,
harry
AW: Range zwischenspeichern
11.10.2005 12:37:40
Andreas
Danke, aber das wäre zu einfach ;-)
Ziel soll ja sein, die vorherige Zellfarbe wiederherzustellen (nachdem die Zelle eine andere farbe bekommen hatte, weil eine Formel drinsteht)
Und da dachte ich eben daran, den Bereich zwischenzuspeichern und dann die Farben anschließend wieder entsprechend dieser zwischengespeicherten Infos zu setzen.
AW: Range zwischenspeichern
11.10.2005 12:35:30
Nepumuk
Hi,
so:
Public Sub test()
    Dim intArray() As Integer
    Dim lngRow As Long, intColumn As Long
    Redim intArray(1 To Selection.Rows.Count, 1 To Selection.Columns.Count)
    For intColumn = 1 To Selection.Columns.Count
        For lngRow = 1 To Selection.Rows.Count
            intArray(lngRow, intColumn) = _
                Selection.Cells(lngRow, intColumn).Interior.ColorIndex
        Next
    Next
End Sub

Gruß
Nepumuk

Anzeige
AW: Range zwischenspeichern
11.10.2005 12:41:39
Andreas
Ja, interessant. Da wird der komplette Bereich durchlaufen.
zwei Fragen dazu:
- muß man den Bereich durchlaufen, also for Spalte... For Zeile... oder kann man den Bereich einfach auf ein Feld "in einem Zug" draufkopieren?
- Reicht es nicht, irgendwie mit einer For-Each-Schleife nur den Bereich
Selection.SpecialCells(xlCellTypeFormulas, 23) zu durchlaufen?
AW: Range zwischenspeichern
11.10.2005 12:53:35
Nepumuk
Hi,
so kannst du nur die Werte, aber keine Farbwerte auslesen.
Mit For Each wäre eine bessere Alternative. Hast du Recht!!!
Public Sub test()
    Dim intArray() As Integer
    Dim lngCount As Long
    Dim objCell As Range
    Redim intArray(1 To Selection.SpecialCells(xlCellTypeFormulas, 23).Count)
    For Each objCell In Selection.SpecialCells(xlCellTypeFormulas, 23)
        lngCount = lngCount + 1
        intArray(lngCount) = objCell.Interior.ColorIndex
    Next
End Sub

Gruß
Nepumuk

Anzeige
AW: Range zwischenspeichern
11.10.2005 14:50:20
Andreas
Danke für den Code-Schnippsel. Ich habe es etwas umgebaut, und es ist dieses (suboptimale) Lösung dabei herausgekommen (siehe unten). So richtig zufrieden damit bin ich aber nicht und schon garnicht stolz darauf. Ich dachte, daß man evtl. die Zellen selbst in ein Array speichern könnte - praktisch ein Array von Zellen (hmm - das ist doch dann ein Range.. *grübl*) Naja, für's erste erfüllt's seinen Zweck.
Wem noch was besseres dazu einfällt - bitte melden.
Danke an alle Helfer.

Sub Color_Formula()
' Zellen mit Formel drin einfärben
On Error Resume Next
Static strArray() As String
Static bolState As Boolean
Dim lngCount As Long
If bolState Then
'entfärben
For lngCount = 1 To UBound(strArray)
Cells(--Mid(strArray(lngCount), 2, InStr(1, strArray(lngCount), "C") - 2), _
--Mid(strArray(lngCount), InStr(1, strArray(lngCount), "C") + 1, InStr(1, strArray(lngCount), "I") - InStr(1, strArray(lngCount), "C") - 1)).Interior.ColorIndex = _
Right(strArray(lngCount), Len(strArray(lngCount)) - InStr(1, strArray(lngCount), "I"))
Next
Else
'speichern und einfärben
Dim objCell As Range
ReDim strArray(1 To Selection.SpecialCells(xlCellTypeFormulas, 23).Count)
For Each objCell In Selection.SpecialCells(xlCellTypeFormulas, 23)
lngCount = lngCount + 1
With objCell
strArray(lngCount) = .Address(ReferenceStyle:=xlR1C1) & "I" & .Interior.ColorIndex
.Interior.ColorIndex = 3
End With
Next
End If
bolState = Not bolState
End Sub

Anzeige
AW: Range zwischenspeichern
11.10.2005 17:20:51
Nepumuk
Hi,
eine Beispielmappe in der das ganze mit bedingter Formatierung, Excel4Makro als Name und ein bisschen VBA gemacht wird. Markiere den gelben Bereich in der Tabelle. In Spalte A sind Werte, in Spalte B Formeln.
https://www.herber.de/bbs/user/27399.xls
Gruß
Nepumuk

AW: Range zwischenspeichern
12.10.2005 09:23:02
Andreas
sDanke.
schöne und einfache Lösung. Allerdings werden evtl. vorhandene bedingte Formatierungen dabei zerstört...
Aber: Ich verwende meinen geposteten Code (mit kleiner Korrektur: aus "Right(strArray.." wird "--Right(strArray..")
Anzeige
Alternative
11.10.2005 13:21:49
Nepumuk
Hi,
das ganze ginge auch über bedingte Formatierung. Dann musst du die Farbwerte nicht zwischenspeichern.
Gruß
Nepumuk

AW: Range zwischenspeichern
11.10.2005 12:39:46
Harald
Hallo Andreas,
vielleicht so ?

Sub test1()
Range("A1") = Columns(23).SpecialCells(xlCellTypeFormulas, 23).Address
End Sub


Sub test2()
Range(Range("A1").Value).Interior.ColorIndex = xlNone
End Sub

Gruß
Harald

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige