2

ユーザーが Excel の画像 (ボタン) をクリックすると、ワークシートを削除しようとしています。ただし、これによりExcelがクラッシュして再起動し、保存されていない進行状況が忘れられます。

これは私のサブです:

Sub DeletePlan()

Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
Dim SheetNamesToCopy As String

SheetNamesToCopy = ActiveSheet.Name



' Check what addon sheets exists for the media, then add existing ones to string
If CheckSheet("periodeplan", True) = True Then
    ThisWorkbook.SheetS(SheetNamesToCopy & " - periodeplan").Delete
End If

If CheckSheet("ukesplan", True) = True Then
    ThisWorkbook.SheetS(SheetNamesToCopy & " - ukesplan").Delete
End If

If CheckSheet("Input", True) = True Then
    ThisWorkbook.SheetS(SheetNamesToCopy & " - Input").Delete
End If

SheetS("Totalplan").Select
ThisWorkbook.SheetS(SheetNamesToCopy).Delete

Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic

End Sub

ほとんどの場合、アプリケーションがクラッシュします。しかし、常にではありません...何が間違っているのでしょうか?(削除機能がクラッシュを引き起こすことをテストして確認しましたが、必ずしも同じシートではありません)。

編集:この関数は、ワークブックの最後のシートを削除していません。あと20枚あります。またApplication.Calculation = xlCalculationAutomatic、式の割り当てがあり、すべての接続されたシートが削除される前にExcelで変更を計算したくないため、を使用します。

ヒントや回答をいただければ幸いです:)

4

9 に答える 9

7

このエラーは、マクロを開始するボタンが、削除するシートの 1 つにある場合に発生します。

答えは: シートを削除するボタン (またはマクロにリンクされた画像) を作成しないでください。

このエラーの理由を誰かがこの回答に追加できる場合は、そうしてください;)

于 2013-04-09T09:19:46.830 に答える
4

私は自分でこの問題に遭遇しました!この手法を改良する方法については、より経験豊富なデザイナーに任せますが、一般的な概念として、実用的な解決策があります。

マクロの実行を許可してからシートを削除しても、クラッシュしません。このようなもの:

Sub Delete_This_Sheet()

    Application.OnTime Now + TimeValue("00:00:02"), "Watergate"
    Sheets("Sheet with a death sentence").Visible = False
    
End Sub

Sub Watergate() 'To make things go away

    Application.DisplayAlerts = False
    Sheets("Sheet with a death sentence").Delete
    Application.DisplayAlerts = True

End Sub

于 2015-04-17T19:05:30.067 に答える
0

私はあなたが正しいと信じており、これを回避する唯一の方法は、このマクロが全体計画シートにあることを確認することです. また、いくつかの不要な手順を実行しており、シートの選択はセルをアクティブにして選択する必要があります。

Sub DeletePlan()    
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
Dim SheetNamesToCopy As String

SheetNamesToCopy = ActiveSheet.Name

'dont delete total plan
If sheetnames = "Totalplan" then exit sub      

SheetS("Totalplan").Activate
Activesheet.Cells(1,1).select  

'Turn off errors if sheet doesn't exist 
On error resume next 
ThisWorkbook.SheetS(SheetNamesToCopy & " - periodeplan").Delete
ThisWorkbook.SheetS(SheetNamesToCopy & " - ukesplan").Delete
ThisWorkbook.SheetS(SheetNamesToCopy & " - Input").Delete
ThisWorkbook.SheetS(SheetNamesToCopy).Delete
On error goto 0

Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic

End Sub
于 2013-04-09T12:10:01.207 に答える
0

アクティブ シートのボタン (または画像) からアクティブ シートを削除できます。あなたはそれを回避する必要があります。

ActiveSheet.Move before:=Worksheets(1)
Worksheets(2).Activate
Worksheets(1).Delete
于 2014-11-05T01:33:25.607 に答える