我一直在努力解决这个问题几个小时,并且一直在打墙。我非常接近,但细节错误很少。目前我在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
答案 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(星期日)一周开始的那一天。