Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
776to780
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
776to780
776to780
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA Monatsanfang

VBA Monatsanfang
29.06.2006 22:07:08
Stefan
Hallo
habe folgendes Problem
Ich würde gerne unten stehendes Makro über eine MsgBox (OK) einmalig jeden Monatsanfang (ersten Werktag(Mo-Fr)) ausführen.
Nach klick OK

Sub löschenStatistik()
ActiveWindow.ScrollWorkbookTabs Position:=xlLast
Sheets("Statistik").Select
ActiveSheet.Unprotect
Columns("A:I").Select
Range("I1").Activate
Selection.Clear
Columns("K:K").ClearContents
Range("M2").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Danke

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Monatsanfang
29.06.2006 22:13:45
Ramses
Hallo
und was soll passieren, wenn der Monatsanfang auf das Wochenende fällt und/oder der nächste Tag ein Feiertag, vielleicht auch nur ein regionaler, ist ?
Gruss Rainer
AW: VBA Monatsanfang
29.06.2006 22:20:30
Stefan
Ich stelle mir das so vor !?
ich könnte zb aus Zelle A1 den zuletzt gespeicherten Monat als vergleich nehmen
Grob in einer Formel ausgedrückt
Angenommen wir haben jetzt Juli
=Wenn(A1=Monat juni jetzt aber Juli;MsgBox zum Makro ausführen;keine MsgBox)
Ich hoffe so könnt es irendwie gehen (mit einem Vergeich).
AW: VBA Monatsanfang
29.06.2006 22:45:31
Ramses
Hallo
schön dass du dir das so vorstellst ;-)
Aber
1.) Betrifft deine Frage den Monatsanfang
2.) Hast du meine Frage nicht beantwortet
3.) Kannst du aus einer Formel heraus ein Makro nur bedingt ausführen, d.h. es kann nicht alles gemacht werden.
Mit einer Formel ist das also gar nicht möglich.
Kannst du VBA ?
Gruss Rainer
Anzeige
AW: VBA Monatsanfang
29.06.2006 23:20:42
Stefan
1. Nein (da neuer Ansatz)
2
3. OK
?. Ich habe schon im VBA gearbeitet bin jedoch Amateur
Mein Lösungsversuch geht dahin
Ich Speichere beim beenden der Datei das Aktuelle Datum in Zelle "A1" ab !!
Ist es nun möglich in VBA nehme an Arbeitsmappe?
1. Beim öffnen der Datei den Monat zu vergleichen ("a1" & aktueller MM )
2. Wenn ja das dann die MSgbox kommt.
AW: VBA Monatsanfang
30.06.2006 10:49:45
fcs
Hallo Stefan,
das kann man mit einem Workbook_Open Makro umsetzen
Im folgenden Beispiel wird der 1. Arbeitstag im Monat mit einer Function bestimmt und mit dem aktuellen Tage verglichen.
mfg
Franz
Im VBA-Editor Unter "DieseArbeitsmappe":

Private Sub Workbook_Open()
'Vergleich des 1. Arbeitstages im Monat mit dem aktuellen Datum
November = True '1. November ist Feiertag
If Date = ErsterArbeitstag(Date, November) Then
If MsgBox("Heute ist der 1. Arbeitstag im Monat!" & vbLf & vbLf & _
"Soll die alte Statistik gelöscht werden?", vbQuestion + vbYesNo) = vbYes Then
Call löschenStatistik
End If
End If
End Sub

In ein Modul, das Löschen-Makro hab ich ein wenig optimiert:

Sub löschenStatistik()
' Löschen der alten Statistik-Daten
With Sheets("Statistik")
.Unprotect
.Columns("A:I").Clear
.Columns("K:K").ClearContents
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End With
End Sub
Function ErsterArbeitstag(Datum As Date, Optional ByVal November As Boolean) As Date
'Bestimmung des 1. Arbeitstages im Monat des Datum
'  Datum = DateSerial(2006, 6, 1) 'Testzeile
Select Case Month(Datum)
Case 1, 5 'Feiertag 1. Jan + 1. Mai
ErsterArbeitstag = Feiertag1(Datum)
Case 10 'Feiertag 3. Oktober
ErsterArbeitstag = Feiertag3(Datum)
Case 11 'Feiertag 1. November (regional)
If November = True Then
ErsterArbeitstag = Feiertag1(Datum)
Else
ErsterArbeitstag = KeinFeiertag1(Datum)
End If
Case 2, 3, 4, 6, 7, 8, 9, 12  'Standardmonate
ErsterArbeitstag = KeinFeiertag1(Datum)
Case Else
'do nothing
End Select
End Function
Private Function Feiertag1(Datum As Date) As Date
'1. Arbeitstag, wenn der 1. des Monats ein Feiertag ist
Select Case WeekDay(Datum)
Case vbFriday
Feiertag1 = DateSerial(Year(Datum), Month(Datum), 4)
Case vbSaturday
Feiertag1 = DateSerial(Year(Datum), Month(Datum), 3)
Case Else
Feiertag1 = DateSerial(Year(Datum), Month(Datum), 2)
End Select
End Function
Private Function Feiertag3(Datum As Date) As Date
'1. Arbeitstag, wenn der 3. des Monats ein Feiertag ist
Select Case WeekDay(Datum)
Case vbSaturday
Feiertag3 = DateSerial(Year(Datum), Month(Datum), 4)
Case vbSunday
Feiertag3 = DateSerial(Year(Datum), Month(Datum), 2)
Case Else
Feiertag3 = DateSerial(Year(Datum), Month(Datum), 1)
End Select
End Function
Private Function KeinFeiertag1(Datum As Date) As Date
'1. Arbeitstag, wenn der 1. des Monats kein Feiertag ist
Select Case WeekDay(Datum)
Case vbSaturday
KeinFeiertag1 = DateSerial(Year(Datum), Month(Datum), 3)
Case vbSunday
KeinFeiertag1 = DateSerial(Year(Datum), Month(Datum), 2)
Case Else
KeinFeiertag1 = DateSerial(Year(Datum), Month(Datum), 1)
End Select
End Function

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige