Ich möchte eine VBA schreiben, um zu überprüfen, ob WEEKNUM oder ISOWEEKNUM gleich dem Wert, dann den Rest des Makros ausführen. Ich habe versucht, das zu tun, aber ich habe einen Fehler wegen TODAY als arg bekommen.Wie kann ich die WEEKNUM-Funktion in einer Anweisung in VBA verwenden?
Antwort
Hier ist eine Möglichkeit, sowohl WEEKNUM()
und TODAY()
in VBA zu verwenden:
Sub dural()
If Evaluate("=weeknum(today())") = 28 Then
MsgBox 28
Else
MsgBox "not 28"
End If
End Sub
Die WEEKNUM-Funktion betrachtet die Woche mit dem 1. Januar als erste Woche des Jahres. Es gibt jedoch einen europäischen Standard, der die erste Woche als diejenige definiert, in der die Mehrheit der Tage (vier oder mehr) in das neue Jahr fällt. Dies bedeutet, dass die WEEKNUM-Funktion für Jahre, in denen es in der ersten Januarwoche drei Tage oder weniger gibt, nach dem europäischen Standard falsche Wochenzahlen liefert.
Sub test()
Dim wn As Integer
wn = Format(Date, "ww")
Debug.Print wn
End Sub
ISO Weeknum UDF ist.
Die ISO-Wochennummer
Die ISO-Kriterien für die erste Woche in einem Jahr: - eine Woche beginnt am Montag; so ist Montag der erste Tag jeder Woche - die erste Woche in einem Jahr mindestens 4 Tage in diesem Jahr muß
- 1. Januar enthalten ist in Woche 1, wenn es ein Montag ist, Dienstag, Mittwoch oder Donnerstag
- 4. Januar ist immer in Woche 1 eines Jahres
der erste Donnerstag in einem Jahr ist immer in Woche 1
Public Function ISOweeknum(ByVal v_Date As Date) As Integer ISOweeknum = DatePart("ww", v_Date - Weekday(v_Date, 2) + 4, 2, 2) End Function
diese Funktion eine andere kleine Routine testen hinzugefügt werden können.
Sub test_today_weeknum() Dim dt As Date Dim wno As Integer 'In this example, the variable called LDate would now contain the current system date. dt = Date Debug.Print dt wno = ISOweeknum(dt) Debug.Print wno End Sub
Für heute also 2016.09.07, gibt zunächst eine WEEKNUM 28 während ISO WEEKNUM Funktion 27
Für 2015.09.07 gibt sowohl den obigen Routinen WEEKNUM geben 28
Um den aktuellen Tag (ohne den Zeitabschnitt) in einer Zelle Formel in Excel zu erhalten, verwenden:
=TODAY()
im Progr VBA Amming-Umgebung wäre jedoch die Funktion DATE()
. Now
enthält sowohl das aktuelle Datum als auch die Uhrzeit, während Date
und Time
separate Befehle für Datum und Uhrzeit sind. Alles hängt davon ab, welche Informationen Sie benötigen.
Danke für deine Erklärung, Auch das funktioniert gut für mich;) – Ali
Verwenden Sie die WorksheetFunction object oder Excel Application object native Funktionen in VBA zu nennen.
debug.print WorksheetFunction.WeekNum(Date)
debug.print application.WeekNum(Date)
debug.print WorksheetFunction.IsoWeekNum(Date)
debug.print application.IsoWeekNum(Date)
if application.WeekNum(Date) = 28 then
'it is currently 28
end if
In VBA wird die Funktion durch TODAY()
Date
ersetzt.
Die WEEKNUM-Funktion betrachtet die Woche mit dem 1. Januar als erste Woche des Jahres. Es gibt jedoch einen europäischen Standard, der die erste Woche als diejenige definiert, in der die Mehrheit der Tage (vier oder mehr) in das neue Jahr fällt.Dies bedeutet, dass die WEEKNUM-Funktion für Jahre, in denen es in der ersten Januarwoche drei Tage oder weniger gibt, nach dem europäischen Standard falsche Wochenzahlen liefert. – skkakkar