• ベストアンサー

Excel VBAの動作異常

Win11 Office365family Excel (A)のSheet配置でVBAを作成していました。 プロジェクトエクスプローラ(PE)は、当然(B)の通りシート名が(A)と同じです。 ところが、VBAを作っていく段階でいつの間にか(C)のようにSheet1,11,111と増えておりこの時点でコマンドボタンが機能しなくなっていました。Sheet1,11は、Sheetの画面に存在しない。 1) プログラムはSheet1に記録されている。 2) 画面の「クイズ」はPEのSheet111(クイズ)に対応しているが、プログラムが記述されていない。 3) Sheet1に記載のプログラムを全コピーしSheet111(クイズ)に張り付けると正常に動くようになった。 そこで下記についてご教示いただきたくよろしくお願いします。 A) Sheet増える理由:どのような操作をしたから発生したのか? B) Sheet1,11はシートが存在しないので、PEから削除したいがその方法は? C) Sheet111(クイズ)をSheet1(クイズ)に戻す方法は?  

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (740/5646)
回答No.1

・Sheet111(クイズ)をSheet1(クイズ)に戻す方法は? プロパティウィンドウのオブジェクト名を変更すればできると思うのですが、 その前にSheet1を削除しないとですよね。 Sheet1はプロジェクトエクスプローラには見慣れないアイコンなので、 Worksheetではないシート形式のような気がします。 右クリックして「解放」が使えますか。 新しいブックにシートをコピーした方が早いかも知れないです。

ken-nosuke
質問者

お礼

ご回答ありがとうございます。 >Sheet1はプロジェクトエクスプローラには見慣れないアイコンなので・・・ ⇒確かにSheet1,Sheet11のアイコンはSheet111(クイズ)と異なりThisWorkbookと同じです。これが謎解きのカギでしょうか? >右クリックして「解放」が使えますか。 ⇒「解放」はグレー表示で使えません。「解放」が使えるのは標準モジュール内のみのようです。 >新しいブックにシートをコピーした方が早いかも知れないです。 ⇒Sheet111(クイズ)のSheetのみのコピーができました。シート名(Sheet111⇒Sheet1)は元に戻せません。また発生原因は不明のままですがとりあえず解決しました。ありがとうございました。

その他の回答 (4)

  • kkkkkm
  • ベストアンサー率65% (1620/2459)
回答No.5

回答No.4の記載漏れです 「新しいファイルにコピーしたけれど、*.xlsb ファイルを閉じて元の *.xlsm を再度開くと、すべてのオブジェクトが消えており」 のリンク元はこちらです。 VBA ThisWorkbookが2つある https://teratail.com/questions/120961

ken-nosuke
質問者

お礼

何度も回答ありがとうございます。 紹介いただいたサイトは、英文サイトのようで、 翻訳してもわかりにくく、書いてある通りにやったつもりですが、解決しませんでした。原因もよくわからないままです。 結局No.1の方の「新しいbookにコピーする」のが確実のようです。 本当にお世話をかけました。

  • kkkkkm
  • ベストアンサー率65% (1620/2459)
回答No.4

あと「thisworkbook複数」で検索して見つかったのは こちらでは、前回の「(*.xlsb)]で保存してxlsb形式で保存したファイルを開く」の後の操作ですが 「新しいファイルにコピーしたけれど、*.xlsb ファイルを閉じて元の *.xlsm を再度開くと、すべてのオブジェクトが消えており」でなおったぽい感じです。 https://stackoverflow.com/questions/18273071/excel-vba-project-has-generated-multiple-workbook-objects こちらは同じ現象で、新規ブックにすべて移し替えたみたいです。 ThisWorkbookが2つできた時の対処法 https://bybloswebsite.com/post-8665.html

  • kkkkkm
  • ベストアンサー率65% (1620/2459)
回答No.3

アイコンがthisworkbookと同じみたいですので、以下の症状と似ているのかもしれません。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13170310708 存在しないシートを削除することができた例です https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12195608482

ken-nosuke
質問者

お礼

助言ありがとうございます。 症状は似ているようなのですが、記載の方法では解決しませんでした。別の情報をお待ちします。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>Sheet配置でVBAを作成していました。 操作をして、マクロの記録を採り、VBAコードを見ておるのですか 大まかな状況の説明が不足していませんか。 ーー 操作をして、マクロの記録を採る以外で、VBAコードを作って実行しているタイプのVBAなら、 Worsheets.Addというコードを書かない限り、シートは増えないはずで、コードを見ればすぐわかる。 ーー シートとを追加した時のイベントを作っておくと、シートを追加したときに表示が出る、ようにできる。 これは操作でやった場合でも、VBAでやった場合でもひっかかると思う。 WorkbookのNewSheetイベントです。 Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "今シートが増えた" End Sub このコメントを出すことが、手掛かりにならないかな。 質問の>Sheet増える理由:どのような操作をしたから発生したのか? の対策の参考のために言っているつもり。 >Sheet1,11はシートが存在しないので、PEから削除したい そのシートをシートタブ上などで操作で削除すれば、PE(プロジェクトエクスプローラー)での表示は消えるのでは >Sheet111(クイズ)をSheet1(クイズ)に戻す方法は? 戻すといってもなんのこと。名前の変更ではだめなのか?内容のことは判らない。 ーー 普通VBAを利用していて起こることではないように思うが、 読者への説明が不足しているように思う。 ーー ・macro-の記録の場合、どういう操作をしたのか ・VBAを作ったのなら、そのコードのコピーを挙げて 質問すべきではないか。

ken-nosuke
質問者

お礼

回答ありがとうございます VBAコードを作って実行しているタイプのVBAなら、 Worsheets.Addというコードを書かない限り、シートは増えないはずで、 ⇒シートの追加はしていません。だから、謎なのです。 >Sheet1,11はシートが存在しないので、PEから削除したい そのシートをシートタブ上などで操作で削除すれば、PE(プロジェクトエクスプローラー)での表示は消えるのでは ⇒オブジェクトにシートがないので、削除しようがありません。 >Sheet111(クイズ)をSheet1(クイズ)に戻す方法は? 戻すといってもなんのこと。名前の変更ではだめなのか? ⇒Sheet111 は、excelのシステムがつけた番号、(クイズ)はユーザーがつけた名前。 もし今後も同じ現象が生じた場合Sheet111111とどんどん長くなる恐れがあるので可能であればSheet1に戻しておきたいということです。 >普通VBAを利用していて起こることではないように思うが、 読者への説明が不足しているように思う。 ⇒申し訳ありません。自分でも何が起きているのかわからないため、どこまで説明すればよいのか不明です。ファイルごとアップできれば良いのですが。 No.1の方の方法で半分解決しましたが、希望通りの解決には至っていません。 新しい情報があればご教示お願いします。

関連するQ&A

  • エクセル VBA シート毎に同じ動作をしたい・・・

    エクセルVBAでシート毎に同じ動作をしたいのです。 例えば A・B・C・D・E とシートがあるのですが、A以外のものを全部印刷したいのです。 今までは Worksheets("B").Select Range("A1:AG44").Select Selection.PrintOut From:=1, To:=1, Copies:=1, Collate:=True Worksheets("C").Select Range("A1:AG44").Select Selection.PrintOut From:=1, To:=1, Copies:=1, Collate:=True と これを繰り返していたのです。 これをやると文章も長くなりますし、シート名が変わったときには、VBAもすべて書き直しと言う状況になってしまいます。 何か打開策はありますでしょうか? よろしくお願いいたします。

  • Excel VBAで…。

    データーシート(1)のデータをレイアウトシート(2)に転記するのに 例えば sheets(1).range("A1").value=sheets(2).range("C5").value sheets(1).range("B1").value=sheets(2).range("C6").value sheets(1).range("C1").value=sheets(2).range("C7").value と言うように配置しているのですが もし、シート(1)セルB1の値が空白ならば シート(1)セルC1の値はシート(2)のセルC6に配置・・・ と言うように データがない場合は、転記後の配置は詰めて配置したいのです。 どうすればよろしいでしょうか?

  • EXCEL VBAで

    EXCEL VBAで シート1のA2~G2までの列にA,B,C,D~と題名があり、それぞれの下の行には数字が並んでます。シート2のA2~G2までの列にもA,B,C,D~と題名がありますが、ランダムに並んでます。シート1のAの行を、シート2のAの行に、BにはBへという風にコピーをさせるにはどのようにすればよいでしょうか。またシート1A~Gのどれかが欠けている場合もあります。その場合はシート1にあるもののみコピーすることとします。 わかりにくいかも知れませんか、どうかよろしくお願いします。

  • エクセル VBAで困っています

    エクセル VBA初心者です。プログラムの管理をしたいのですが。2つのブック(前月と当月)を比較して削除されたもの、追加されたもの変更されたものを調べたいのですが。Book1のSheet1のA列にプログラム名、B列にプログラムの変更日付があります。同様にBook2のSheet1のA列にプログラム名、B列にプログラムの変更日付があります。この二つのシートを比べてプログラムが増えたもの、減ったもの、変更日が変わったものの3点をBook3のSheetに書き出したいのですが。何卒宜しくお願いします。

  • エクセル VBA

    エクセル VBA初心者です。プログラムの管理をしたいのですが。2つのブック(前月と当月)を比較して削除されたもの、追加されたもの変更されたものを調べたいのですが。Book1のSheet1のA列にプログラム名、B列にプログラムの変更日付があります。同様にBook2のSheet1のA列にプログラム名、B列にプログラムの変更日付があります。この二つのシートを比べてプログラムが増えたもの、減ったもの、変更日が変わったものの3点をBook3のSheetに書き出したいのですが。何卒宜しくお願いします。

  • EXCEL 2000VBAで困っています

    EXCEL 2000VBAで困っています。 何処でどういう操作をしたか、ハッキリ特定できません。 エディタの画面でコードウィンドウを最大化すると、プロジェクトエクスプローラーとプロパティウィンドウの裏側まで広がってしまいます。 何かの操作ミスでプロジェクトエクスプローラーとプロパティウィンドウも一時広がって小さくならなくなってしまったのですが、何とか正常に戻せました。 ドッキングはすべて可にしてあります。 よろしくお願いします

  • エクセルのVBAについて

    初めて質問させていただきます。 エクセルの表なのですが、  A 1 a 2 b 3 c 4 D とある表を別のシートに  A 1 a 2 3 b 4 5 c 6 7 d と、一行空けてもしくは数行空けて表示させるVBAはありますか? 自分で色々探してても分からず困っています。 どうかお願いします。

  • エクセルVBAについて

    はじめてのVBAで本を読んでも使い方がわからないので教えてほしいのですが シート1にこのような表を作成して   A    B    1山田   500 2伊藤 20000 3佐藤    50 ・ ・ ・ シート2に    A   B    C 1    請求書 2 3 山田 4 500円 というような請求書を印刷していくVBAを作りたいのですが人数については10人から300人とその時々で変化するのでデータがないときは 印刷もそこで終わりという風にしたいのですが、、、 よろしくお願いします。 エクセル2003 XPです。

  • エクセルVBAで、画像の挿入をしたいと思っています。

    エクセルVBAで、画像の挿入をしたいと思っています。 シート名は左から まとめ、A、B、C、まとめ(1)、A(1)、B(1)、C(1)、まとめ(2)、A(2)、B(2)、C(2) と、あるとして、任意のフォルダの中にある画像(*.jpgが9枚)を昇順でひとつずつA、B、C、A(1)、B(1)…C(2)シート(まとめ以外のシート)の指定のセルに貼付けられないかと考えています。 画像の名前は任意で、001.jpgはA、002.jpgはB、…009.jpgはC(2)と画像は昇順に、シートは左からというルールは変わらないとして、どのようにVBAを組んでいけばよいでしょうか。 どうぞご教授お願いします。

  • エクセル VBA

    いつも、皆々様にはお世話になり、大変役立たせていただいております。 エクセルのデータについての質問です。 セルごとに A,B,C,D,E...... イ,ロ,ハ,ニ,ホ,ヘ,ト... と並んでいるデータがあるとします。 それをテキストデータとして取り出して、 A B C D E . . イ ロ ハ . . . と 各データを改行して取り出すことは可能でしょうか。 行列の変換ではありません。 各セルのデータをひとつずつ取り出して、 テキストデータとして1行ずつ取り出す方法なのです。 VBAで別のシートに1個ずつデータを移して、 ちまちまやっていれば出来そうなのですが、 一発でやる方法はないでしょうか。 よろしくお願い申し上げます。 なぜこのようなことが必要かと申しますと、 歯科のレセ電のプログラムの一環であります。

専門家に質問してみよう