"Urlaub" mit Rechtsklick eintragen erweitern
#1
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
Antworten Top
#2
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
Antworten Top
#3
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
Antworten Top
#4

.xls   Muster3.xls (Größe: 714 KB / Downloads: 11)

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
Antworten Top
#5
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
Antworten Top
#6
Ja UweD so klappt's. Prima.

Wenn die Urlaubstage aufgebraucht sind, bleibt I4 leer. Wie kann man erreichen, dass "0" angezeigt wird?

LG ossi
Antworten Top
#7
Bei Standardeinstellungen wird die 0 auch angezeigt.

gast du unter  Datei, Optionen, ...


die Anzeige der Nullen abgeschaltet?

Siehe Foto
   



LG UweD
Antworten Top
#8
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
Antworten Top
#9
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
Antworten Top
#10
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


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