簡體   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