Supportnet / Forum / Tabellenkalkulation
VBA für bedingte Formatierung
Frage
Hi Leute
Ein Anfrage an VBA Experten, bin leider Anfänger und suche eine Lösung für mein Prob. :-(
Habe Mokro aufgezeichnet um Zelle zu formatieren, da in der bedingten Formatierung eine Einstellung der Zellausrichtung nicht möglich ist, löste ich das Prob folgendermaßen:
Sub CellForm()
´
´ CellForm Makro
´
´ Tastenkombination: Strg+f
´
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 90
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
End Sub
Meine Frage ist nun kann dieses Makro erweitern, das wenn in Zelle A1:A20 "S" steht,soll in Zelle A2:A20, das oben gezeigte Makro ausgeführt werden, B.Z.W. soll die vertikale Ausrichtung in den Zellen A2:A20 wenn darüber in A1:A20 ="S" steht. Das geht zwar über das aufgezeichnete Makro, aber ich mir gern die Klicks zum Ausführen erspart. Wenn jemand eine Lösung wüsste, wäre ich sehr Dankbar.
Vielen Dank für eure Hilfe, mfg mathew
Antwort 1 von Hajo_Zi
Hallo mathew ,
in dem Beispiel mußt Du nur Deinen Bereich anpassen und Deinen Code bei case einfügen. Ich gehe mal davon aus das es sich um Eingaben handelt.
Link zur Datei
Gruß Hajo
in dem Beispiel mußt Du nur Deinen Bereich anpassen und Deinen Code bei case einfügen. Ich gehe mal davon aus das es sich um Eingaben handelt.
Link zur Datei
Gruß Hajo
Antwort 2 von mathew256
Hallo Hajo
Erst mal vielen Dank für deine Hilfsbereitschaft. Es handelt sich nicht um Eingaben, sondern die Zellen A1 bis A20 sind mit der einer Formel belegt, welche den den Sonntag mit einem "S" darstellen. Nun soll mein Makro in Zelle A2 bis A31, die Zellen vertikal formatieren, welche neben einem "S" in A1:A31 stehen. Ich hoffe es richtig erklärt zu haben. Und noch mal vielen Dank Mathew
Erst mal vielen Dank für deine Hilfsbereitschaft. Es handelt sich nicht um Eingaben, sondern die Zellen A1 bis A20 sind mit der einer Formel belegt, welche den den Sonntag mit einem "S" darstellen. Nun soll mein Makro in Zelle A2 bis A31, die Zellen vertikal formatieren, welche neben einem "S" in A1:A31 stehen. Ich hoffe es richtig erklärt zu haben. Und noch mal vielen Dank Mathew
Antwort 3 von Hajo_Zi
Antwort 4 von mathew256
Hig Hajo
Deine Datei hätte mir bestimmt geholfen, wennn ich nicht zu blöd wär sie anzuwenden. Werde noch ein bisschen VBA studieren müssen um das zu schnallen. Aber trotzdem vielen einen ruhigen Heilig Abend und nen schönes Weihnachtsfest für dich und deine Angehörigen
mfg mathew
Deine Datei hätte mir bestimmt geholfen, wennn ich nicht zu blöd wär sie anzuwenden. Werde noch ein bisschen VBA studieren müssen um das zu schnallen. Aber trotzdem vielen einen ruhigen Heilig Abend und nen schönes Weihnachtsfest für dich und deine Angehörigen
mfg mathew
Antwort 5 von Hajo_Zi
Hallo Mathew,
ich hoffe mal ich habe es richtig verstanden. Die Formatierung bei nicht "S" hast Du nicht angegeben.
Option Explicit
Private Sub Worksheet_Calculate()
´**************************************************
´* H. Ziplies *
´* 24.12.03 *
´**************************************************
´ diese Variante kostet natürlich Rechenleistung
´ da bei jeder Eingabe der Bereich Formatiert wird
´ HINTERGRUND
´ für Schrift RaZelle.Font.ColorIndex
Dim RaBereich As Range, RaZelle As Range
´ Bereich der Wirksamkeit
Set RaBereich = Range("A2:A20")
´ noch mehr Bereiche
´ Set RaBereich = Union(Range("C7:I26"), Range("L7:R26"), Range("U7:AA26"), Range("AD7:AJ26"))
´ ab Vesion XP braucht der Schutz nicht aufgehoben werden
´ Formatierung bei Schutz kann über Dialog Schutz eingestellt werden
´ ActiveSheet.Unprotect
For Each RaZelle In RaBereich
If Not Intersect(RaZelle, RaBereich) Is Nothing Then
If RaZelle.Value = "S" Then
With RaZelle.Offset(-1, 0)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 90
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Else
With RaZelle.Offset(-1, 0)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
End If
End If
Next RaZelle
´ ActiveSheet.protect
Set RaBereich = Nothing
End Sub
Gruß Hajo
ich hoffe mal ich habe es richtig verstanden. Die Formatierung bei nicht "S" hast Du nicht angegeben.
Option Explicit
Private Sub Worksheet_Calculate()
´**************************************************
´* H. Ziplies *
´* 24.12.03 *
´**************************************************
´ diese Variante kostet natürlich Rechenleistung
´ da bei jeder Eingabe der Bereich Formatiert wird
´ HINTERGRUND
´ für Schrift RaZelle.Font.ColorIndex
Dim RaBereich As Range, RaZelle As Range
´ Bereich der Wirksamkeit
Set RaBereich = Range("A2:A20")
´ noch mehr Bereiche
´ Set RaBereich = Union(Range("C7:I26"), Range("L7:R26"), Range("U7:AA26"), Range("AD7:AJ26"))
´ ab Vesion XP braucht der Schutz nicht aufgehoben werden
´ Formatierung bei Schutz kann über Dialog Schutz eingestellt werden
´ ActiveSheet.Unprotect
For Each RaZelle In RaBereich
If Not Intersect(RaZelle, RaBereich) Is Nothing Then
If RaZelle.Value = "S" Then
With RaZelle.Offset(-1, 0)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 90
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Else
With RaZelle.Offset(-1, 0)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
End If
End If
Next RaZelle
´ ActiveSheet.protect
Set RaBereich = Nothing
End Sub
Gruß Hajo

