Verschiebbarer Rahmen
#1
Liebes Forum,

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?

lg Dominik
Top
#2
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.


Angehängte Dateien
.xlsx   Rahmen.xlsx (Größe: 8,74 KB / Downloads: 3)
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.





Top
#3
Hallo Dominik,

per VBA ginge so etwas:
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.

Gruß Uwe
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste