0

行のグループを追加/削除するために私がかつて取り組んだコード(要件)。グループの最初の行が特定の基準を満たしている場合 (つまり、要件が考慮したいものではない場合)、(1) それをカウントせず、(2) グループを非表示にするように、コードを変更する必要がありました。 (現在および後続の 2 行)。これはすべてうまくいきます。

問題は、これらの変更を組み込んだので、コードの別のセクションでエラーが発生し、私の人生では理由がわからないことです。私はこれを経験しましたが、非常にイライラしています。私は助けを求めて手を差し伸べており、誰かが私のエラーを見てくれることを願っています(!)

グループ内の開始行番号と終了行番号を計算し、これらの計算を「開始」および「終了」と呼ばれる配列に格納します。ReDim ステートメントを使用して配列を初期化します。これが問題の一部である可能性があると考えたからです。

私の「添え字が範囲外」である理由についての洞察をいただければ幸いです。ロジックをたどり、このエラーを調査し、VBA 配列の構文/使用法について読みました。他に何をすべきかわかりません。前もって感謝します。関連する行は次のとおりです。

Sub Button1_Click()
    Cells.Select
    Selection.ClearOutline
    If Cells.EntireRow.Hidden Then Cells.EntireRow.Hidden = False
    Dim Start() As Integer
    Dim Finish() As Integer
    Dim p As Integer, q As Integer
    ReDim Start(0, 50)
    ReDim Finish(0, 50)

以下は、スプレッドシートのすべての行をループするロジックに埋め込まれています。

i = 1

    For Row = 4 To Cells(1, 6).Value - 1
        If Begin Then
            If Cells(Row, 3).Interior.ColorIndex = 44 Then
                Start(i) = Row + 1
                j = Cells(Row, 2).Value
                Begin = False
            End If
        Else
            If Cells(Row, 2).Value = j + 1 Or Cells(Row, 2).Interior.ColorIndex = 37 Then
                Finish(i) = Row - 1
                Begin = True
                i = i + 1
                Row = Row - 1
            End If
        End If
    Next

変更したブロックは次のとおりです (追加したコードは、行を非表示にしようとする最後のブロックです)。それは前のものに先行します。私の変更が上記にどのように影響するのか疑問に思っています(?!)

   If Cells(Row, 5).Value = "Requirement" Then
        Range(Cells(Row, 4), Cells(Row, 4)).Interior.ColorIndex = 40
        Rows(Row).Font.Bold = True
        Rows(Row).Font.Italic = False
        Rows(Row).Font.ColorIndex = 1 'Black
        If Cells(Row - 3, 4).Value = "" Then 'this is requirement #1
            Cells(Row, 4).Value = 1
            Else
            Cells(Row, 4).Value = Cells(Row - 3, 4).Value + 1
        End If

        p = Row
        q = p + 2
        Rows(p & ":" & q).Select
        If Cells(p, 19).Value = "4" Then
           Selection.EntireRow.Hidden = True
        Else
           Selection.EntireRow.Hidden = False
        End If
4

1 に答える 1

0

Redim Start(0,50)配列の次元0 to 0, 0 to 50、つまり 2 次元配列を作成します。

Start(0,i)これは、配列を呼び出すときに、両方の次元 IE:またはのパラメーターを提供する必要があることを意味しますFinish(0,i)。呼び出すStart(i)と、あなたが言及したエラーが発生します。

エラーを取り除く最も簡単な方法は、Redim 行を次のように変更することです。

ReDim Start(50)
ReDim Finish(50)

これは、最初にあなたが意図したことだと思います。

注: 使用した形式に基づいて、最初は実行するつもりだった可能性がありStart(0 to 50)ますFinish(0 to 50)。寸法のカンマは、下限と上限の区切りではなく、別の寸法を示します。

于 2012-12-06T15:01:58.003 に答える