Worksheet_Change イベントから呼び出される次のコード (Excel 2007 以降の場合) があります。
Sub InsertRow(Movs As ListObject, currentRow As ListRow)
Dim newRow As ListRow
Set newRow = Movs.ListRows.Add(currentRow.index + 1) 'gives error when list is filtered
' below is my custom code, but you don't need to understand it to answer the question:
Range("xMaxID") = Range("xMaxID") + 1
newRow.Range.Columns(colID) = Range("xMaxID")
CopyRow Movs, currentRow, newRow
End Sub
基本的に、ユーザーが Excel テーブルで特定の変更を行うと、現在の行の下に新しい行が作成され、データのコピーが作成され、2 つの ID フィールドが両方の行を相互参照するため、それらが関連していることがわかります。
これは正常に動作しますが、リストがフィルター処理されてイベントが発生すると、ListRows.Add で次のエラーが発生します。
Run-time error 1004: cannot shift cells in a filtered range or table
エラーを理解しました。最初にフィルターを削除して回避できると思います。しかし、それはユーザーにとって失礼であり、後でフィルターをやり直すことを強制します (これは複雑になる可能性があります)。
この問題に対するエレガントな解決策は何でしょうか? どうにかして新しい行を作成し、フィルターを保持する (または自動的に元に戻す) ことはできますか?