hat wer mit folgendem Erfahrung? Ich will - ähnlich wie bei einem Kalender - einen Rahmen erstellen. Dabei sind in A1-G1 die Wochentage Mo-So. Sobald der Mo vorbei ist, geh ich auf A-Spalte und Ausblenden. Dann habe ich nur mehr B1-H1 (Di-Mo) zu sehen. Soweit so gut. Jetzt will ich gerne einen Rahmen haben, der immer genau eine Woche einrahmt. Geht das?
16.02.2018, 02:08 (Dieser Beitrag wurde zuletzt bearbeitet: 16.02.2018, 02:10 von Ego.)
Hallo Dominik,
im Prinzip ja, aber ich rate davon ab. Da ja nicht nur die aktuelle Woche eingerahmt werden muss, sondern auch sichergestellt werden muss, das bei allen anderen Zellen der Rahmen entfernt wird, wird das ein wenig rechenintensiv. Aber in einer kleinen Kalenderdatei wirst du es nicht merken.
Ich sehe zwei Möglichkeiten:
1. bedingte Formatierung Wenn die entscheidende Bedingung über eine Formel abgefragt werden kann, könnte man das über bedingte Formatierungen lösen. In der Anlage einmal die Linke Seite eines gleitenden Rahmens. Zusätzlicher Nachteil ist, dass ich die Strichstärke des Rahmens nicht beeinflussen kann.
2. über VBA: hier muss auch die genaue Bedingung und das Ereignis, das eine Überarbeitung auslösen soll vorgegeben werden.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Dim oS As Shape Dim bS As Boolean Dim rngV As Range For Each oS In Me.Shapes If oS.Name = "RahmenEineWoche" Then bS = True Exit For End If Next oS If Not bS Then Set oS = Me.Shapes.AddShape(msoShapeRectangle, 1, 1, 1, 1) oS.Name = "RahmenEineWoche" End If Set rngV = ActiveWindow.VisibleRange.Cells(1) With oS .Line.Weight = 2.25 .Line.ForeColor.SchemeColor = 10 'rot .Line.Visible = msoTrue .Fill.Visible = msoFalse .Top = rngV.Top .Left = rngV.Left .Width = rngV.Resize(, 7).Width .Height = rngV.Height End With End Sub
Füge diesen Code in das schon vorhandene VBA-Modul des entsprechenden Tabellenblattes ein.