0

スプレッドシート モジュールから、別のシートで何らかの処理を行い、整数を返す関数を呼び出します。次に、関数が呼び出されたシートのセルにその整数を書き込みたいと思います。エラー 400 が表示されました。シート間の切り替えが正しく処理されていないと思います。

それを手伝ってくれませんか?

Function lastNonZero(Rng As Range) As Integer

 i = 19
 Do While ActiveCell.Value = 0
   ActiveCell.Offset(0, -1).Activate
   i = i - 1
 Loop
lastNonZero = i
End Function

シート A のモジュールにあるサブから抽出します。

For j = startRow To startRow + (nRows - 1)
        Worksheets("B").Select
        Range("Y" & j).Activate
        k = lastNonZero(Worksheets("B").Range("Y" & j))
        Worksheets("A").Range("BZ" & j) = k
Next j
4

1 に答える 1

1

Range("Y" & j)行を次のように置き換えてみてください。

Worksheets("B").Range("Y" & j).Activate

シートのモジュールを呼び出すRange(xxx)と、選択されているかどうかに関係なく、そのシート内の範囲が参照されます。ただし、シートが選択されていないときに範囲を選択/アクティブ化しようとすると、アクティブなシートではないシートの範囲を選択できないため、エラーが返されます。

k = lastNonZero(Worksheets("B").Range("Y" & j))ps: 次の行 ( ) で、引数が関数で使用されていないという事実は変わりませんlastNonZero)。

于 2012-06-19T10:11:55.467 に答える