PDA

Vollständige Version anzeigen : dynamische Zellformatierung


hopethisnameworks
16.03.2009, 15:29
Hallo Zusammen,

versuche mich gerade an einem VBA Projekt. Es handelt sich um ein Notenraster welches die Erfassung von Noten erleichtern soll. Hierzu frage ich ab wieviele Aufgaben gestellt wurden, wieviel Punkte die jeweilige Aufgabe gab usw.. Jedenfalls ist der Bereich der Formatiert werden soll (Ausrichtung, Farbe, usw.) immer unterschiedlich breit, die Art der Formatierung bleibt jedoch gleich. Siehe Code:

'Formatierung
Range("C1:J1").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 65
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("I1").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ThemeColor = xlThemeColorAccent5
.TintAndShade = 0.599993896298105
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ThemeColor = xlThemeColorAccent5
.TintAndShade = 0.599993896298105
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ThemeColor = xlThemeColorAccent5
.TintAndShade = 0.599993896298105
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ThemeColor = xlThemeColorAccent5
.TintAndShade = 0.599993896298105
.Weight = xlThin
End With
Columns("C:J").Select
Columns("C:J").EntireColumn.AutoFit
Range("D:D,F:F,H:H,J:J").Select
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.499984740745262
End With
Columns("I:J").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent5
.TintAndShade = 0.599993896298105
.PatternTintAndShade = 0
End With

Die eingefärbten Teile verändern sich. Der grüne auch in der Anzahl. Die Bereiche die sich ändern kann ich berechnen, allerdings weiss ich nicht, wie ich mit den Buchstaben Zahlenbezeichnung der Zellen (z.B. A1) rechnen kann. Also wie ich zu A1 eine Variable hinzurechnen kann (z.B. V1=2) und nun C1 formatiert wird.

Hoffe ich konnte mein Problem einigermassen verständlich schildern.

PS: gerade sehe ich noch, dass irgendwo.Value = "=SVERWEIS(Tabelle1!M2;Tabelle2!$G$1:$H$20;2;WAHR)"
eine Fehlermeldung verursacht.

Vielen Dank für die Hilfe

jinx
16.03.2009, 15:38
Moin, hopethisnameworks.

statt der Range-Anweisung die Cells-Anweisung(Zeile, Spalte) verwenden, wo Cells(1, 1) bzw. Cells(1, "A") der Zelle A1 entsprechen.

Für die Zuweisung einer deutschen Formel sollte nicht Value verwendet werden, sondern FormulaLocal oder besser die Formel als Formula und in englisch angeben (VLookUp).

hopethisnameworks
17.03.2009, 08:45
super, danke für die schnelle Antwort. Das klappt. Habe es jetzt so:

Range(ActiveSheet.Cells(1, 5).Offset(0, AA), ActiveSheet.Cells(1, 10).Offset(0, AA)).Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 65
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
gelöst. Gibt es noch eine Möglichkeit die Formatierung als Konstante zu speichern um Platz zu sparen und den Code übersichtlicher zu gestalten?

Mein Code ist langsam größer als die erlaubten 64 und meine Anweisung

call Teil2()
End Sub

Sub Teil2()

führt zu dem Fehler: "Fehler beim Kompilieren: Sub, Function oder Property erwartet


Danke euch

jinx
17.03.2009, 16:00
Moin, hopethisnameworks,

seinerzeit auf diesen komischen großen und unhandlichen Dingern habe ich gelernt, möglichst modular zu arbeiten und viele Teile auszulagern, die dann mit Parametern übergeben immer wieder aufgerufen werden.

Der Code könnte auf zusammengefasst werden:

Dim AA As Long
AA = 10
With Cells(1, 5).Resize(10, AA)
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
' .Orientation = 65
' .AddIndent = False
' .IndentLevel = 0
' .ShrinkToFit = False
' .ReadingOrder = xlContext
' .MergeCells = False
End With