-1

すっごく、テーブルの1行を除くすべてを削除する素敵な小さなサブルーチンがありました。

Sub ClearFormTableRows(sourceRange, countRange)
Dim rowsCount As Integer, rowRangeName As Object
rowsCount = Application.WorksheetFunction.CountA(countRange)
With sourceRange

    Do Until rowsCount = 1

        .ListObject.ListRows(2).Delete
        rowsCount = rowsCount - 1
        If rowsCount = 1 Then Exit Do
    Loop

End With
End Sub

そして今日までそれは機能しました。しかし、それを呼び出すメインルーチンで、別の呼び出しを追加しました。別のテーブルに対して同じ構文を使用しましたが、今は何も実行せず、範囲外のエラー9サブルーチンをスローします。強調表示されている行は次のとおりです。.ListObject.ListRows(2).Delete
ただし、いずれかの呼び出しをコメントアウトすると、どちらでもかまいません。そのテーブルで正しく実行されます。しかし、両方を実行するように依頼すると、どちらも実行されません。

私は何が間違っているのですか?

4

1 に答える 1

1

この方法で試してください:rowRangeName object質問の特定のスニペットには使用されていないため、削除しました。

  Sub ClearFormTableRows(ByRef sourceRange as Range, ByRef countRange As Range)
     Dim rowsCount As Integer
     Dim objListObj As ListObject 
     Dim objListRows As ListRows 

     Set objListObj = sourceRange.ListObjects(1) 
     Set objListRows = objListObj.ListRows 
     rowsCount = Application.WorksheetFunction.CountA(countRange)

     While rowsCount > 1
     '-- just a re-confirmation, you can remove first if condition if you want.
     If (rowsCount > 1) And (rowsCount < objListRows.Count - 1) Then 
        objListRows(rowsCount).Delete 
        rowsCount = rowsCount - 1
     End If 
     Wend
  End Sub

参照:

PS: 関係ないかもしれませんが、 または のいずれかを使用してパラメータを明示的に宣言してByRefくださいByVal:

Sub ClearFormTableRows(ByRef sourceRange As Range, ByRef countRange As Range):)

于 2013-02-03T12:58:40.487 に答える