EXCEL ワークシートの削除(Method Worksheet.Delete)
いつもお世話になっております。
EXCELファイルを諸々修正し、タスク後で1番目のワークシートを削除するというタスクを作りたいのですが、ワークシートの削除ができずに困っています。修正部分はうまくいっています。
そこで、下記のような簡単なテストプログラムを作ってみたのですが、同様にワークシートの削除ができませんでした。
-----
変数はそれぞれ、ap,wb,wsで定義
Method Application.Workbooks.Open(Filename=ファイル名) 戻り値:wb
Set Application.Visible 値:'FALSE'LOG
Get Workbook.Worksheets.Item(Index=1) 戻り値:ws
Method Worksheet.Delete
Method Worksheet.Close(SaveChanges='TRUE'LOG)
Method Application.Quit
-----
間違っている点をご教授いただけますと幸いです。
よろしくお願いいたします。
Magic xpa 4.8
-
KMさん、
タスク後の段階ではまだシートがオープンされている状態なので削除ができないのではないでしょうか?
-
KMさん、
ちなみに、アップされたVBAの記述は、ChatGPTに聞けばどこが間違っている可能性があるか、すぐに教えてくれますよ。
-
KMさん、丹田さん、こんにちは
GoogleのBARDもなかなか頑張ってくれます (笑)
↓
ご提示いただいたコードは、ワークシートの削除に2つの問題があります。
問題1:ワークシートをアクティブ化する必要がある
Worksheet.Delete
メソッドを実行する前に、削除するワークシートをアクティブにする必要があります。アクティブ化されていないワークシートを削除しようとすると、エラーが発生します。問題2:保存せずに閉じる処理が不要
Worksheet.Close
メソッドは、ワークシートを保存せずに閉じる場合にのみ使用します。今回の場合、ワークシートを保存してから閉じる必要があるため、Worksheet.Close
メソッドは不要です。修正コード
コード スニペット// 変数を定義 ap = CreateObject("Excel.Application") wb = ap.Workbooks.Open(Filename=ファイル名) Set Application.Visible 値:'FALSE'LOG ws = wb.Worksheets.Item(Index=1) // ワークシートをアクティブ化 ws.Activate // ワークシートを削除 ws.Delete // ワークブックを保存して閉じる wb.Save wb.Close // アプリケーションを終了 ap.Quit
コードは注意してご使用ください。content_copy修正ポイント
-
Worksheet.Delete
メソッドの前に、ws.Activate
メソッドを追加して、ワークシートをアクティブ化しています。 -
Worksheet.Close
メソッドを削除しています。
このコードを実行すれば、1番目のワークシートを削除することができます。
その他の注意事項
- ワークシートを削除する前に、そのワークシートに保存されていないデータがあると、データが失われます。
- ワークシートを削除すると、そのワークシートに関連付けられたマクロや名前も削除されます。
参考資料
- Excel VBA でワークシートを削除する方法: [[無効な URL を削除しました]]([無効な URL を削除しました])
-
-
tandaさん 遠藤勇人さん
ご回答ありがとうございます。
解決しました。
ご教示いただいた通り、削除前にActivateメソッド追加しただけでは、変わらず削除できなかったため、マイクロソフトのサイトでWorksheet.Delete関数のページを見てみたところ、
ダイアログ ボックスを表示せずにワークシートを削除するには、 Application.Display.Alerts プロパティを False に設定します。
との表記があり、Deleteメソッドの前にDisplayAlertsを追加すると、削除することができました。
Application.VisibleをFALSEにしているから、シートを削除するかどうかのダイアログも表示されず、削除自体が実行されていなかったのだと思います。
VBAの理解が足りておらず、初歩的なところでつまずいていました。
大変勉強になりました。ありがとうございました。
-
遠藤勇人さん、
そうですね。ちなみに、GoogleのBardは今は名前が変わって、「Gemini」になっていますね。
Geminiも頑張っていますが、総合的にはChatGPTが断トツを走っているようです。まもなくリリースされる予定のOpenAIの「Sora」は、地球がひっくり返るくらいの凄さを持っているようですよ。評価版を評価している人たちは、声が出ないほど驚いているようです。
サインインしてコメントを残してください。
コメント
5件のコメント