Excel财政周计算器

时间:2013-07-17 14:38:49

标签: excel vba date week-number

我一直在努力解决这个问题几个小时,并且一直在打墙。我非常接近,但细节错误很少。目前我在excel vba中使用= weeknum来动态创建一行并接收#NUM!错误。它似乎在我引用单元格时有效,但是当我手动输入日期时,我得到类型不匹配错误并改变其他错误。我使用的日期格式是2013年6月3日

非常感谢任何帮助,感谢您的时间!

Sub Macro2()
    Dim xDate As Double
    Dim ReturnType As Integer

    TotalRowCount = ThisWorkbook.Sheets("sap").UsedRange.Rows.count
    Set entryDateRange = ThisWorkbook.Sheets("sap").Range("G2:G" & TotalRowCount)
'my attempt at setting the datatype for the row, I dont think this is needed, but was one solution I saw
    'Range("M2:M" & TotalRowCount).NumberFormat = "@"
'create a collumn to hold the fiscal week output
    ThisWorkbook.Sheets("sap").Range("M1") = "FW"

    For Each test In entryDateRange
        CurrentRow = test.Row
        fw_calc = Application.Evaluate("=WEEKNUM(G" & CurrentRow & "," & ReturnType & ")")
        ' In place of (G" & CurrentRow.. etc I would prefer to use test if possible
        Worksheets("sap").Cells(CurrentRow, 13) = fw_calc
    Next test
End Sub

2 个答案:

答案 0 :(得分:1)

好的,我看到了你的问题。请尝试使用以下行:

fw_calc = Application.Evaluate("=WEEKNUM(DATE(" & Year(test.value) & "," & Month(test.value) & ", " & Day(test.value) & "))")

为了更清楚地解释,WEEKNUM()函数想要一个excel序列日期,所以我们需要先创建一个。执行此操作的功能是DATE(),这需要单独的年,月和日(按此顺序)。因此,我们使用VBA函数Day()Month()Year()来解析日期单元格中的三个组件(test),然后将它们传递给{{1像这样的函数:

DATE()

返回日期序列号。然后我们将该序列作为参数传递给"DATE(" & Year(test.value) & ", " & Month(test.value) & ", " & Day(test.value) & ")" 以获取周数。看起来有点尴尬,但你明白了。

答案 1 :(得分:0)

fw_calc = Application.WeekNum(test, ReturnType)

但是您没有给ReturnType一个值,因此它的默认值为0,这不是可接受的值。如果省略,则默认为1(星期日)一周开始的那一天。