2016-07-09 4 views
2

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?

+2

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

Antwort

0

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 
+0

Danke, es funktioniert gut. – Ali

+0

Seltsamerweise ist das '=' nicht unbedingt notwendig, wenn man eine Zeichenkette konstruiert, die als Formel ausgewertet wird, aber ihre Einbeziehung schadet nicht und kann Klarheit schaffen. – Jeeped

2

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.

+0

Danke für deine Erklärung, Auch das funktioniert gut für mich;) – Ali

4

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.

+0

Besserer Ansatz als meiner. – skkakkar

+0

OH GOTT! Es ist wirklich nett: D – Ali

+0

Sorry, aber das sollte die richtige (beste) Antwort sein ... –