2017-08-25 68 views
0

ユーザーにフォームの表示に従って、特定のシートを削除するために少しずつ作業しています。ユーザーは、リストボックスに保持するシートを選択します。コードは、リストボックス内のすべてのシートをループし、選択されていないシートを削除します。 しかし、フォームを実行していると私はオートメーションエラーしまったボタンをクリックしてください:シートを削除する際のオートメーションエラー

実行エラー「-2147417848(80010108):呼び出さ オートメーションエラー オブジェクトが

Private Sub Button_Export_Click() 
    Application.DisplayAlerts = False 
    For i = 0 To PSV_Case_List.listCount - 1 
     If Not PSV_Case_List.Selected(i) Then 
      Worksheets(PSV_Case_List.List(i)).Delete 

     End If 
    Next i 
    Application.DisplayAlerts = True 
End Sub 

を切断しましたこのメッセージの後、Excelがフリーズし、プロセスを終了する必要があります。

ありがとうございます!

答えて

1

このような削除を行うときは、シート(0)が削除されるとシート(1)がシート(0)になるなどの理由で、常に最も高いインデックスから開始して下降してください。だからこれを試してください:

For i = PSV_Case_List.listCount - 1 to 0 step -1 
+0

私はこれを試しても動作しません。実際には、PSV_Case_List.List(i)にはシートの名前が含まれているため、シートを削除すると影響を受けません。これはリストボックスの内容であるためです。あなたの助けをありがとう – Rowin

+0

フォームを閉じた後に配列に保存してから削除しようとしましたか?フォームを開いてスーパースタートシートを選択し、OKをクリックしてフォームを閉じ、アレイリスト内のすべてのシートを削除します。多分フォームを開いたままで削除すると、フォームが消えて「オブジェクトが切断されます」。その場合は、マクロが失敗したときにだけデバッグできます。 – exSnake

関連する問題