0

という日付strRDateと別の文字列であるこの文字列がありますstrColor。締め切りは今週月曜日です。

私はこのようなものになりたいです:

'// strRDate format is MM/DD/YYYY

Dim strRDate,strColor
strRDate="1/1/1999"
strColor="none"   

 If strRDate is this weeks Monday or older then  <-- HOW DO I DO THIS ???
    strColor="green"
    else 
    strColor="red"
    end if

したがって、2013 年 10 月 21 日より古いものはすべて緑になり、それ以外は赤になります。

4

3 に答える 3

1

私はおそらく次のように計算します:

strRDate = "1/1/1999"
strColor = "none"

monday = Date - (Weekday(Date, vbMonday) - 1)

If CDate(strRDate) <= monday Then
  strColor="green"
Else 
  strColor="red"
End If

Weekday(Date, vbMonday)曜日ごとに 1 ~ 7 の値を返します。月曜日が最初の日です。

Monday    → 1
Tuesday   → 2
Wednesday → 3
Thursday  → 4
Friday    → 5
Saturday  → 6
Sunday    → 7

関数の戻り値から 1 を引くと、現在の日付と最新の月曜日の差が日数で得られます。現在の日付からその差を引くと、最新の月曜日の日付が得られ、入力日付と比較できます (CDate関数を使用して文字列を実際の日付に変換します)。

于 2013-10-22T21:46:13.293 に答える
0

この日付の月曜日は、Weekday() を減算し、月曜日の平日を調整することで計算できます。

  WScript.Echo "german locate (dd.mm.yyyy):"
  Dim dtCur : dtCur = #10/10/2013#
  Do Until dtCur > #10/24/2013#
     Dim dtThisMonday      : dtThisMonday      = DateAdd("d", -WeekDay(dtCur) + 2, dtCur)
     Dim isAfterThisMonday : isAfterThisMonday = dtCur > dtThisMonday
     WScript.Echo dtCur, WeekDay(dtCur), WeekdayName(WeekDay(dtCur), True), dtThisMonday, CStr(isAfterThisMonday)
     dtCur = DateAdd("d", 1, dtCur)
  Loop

出力:

german locate (dd.mm.yyyy):
10.10.2013 5 Thu 07.10.2013 True
11.10.2013 6 Fri 07.10.2013 True
12.10.2013 7 Sat 07.10.2013 True
13.10.2013 1 Sun 14.10.2013 False
14.10.2013 2 Mon 14.10.2013 False
15.10.2013 3 Tue 14.10.2013 True
16.10.2013 4 Wed 14.10.2013 True
17.10.2013 5 Thu 14.10.2013 True
18.10.2013 6 Fri 14.10.2013 True
19.10.2013 7 Sat 14.10.2013 True
20.10.2013 1 Sun 21.10.2013 False
21.10.2013 2 Mon 21.10.2013 False
22.10.2013 3 Tue 21.10.2013 True
23.10.2013 4 Wed 21.10.2013 True
24.10.2013 5 Thu 21.10.2013 True
于 2013-10-22T18:13:31.150 に答える