0

我试图在 Excel VBA 中查找两个日期之间的周数(两者之间有一些最小/最大功能),得到以下行的类型不匹配错误(运行时错误'13'):

WeeksWorked = Application.WorksheetFunction.RoundDown _ 
             (52 * Application.WorksheetFunction.YearFrac _ 
             (Application.WorksheetFunction.Max(DOH, DateValue("Jan 1, 2012")), _ 
              DateValue("Dec 31, 2012")), 0)

任何人都对我做错了什么有任何指导,将不胜感激!

4

3 回答 3

1

不确定为什么需要在 VBA 中使用它,您可以尝试以下方法。

在 Excel 中:

假设开始日期在 A1 中,结束日期在 A2 中,然后是 A3,

=(NETWORKINGDAYS(A1,A2))/5

现在这是从工作日的角度来看,因此每周有 5 天。如果您需要每周 7 天和正常的日子,

=WEEKNUM(A3)-WEEKNUM(A2)

分析工具包插件中的函数 WEEKNUM() 计算给定日期的正确周数(如果您在美国) 下面的用户定义函数将根据您计算机上的国家语言设置计算正确的周数。

如果您仍然需要使用 VBA,请尝试以下操作:(正如 Tim 指出的那样DateDiff非常方便。)或者您甚至可以使用Evaluate to trigger WEEKNUM.

Option Explicit

Function numWeeks(startDate As Date, endDate As Date)
    numWeeks = DateDiff("ww", startDate, endDate)
End Function

在 WEEKNUM 上使用 Evaluate

Function numWeeks(startDate As Range, endDate As Range)
Dim s As Integer, t As Integer
    s = Application.Evaluate("=WEEKNUM(" & startDate.Address & ",1)")
    t = Application.Evaluate("=WEEKNUM(" & endDate.Address & ",1)")
    numWeeks = t - s
End Function

于 2013-02-27T04:12:25.073 回答
0

正如评论中建议的那样,您可以这样做:

debug.print DateDiff("ww", DateValue("Jan 1, 2012"), DateValue("Dec 31, 2012"))

如果由于某种原因您想自己滚动,您可以截断以下商:

| 第 1 天 - 第 2 天 |
---------------
       7

示例代码:

Sub test_numWeeks_fn()
    Call numWeeks(DateValue("Jan 1, 2012"), DateValue("Dec 31, 2012"))
End Sub

Function numWeeks(d1 As Date, d2 As Date)
    Dim numDays As Long
    numDays = Abs(d1 - d2)
    numWeeks = Int(numDays / 7)
    Debug.Print numWeeks
End Function

结果:

52
于 2013-02-27T00:19:36.507 回答
0

在此处输入图像描述试试下面的代码:

Sub example()

Dim dob As Date
dob = #7/31/1986#

Dim todaydt As Date
todaydt = Date

Dim numWeek As Long
numWeek = DateDiff("ww", dob, todaydt) ' Difference in weeks

End Sub
于 2013-02-27T04:15:02.420 回答