質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

2639閲覧

[VB.NET] エクセルのワークシート削除にて図形が存在するシートが削除できない

arumikann

総合スコア5

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2021/04/27 05:43

編集2021/04/27 06:49

【追記】
対象の図形について「グループ化」されておりました。
試しにグループ化を解除するとシートが削除できました・・・。

なので、「グループ化した図形が存在するとシートが削除できない。」という事象となります・・・。

【質問本文】
ひな形となるシート2つ(仮にA,Bとします)が存在するエクセルファイルを
用意しています。
ひな形A,Bをコピーし、コピーしたA,Bシートを編集して帳票を作成するプログラムを作成しております。

帳票作成後は不要となったひな形A,Bシートを削除したいのですが
以下のエラーが出力されます。
「System.Collections.Generic.KeyNotFoundException: 指定されたキーはディレクトリ内に存在しませんでした。」

ただし、Aは削除できるのですがBは削除できないという状況です。
AとBの違いが「シート内に図形が存在するか否か」という点で
試しにBの図形を全て削除すると想定通りシートの削除ができました。

Q.図形を含むシートの削除について、何か注意点があればご教示いただけますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tosi

2021/04/27 07:17 編集

削除場所のデバックで削除シート名は正しく、セットされていますよね。 読んだ感じですと、有り得ない現象に思えます。バグ? コピー処理等一切動かさずに雛形A,Bシートの削除部分のみを動かしても同じ結果でしょうか?(A,B以外にもシートがある状態で試験する必要あり) ダメなら、PC再起動。もう一度やって見て同じでしょうか。 こちらで「グループ化」が原因かをもう一度検証されたら如何かと思います。 ダメなら、諦めてグルーブ解除の処理をシート削除前に入れるしかないのでしょうか・・・
arumikann

2021/04/30 04:47

お返事ありがとうございます! グループ化が怪しいとみていろいろ試した結果 「グループ化したオブジェクトが3つ以上シート内に存在するとシート削除がエラーとなる」ことが判明しました。。。謎すぎる。。。 また、今回シートの削除には「EPPlus」というライブラリを使用しております。
guest

回答3

0

~~ExcelのApplicationに対して
.DisplayAlerts=False
をやればいけないでしょうか。
~~
→関係なさそうでした。すみません…

とりあえず、情報として
Windows10 office365 64bit,Microsoft Excel 16.0 Object Library
Windows8.1 office2016 64bit,Microsoft Excel 16.0 Object Library
においては図形をグループ化した状態で削除の処理を実行したら普通に削除されました。

端末の環境が原因か、その該当のファイルが原因かを切り分けるのであれば
他のブックで図形をグループ化したシートを削除できるかテストしてみるのも良いかと思います。

ただ、削除している箇所のコード
「xlBook.Worksheets.Delete(sheetName)」であれば
私の所では、引数が多すぎます。でエラーになるのですが
何か違うのでしょうか…

xlBook.Worksheets(sheetName).Delete
だと私の所でも動くのですが。

投稿2021/04/27 07:36

編集2021/04/27 09:26
xail2222

総合スコア1497

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arumikann

2021/04/30 04:48

回答ありがとうございます! グループ化が怪しいとみていろいろ試した結果 「グループ化したオブジェクトが3つ以上シート内に存在するとシート削除がエラーとなる」ことが判明しました。。。謎すぎる。。。 また、今回シートの削除には「EPPlus」というライブラリを使用しております。 ライブラリについて未だ学習中のため詳しくはないのですが お試しいただいたコードでエラーとなるのはライブラリの有無が原因かもしれません・・・!
guest

0

シート番号0から削除してませんか?

シートA:シート番号0
シートB:シート番号1

シートA:シート番号0を削除

シートB:シート番号0

シート番号1を削除 → 失敗。

投稿2021/04/27 06:41

sinya0320

総合スコア211

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arumikann

2021/04/27 06:46

回答ありがとうございます! 今回のケースは 以下の様にシート名を指定して削除しております・・・。 xlBook.Worksheets.Delete(sheetName)
guest

0

自己解決

原因?が分かりましたので記載致します。

「グループ化したオブジェクトがシート内に『3つ以上』存在するとエラーとなる。」事が分かりました・・・。

そもそもの削除対象シートには大量のグループ化したオブジェクトが存在しており、全てのオブジェクトをグループ解除するとシート削除ができました。
そこから図形を1つずつグループ化していくと・・・
・2つまでならOK
・3つ以上はエラー
となりました。

※参考までに、シート削除にはライブラリ「EpPlus」を使用しております。

解決策としてはグループ化を解除した状態でひな形シートを用意させていただくことといたしました。

回答いただいた皆様
お知恵をお貸しいただきありがとうございました!

投稿2021/04/30 05:43

arumikann

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問