[英]VBA Excel Function Error Runtimeerror 13
我找不到错误。 错误消息为我提供了“运行时错误'13'”数据类型不匹配的错误。 该错误似乎在函数“ fillcalweeks”中。
Fillcalweeks应该返回一个数组,该数组由工作表中的开始和结束日期填充。
这是我的代码:
'For every calenderweek we need the start and end dates in an array to produce the timeline
Sub get_cal_weeks()
Dim weeks As Integer, i As Integer, col As String, weekstart As Date, weekend As Date
'start column is D
col = "D"
'get amount of weeks
weeks = countcalweeks()
'populate array calweeks
calweeks = fillcalweeks(weeks)
For i = 0 To weeks
Sheets("Kalenderwochen").Range("E" & i + 1) = calweeks(i, 1)
Next
End Sub
Function fillcalweeks(weeks As Integer) As String()
Dim i As Integer, datestart As Date, dateend As Date, calweek As Integer, returnarray() As String
For i = 0 To weeks
'date start & date end
datestart = Sheets("Kalenderwochen").Range("A" & i + 1).Value
dateend = Sheets("Kalenderwochen").Range("B" & i + 1).Value
calweek = Sheets("Kalenderwochen").Range("C" & i + 1).Value
returnarray(i, 1) = datestart
returnarray(i, 2) = dateend
returnarray(i, 3) = calweek
fillcalweeks = returnarray
Next
End Function
'Counts the calenderweeks in the Kalenderwochen sheet
Function countcalweeks() As Integer
countcalweeks = Sheets("Kalenderwochen").Range("A2").End(xlDown).row
End Function
谢谢你的帮助
您在行calweeks = fillcalweeks(weeks)
上遇到错误,因为您正在分配String
数组(function fillcalweeks
函数的结果分配给Variant
。
您会注意到,您声明了除calweeks
之外的所有变量。 由于VBA没有对此变量的显式声明,因此将其分配给Variant
。
要解决此问题,请在每个模块的顶部放置Option Explicit
。 编译项目时,它会提醒您注意诸如此类的错误(调试->编译VBA项目)。 然后,您需要做的就是将calweeks
声明为String()
。
您还有第二个问题,那就是您试图在fillcalweeks内将Date
数据类型存储在String()
数组中。 您需要将datestart
, dateend
和calweek
变量转换为Strings
(可以使用VBA.CStr()
函数执行此操作),或者更改函数fillcalweeks
以返回Date
数组。
最后,你需要声明的尺寸范围为returnarray()
内fillcalweeks
。 VBA需要知道它有多大才能填充值。 因为您知道有多少行(它是函数的输入), returnarray
用ReDim returnarray(0 To weeks - 1, 1 to 3) As String
替换returnarray
的声明一样简单。 请注意,您要将数组的尺寸设置为weeks - 1
因为您的基数为零而不是1。
另一个错误是,当您输出回工作表时,循环需要For i = 0 To weeks - 1
否则数组将超出范围...
谢谢。 我发现了代码中的所有错误。 1.声明calweeks和2.数组维数:
'For every calenderweek we need the start and end dates in an array to produce the timeline
Sub get_cal_weeks()
Dim weeks As Integer, i As Integer, col As String, weekstart As Date, weekend As Date, calweeks() As Variant
'start column is D
col = "D"
'get amount of weeks
weeks = countcalweeks()
'populate array calweeks
calweeks = fillcalweeks(weeks)
For i = 0 To weeks
field = i + i + 4
weekstart = calweeks(i, 0)
weekend = calweeks(i, 1)
Cells(5, field) = monetary_calc_week(weekstart, weekend)
Next
End Sub
Function fillcalweeks(weeks As Integer) As Variant()
Dim i As Integer, datestart As Date, dateend As Date, calweek As Integer, arraysize As Integer, returnarray() As Variant
arraysize = 52
weeks = weeks - 2
ReDim Preserve returnarray(arraysize, 3)
For i = 0 To weeks
If i > arraysize Then
arraysize = arraysize * 2
ReDim Preserve returnarray(arraysize, 3)
End If
'date start & date end
datestart = Sheets("Kalenderwochen").Range("A" & i + 2).Value
dateend = Sheets("Kalenderwochen").Range("B" & i + 2).Value
calweek = Sheets("Kalenderwochen").Range("C" & i + 2).Value
returnarray(i, 0) = datestart
returnarray(i, 1) = dateend
returnarray(i, 2) = calweek
Next
fillcalweeks = returnarray
End Function
'Counts the calenderweeks in the Kalenderwochen sheet
Function countcalweeks() As Integer
countcalweeks = Sheets("Kalenderwochen").Range("A2").End(xlDown).row
End Function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.