0

私は間違いを見つけることができません。エラー メッセージで「実行時エラー '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

助けてくれてありがとう

4

2 に答える 2

1

配列 (関数の結果calweeks = fillcalweeks(weeks)を.StringfillcalweeksVariant

を除くすべての変数を宣言したことに気付くでしょうcalweeks。VBA にはこの変数の明示的な宣言がないため、変数に割り当てますVariant

この問題を解決するにはOption Explicit、すべてのモジュールの先頭に配置することから始めます。プロジェクトをコンパイルすると、次のようなエラーが警告されます ([デバッグ] -> [VBA プロジェクトのコンパイル])。calweeksあとは、 として宣言するだけですString()

2 番目の問題があります。それは、fillcalweeks 内の配列にDateデータ型を格納しようとしているということです。、および変数をString()に変換するか(関数を使用してこれを行うことができます)、関数を変更して配列を返す必要があります。datestartdateendcalweekStringsVBA.CStr()fillcalweeksDate

returnarray()最後に、 withinのサイズ範囲を宣言する必要がありますfillcalweeks。VBA は、値を入力する前に、これがどのくらい大きいかを知る必要があります。returnarray行数がわかっているので (関数への入力)、これは の宣言をに置き換えるのと同じくらい簡単ReDim returnarray(0 To weeks - 1, 1 to 3) As Stringです。weeks - 1基数が 1 ではなく 0 であるため 、配列の次元を指定する必要があることに注意してください。

もう1つのエラーは、ワークシートに出力するときにループが必要であるということです。For i = 0 To weeks - 1そうしないと、配列が範囲外になります...

于 2013-06-07T09:45:24.540 に答える
0

どうも。コードのすべての間違いを見つけました。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
于 2013-06-07T10:06:11.937 に答える