Excel makro... hilfe

  • #1
S

Spaggi

Bekanntes Mitglied
Themenersteller
Dabei seit
01.06.2004
Beiträge
76
Reaktionspunkte
0
Hallo,

also ich bräuchte da etwas Hilfe beim Erstellen von einem Makro für Excel, kann es nicht selber denn kenn mich mit VBA nicht aus, ich weiß evtl. wie ich es später benutze aber das wars auch schon. Habe folgendes Problem. Ich helfe beim Leiten einer Schulbücherei, die wir via excel tabelle verwalten. Damals habe ich bereits einen beitrag geschrieben aber da ging es darum, dass man per tastenkürzel das datum von heute in einem monat einfügen kann, dass man eben das rückgabe datum der bücher (1 Monat) via shortcut schnell eingeben kann, ohne lange überlegen zu müssen. Damals hat mit jemand dieses Makro gegeben, das auch tadellos funktioniert, kann aber leider nicht mehr rein posten, da datei gelöscht, es war irgendsowas mit day month +1 und year usw...

Naja jetzt wollte ich das ganze noch ein bisschen verfeinern, denn oft wurde deswegen ein rüchgabedatum eingefügt, dass eben zufällig auf ein wochenende fällt, und das will ich nun eben vermeiden, kann jemand ein makro machen, bei dem 1. inbegriffen ist, dass wenn es später via shortcut benutzt wird, das heutige datum nur einen monat später eingefügt wird, und 2. dies, falls es auf ein wochende fällt auf den tag nach den wochenende (Montag ;-)) verschoben wird.

Beispiel: Heute ist der 4. Oktober, ein Montag. Jemand leiht ein Buch aus, würde es sich jetzt exakt um einen monat verschieben, so fiele der tag auf einen sonntag, das will ich ja nicht, also wird dieser tag automatisch als wochenende tag in diesem fall sonntag erkannt und das datum um einen tag (zwei tage falls samstag ist) verschoben. Also lautet das Rückgabe datum 5. November.

Alternative: Zusätzlich ist auch noch eine bedingte formatierung eingegeben Zellwert ist größer als =HEUTE bzw. kleiner als bzw. ist gleich, dass eben sobald jemand ein buch über das datum hinaus behält wird er rot, bzw. gelb falls heute der tag der rückgabe fällig wäre. Wäre es als alternative zum makro evtl. möglich, dass man anstelle dessen das mit der makro weglässt, aber sich das datum erst rot bzw. gelb färbt, falls abgabedatum am wochenende war, wenn das wochendende vorbei ist. Denn oft hat man schon schüler verwarnt, sie wären über dem datum, wobei eben das datum am wochende abgelaufen ist, aber sie da ja das buch nicht zurückgeben konnten. lässt sich da was machen?
 
  • #2
Hi Spaggi,

wie gewünscht ;D

Gruß Matjes ;)
Code:
Sub DatumPlusMonat()

  Dim d_date As Date
  Dim i_Tag As Integer, i_Monat As Integer, i_Jahr As Integer
 
 ->nur eine Zelle selektiert ?
  If Selection.Count <> 1 Then
    MsgBox ( _
    Es sind mehrere Zellen markeirt. & vbLf & _
    Bitte nur eine Zelle markieren !)
    Exit Sub
  End If
  
 ->markierte Zelle ist nicht leer ?
  If Selection.Value <>  Then
    If vbYes <> MsgBox( _
      Die markierte Zelle ist nicht leer! & vbLf & _
      Soll der Inhalt mit dem Datum überschrieben werden?, _
      vbCritical + vbDefaultButton2 + vbYesNo) Then
      Exit Sub
    End If
  End If

 ->Datum heute
  i_Tag = Day(Now())
  i_Monat = Month(Now())
  i_Jahr = Year(Now())
  
 ->Monat + 1 bilden
  If i_Monat = 12 Then
    i_Monat = 1: i_Jahr = i_Jahr + 1
  Else
    i_Monat = i_Monat + 1
  End If
  
 ->Hier kann man noch Abfragen einbauen,
 ->die bestimmte Feiertage ausnehmen
 ->*** Weihnachten
  If ((i_Tag = 24) Or (i_Tag = 25) Or (i_Tag = 26)) _
      And (i_Monat = 12) Then
    i_Tag = 28
   ->oder wenn zwischen Weihnachten und Neujahr geschlossen ist
   ->i_tag = 2: i_Jahr = i_Jahr + 1
 ->*** Neujahr
  ElseIf (i_Tag = 1 And i_Monat = 1) Then
    i_Tag = 2
 ->*** 3.Oktober
  ElseIf (i_Tag = 3 And i_Monat = 10) Then
    i_Tag = 4
  End If
 ->*** Karfreitag, Ostern, Pfingsten sind im Datum variabel
 ->*** Diese Datum könnte man abhängig vom Jahr berechnen
 ->*** und dann auch vermeiden
  
 ->Datum + 1Monat
  d_date = i_Tag & . & i_Monat & . & i_Jahr
  
 ->Wenn Sonnbend oder Sonntag, Datum auf Montag verschieben
  If vbSunday = WeekDay(d_date) Then
      d_date = (i_Tag + 1) & . & i_Monat & . & i_Jahr
  ElseIf vbSaturday = WeekDay(d_date) Then
      d_date = (i_Tag + 2) & . & i_Monat & . & i_Jahr
  End If
    
 ->Datum eintragen
  Selection.Value = d_date
End Sub
 
  • #3
Danke, funktioniert einwandfrei ;D :D ;) dann kann ich mir die sache mit der bedingten formatierung auch sparen, denn jetzt kann niemand mehr am wochendende überfällig werden =)
 
Thema:

Excel makro... hilfe

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben