2017-06-27 63 views
-3

我正在嘗試在VBA中編寫一個腳本,它會將日期作爲輸入,然後知道該日期是從本週到下個星期一還是比它多幾個星期將會。VBA有多少個星期幾直到日期和VBA錯誤

編輯:下面的部分已經解決,但我仍然可以使用頂部的一些援助。我愚蠢地使用VB.Net代碼而不是VBA。

我看了下面我會鏈接的頁面,似乎給了我一個方向。 Finding the date of monday in a week with VB.NET

問題是我無法在我的VBA代碼中使用這些命令。它的奇怪之處在於它似乎適用於其他人,但VBA不會讓我自己使用這些命令。任何人都可以幫助我理解爲什麼?以下幾行是我將代碼添加到我的excel VBA模塊後回來的代碼。 「日期。」也不起作用。

Dim today As Date = Date.Today  
Dim dayIndex As Integer = today.DayOfWeek 

dayIndex += 7 

Dim dayDiff As Integer = dayIndex - DayOfWeek.Monday  
Dim monday As Date = today.AddDays(-dayDiff) 
+2

'我試圖在VBA中編寫腳本......'那麼你不需要VB.NET標記。如果您不確定 – Plutonix

+1

,請參閱標記上的使用指導文字,您無法聲明並將值分配給同一行上的變量。將它們拆分爲:'今天變暗日期'和'今天=日期'等等。 –

+0

和'dayIndex + = 7'必須是'dayIndex = dayIndex + 7' –

回答

1

沒有VBA你可以用一個公式:

=ABS(INT((WEEKDAY(A1-2)-A1+TODAY())/7)) 

A1是開始日期
2對應於
一週 除以7的週一一天,有它的計數
您可以將Today()更改爲任何日期,在這種情況下,您可以計算兩個日期之間的星期一數量

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

可以1之間的公式中改變2到任何數目直到7以對應需要任何平日

隨着VBA
你需要一個UDF用戶定義的函數:

Function NumbWkDays(StartDate As Date, EndDate As Date, _ 
    Days As Long) As Integer 

    ' Returns the number of qualifying days between (and including) 
    ' StartDate and EndDate. Qualifying days are whole numbers where 
    ' each digit represents a day of the week that should be counted, 
    ' with Monday=1, Tuesday=2, etc. For example, all Mondays, Tuesdays 
    ' and Thursdays are to be counted between the two dates, set 
    ' WkDays = 124 on your worksheet. 
    ' 

    Dim iDate As Date 
    Dim strQdays As String 

    strQdays = CStr(Days) 
    NumbWkDays = 0 

    For iDate = StartDate To EndDate 
     If strQdays Like "*" & CStr(Weekday(iDate, vbMonday)) & "*" Then 
      NumbWkDays = NumbWkDays + 1 
     End If 
    Next iDate 

End Function 

然後,你必須用它作爲公式:

=NumbWKdays(startdate,Enddate,1) 

1日

要創建UDF,你必須:

  • 單擊Visual Basic下開發選項卡
  • 插入
  • 模塊
  • 代碼
    然後在板材使用的功能就像粘貼上面