Hallo Leute,
in meinem Arbeitsblatt wird im Bereich C5:C35 mit Rechtsklick über ein Makro "Urlaub" eingetragen. Das funktioniert auch.
Die Resturlaubstage stehen in I4.
Wie kann man das Makro dahingehend erweitern, dass die Meldung "Keine Urlaubstage mehr vorhanden!" angezeigt wird, wenn die Urlaubstage aufgebraucht sind? Der Eintrag "Urlaub" soll dann nicht erfolgen:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
ActiveSheet.Unprotect
If Not Intersect(Target, Range("C5:C35")) Is Nothing Then
Cancel = True
If Target = "" Then
Select Case Target.Column
Case 3
Target = "Urlaub"
Target.Font.ColorIndex = 50
' Target.Offset(0, 6) = CDate("1:58")
End Select
Else
Target = ""
' Target.Offset(0, 6).ClearContents
Target.Font.ColorIndex = xlAutomatic
End If
End If
ActiveSheet.Protect
End Sub
Gruß
ossi
Hallo
eventuell so??
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim RNG As Range, UMax As Integer
Set RNG = Range("C5:C35")
UMax = 20 'Maximale Urlaubstage
ActiveSheet.Unprotect
If Not Intersect(Target, RNG) Is Nothing Then
Cancel = True
If Target = "" Then
Select Case Target.Column
Case 3
If WorksheetFunction.CountIf(RNG, "Urlaub") < UMax Then
Target = "Urlaub"
Target.Font.ColorIndex = 50
' Target.Offset(0, 6) = CDate("1:58")
Else
MsgBox "Max erreicht"
End If
End Select
Else
Target = ""
' Target.Offset(0, 6).ClearContents
Target.Font.ColorIndex = xlAutomatic
End If
End If
ActiveSheet.Protect
End Sub
LG UweD
Hallo UweD,
ich musste weg und bin erst jetzt wieder hier.
Also:
Ich muss im Makro die maximalen Urlaubstage eintragen, damit es funktioniert.
Da sich die Resturlaubstage jeden Monat ändern ändern können, sollte immer Bezug auf die Resturlaubstage in I4 genommen werden.
Bei der Meldung dachte ich an eine Msg-Box Hinweis in der Art:
MsgBox "Max. Urlaubstage erreicht"_vbExclamation, "Hinweis"
Ist das zu machen?
Gruß
ossi
[
attachment=26343]
am Besten ist, wenn du dir die Mustermappe anschaust.
Die Gesamt-Urlaubstage werden im Blatt Jan manuell in I4 eingetragen. Die Resturlaubstage in I4 der anderen Monatsblätter basieren auf einer Formel.
Gruß
ossi
Hallo nochmal
das ist aber doch jetzt keine große Änderung.
Code:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim RNG As Range, UMax As Integer
Set RNG = Range("C5:C35")
UMax = Range("I4")
'Maximale Urlaubstage
ActiveSheet.Unprotect
If Not Intersect(Target, RNG) Is Nothing Then
Cancel = True
If Target = "" Then
Select Case Target.Column
Case 3
If WorksheetFunction.CountIf(RNG, "Urlaub") < UMax Then
Target = "Urlaub"
Target.Font.ColorIndex = 50
' Target.Offset(0, 6) = CDate("1:58")
Else
MsgBox "Max. Urlaubstage erreicht", vbExclamation, "Hinweis"
End If
End Select
Else
Target = ""
' Target.Offset(0, 6).ClearContents
Target.Font.ColorIndex = xlAutomatic
End If
End If
ActiveSheet.Protect
End Sub
LG UweD
Ja UweD so klappt's. Prima.
Wenn die Urlaubstage aufgebraucht sind, bleibt I4 leer. Wie kann man erreichen, dass "0" angezeigt wird?
LG ossi
Bei Standardeinstellungen wird die 0 auch angezeigt.
gast du unter Datei, Optionen, ...
die Anzeige der Nullen abgeschaltet?
Siehe Foto
[
attachment=26354]
LG UweD
Ja die Anzeige von Nullen ist ausgeschaltet. So soll's auch sein, denn sonst werden überall Nullwerte angezeigt die ich nicht will.
Ich möchte eigentlich nur, dass in I4 die 0 angezeigt wird und die Zelle nicht leer bleibt.
Geht das überhaupt?
LG ossi
Hallo,
Zitat:Ich möchte eigentlich nur, dass in I4 die 0 angezeigt wird und die Zelle nicht leer bleibt.
Geht das überhaupt?
... der einfachste Weg? mache aus der
0(Zahl) einen
"0"Text, oder einen
'0Text
Verwende 'Validation' in C5:C35.
Und m Workbook Modul:
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address = "$I$4" And Len(Sh.Name) = 3 Then Sh.Range("C5:C35").Validation.Modify 3, , , Join([transpose(row(offset(A1,,,I4)))], ",")
End Sub
Verzichte auf verbundene Zellen