繁体   English   中英

VBA Excel函数错误Runtimeerror 13

[英]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()数组中。 您需要将datestartdateendcalweek变量转换为Strings (可以使用VBA.CStr()函数执行此操作),或者更改函数fillcalweeks以返回Date数组。

最后,你需要声明的尺寸范围为returnarray()fillcalweeks VBA需要知道它有多大才能填充值。 因为您知道有多少行(它是函数的输入), returnarrayReDim 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM