Microsoft Excel

Herbers Excel/VBA-Archiv

Diagonale Rahmenlinien bei Wert


Betrifft: Diagonale Rahmenlinien bei Wert von: Benjamin
Geschrieben am: 07.08.2018 02:54:53

Hallo liebes Forum,

für einen Abrechnungsbogen wird pro Mitarbeiter eine Zeile automatisch über Anpassung der Daten aus einem Import geschrieben.
Hat ein Mitarbeiter nicht gearbeitet, müssen die daher freien Zellen auf dem Bogen durch Durchstreichen entwertet werden.
Wenn ein Mitarbeiter gearbeitet hat, erscheinen seine Stunden in der Spalte K.
K29 = Stunden Mitarbeiter 1, K30 = Stunden Mitarbeiter 2 usw...
Änderung der Formatierung bei Aktivierung der Mappe wäre auch kein Problem, da je nach Import nicht alle Stunden-Zellen geschrieben werden.

Über mehrere Tage hinweg habe ich recherchiert und getestet, aber bin nicht weiter als bis zu diesem Ergebnis gekommen:

Private Sub Worksheet_Change(ByVal Target As Range)

Target = Range("K29:K35")

If Target.Value = 0 Then
    With Target.Offset(RowOffset:=0, ColumnOffset:=-6)
        With .Borders(xlDiagonalUp)
         .LineStyle = xlContinuous
         .ColorIndex = xlAutomatic
         .TintAndShade = 0
         .Weight = xlThin
        End With
        With .Borders(xlDiagonalDown)
         .LineStyle = xlContinuous
         .ColorIndex = xlAutomatic
         .TintAndShade = 0
         .Weight = xlThin
        End With
    End With
Else
   With Target.Offset(RowOffset:=0, ColumnOffset:=-6)
      .Borders(xlDiagonalUp).LineStyle = xlNone
      .Borders(xlDiagonalDown).LineStyle = xlNone
   End With
End If
End Sub
Vielen Dank bereits im Vorfeld :-)

  

Betrifft: AW: Diagonale Rahmenlinien bei Wert von: Robert Werner
Geschrieben am: 07.08.2018 09:12:35

Hallo Benjamin,

verstehe ich Deinen Code richtig? Wenn im Bereich K29:K35 eine 0 eingetragen wird, soll die entsprechende Zelle im Bereich E29:E35 durchgestrichen formatiert werden. Dann passt Dein Code eigentlich schon, bis auf die erste Zeile.
Streiche die Zeile Target = Range("K29:K35") und füge den Rest in eine weitere If-Schleife ein:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("K29:K35")) Is Nothing Then
  If Target.Value = 0 Then
  ...
End If
End Sub
Dann müsste es funktionieren. Mit der eingefügten If-Schleife wird geprüft, ob die geänderte Zelle (=Target) im Bereich K29:K35 liegt.

Gruß
Robert


  

Betrifft: AW: Diagonale Rahmenlinien bei Wert von: Benjamin
Geschrieben am: 07.08.2018 23:07:05

Vielen lieben Dank für die Antwort :-)
Und vor allem vielen Dank dafür, dass du meinen Code direkt richtig verstanden hast.
Es funktioniert, nur habe ich jetzt das Problem, dass der Wert aus der Berechnung einer Formel stammt und daher Worksheet_Change(ByVal Target As Range) nicht automatisch funktioniert...

Meine Versuche mit Worksheet_Activate()
sind bislang gescheitert. :-(


  

Betrifft: AW: Diagonale Rahmenlinien bei Wert von: hary
Geschrieben am: 08.08.2018 08:16:29

Moin Benjamin
Dann geht:

Private Sub Worksheet_Calculate()
Dim zelle As Range
For Each zelle In Range("K29:K35")
  If zelle.Text = 0 Then
  '--deine Anweisung und statt Target nimmst du zelle
  End If
Next
End Sub

Startet bei jeder Formelberechnung, egal wo.
gruss hary


Beiträge aus dem Excel-Forum zum Thema "Diagonale Rahmenlinien bei Wert"