[英]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.