您好我有一个列中的日期存在于YYYY-MM-DD H:mm:ss格式。我想将它们转换为工作周。
我试着像
For DateCounter = 1 To UBound(All_Submitted_Dates)
All_workweek(DateCounter) = WorksheetFunction.WeekNum(All_Submitted_Dates(DateCounter))
Next DateCounter
但我越来越标超出范围异常。谁能告诉我什么是错误?
从分配的范围内的阵列直接结束导致2D
阵列而不是一个1D
。为了克服这个问题,你可以参考它本身例如All_Submitted_Dates(DateCounter, 1)
或Transpose
输入。
如果输入的数据被保存在一列,你只需要一次Transpose
它
With Application
All_Submitted_Dates = .Transpose(Range("K2", Range("K1").End(xlDown)))
End With
但是,如果你的数据在多个列则需要Transpose
一倍,以获得1D
阵列
With Application
All_Submitted_Dates = .Transpose(.Transpose(Range("K2", Range("K1").End(xlDown))))
End With
然后,您可以参考您的数组,你在你的代码的其余部分都做
意见后更新我觉得您的问题(因为你没有包含在你的问题中的信息但是这可能只是)是由于事物的组合。你可以看看下面的代码。
我已经声明这两个All_Submitted_Dates
和All_WorkWeek
的变种。我已经然后设置All_Submitted_Dates
与和也ActiveSheet
ing的值,使得代码正在与一个Transpos[e]
阵列(此致将已经从1D
可能导致错误服用)的显式片参考。然后我ReDim
ed的All_WorkWeek
阵列使得其尺寸与All_Submitted_Dates
匹配。然后我用你的For
环路你上面写的。不过,我会建议使用Lbound(All_Submitted_Dates)
,而不是1,尽管它不应该太大的关系,但是是很好的做法。
你需要更新你的片上参考With Sheet1
块在您输入的数据不论如何储存,这在我的测试中,按预期工作。
Dim All_Submitted_Dates As Variant, All_WorkWeek As Variant
Dim DateCounter As Long
' Update with your sheet reference
With Sheet1
All_Submitted_Dates = Application.Transpose(.Range(.Range("K2"), .Cells(.Rows.Count, "K").End(xlUp)))
End With
ReDim All_WorkWeek(LBound(All_Submitted_Dates) To UBound(All_Submitted_Dates))
For DateCounter = 1 To UBound(All_Submitted_Dates)
All_WorkWeek(DateCounter) = WorksheetFunction.WeekNum(All_Submitted_Dates(DateCounter))
Next DateCounter
这些问题,我发现其中:
2D
和1D
引用ActiveSheet
可能导致错误End(xlDown)
但第一小区以上开始,导致范围,只选择一个小区(因此可能是默认为单元的值,而不是建立一个数组)范围选择All_WorkWeek
所以它不会接受任何值可能无法正常启动