• ベストアンサー

非表示シートのマクロ実行

マクロ処理をさせたいAシートを非表示にしてBシートにマクロボタンを置いて実行させたいのですが 非表示にすると実行できません。 Aシートは 計算処理を行い Bシートには 値だけを出したいので BシートからAシートのマクロ処理を実行したいと思っています。 非表示にしても別シートから実行出来る方法を教えてください。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

ANo2です。 >Bシートにマクロボタンを設置して非表示シート(Aシート)のマクロを実行しようとするとBシートでマクロが実行されてしまいます。 No2の回答にも書きましたが、セルの指定にシートを指定していないのではないかと推測します。 マクロ内のCells(x,x)やRange("XX")など部分に、シートの指定を追加してください。 Aシートのセルを意味する場合は  Worksheets("Aシートのシート名").Cells(x,x) といった具合。 たくさんある場合は、  Set shtA = Worksheets("Aシートのシート名") などとしておいて以降は  shtA .Cells(x,x) というような指定方法でもOKです。 Bシートを意味するセル操作も同様にして、それぞれの対象セルを明示してあげれば、思った通りの動作になることでしょう。 

kurumin963
質問者

お礼

ありがとうございます!! Worksheets("Aシートのシート名").Cells(x,x)を記入したら 無事Bシートから実行することが出来ました。 本当に丁寧に教えて頂いて有難うございます。

その他の回答 (2)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

Excel2003で確認しましたが、ワークシートを非表示にしていても、そのシート上のマクロは実行できます。 >非表示にすると実行できません。 「実行できません」というエラーがでるのでしょうか? あるいは、別のエラーになるのでしょうか? または、実行されているけれど、予想したものと違う結果になるのでしょうか? マクロの内容が不明ですのでまったくの推測ですが、セルの指定に関してシートをきちんと指定していないと(特にActiveSheetやSheetの指定)意味するシートが変わって、違う結果になる可能性があります。 また、非表示のシートに対して Worksheets("~").Activate などの命令をしても、(当然ながら)そのシートは表示されません。(アクティブにはなるみたい) もし、特殊な状況で表示状態でないと効かないものがあるなら(ないと思いますが)、ScreenUpdating = Falseにしておいて、非表示を解除して処理を行った上で、再度元に戻せばよいでしょう。 それよりは、そのマクロをシートモジュールではなく、標準モジュール内に記述(移動)するほうがはるかに簡単だと思いますが、シートモジュールでなければならない、理由が何かあるのでしょうか?

kurumin963
質問者

お礼

Bシートにマクロボタンを設置して非表示シート(Aシート)のマクロを実行しようとするとBシートでマクロが実行されてしまいます。 そして 吹き出しで 目的セルにはアクティブシート上のセルを1つ指定してください。 と出てしまい 実行が中断してしまいます。 標準モジュール内に記述しているのですが何か間違えているのだと思います。 もう少し頑張ってみます。

  • orangezzzz
  • ベストアンサー率35% (401/1119)
回答No.1

こんばんは。 マクロがBシートに作られればよいと思うのですが。 Bシート上で、マクロの記録を開始して、Aシートの計算を行ない、Bシートに戻って記録を終了してください。 これでもだめですか。

kurumin963
質問者

お礼

早い回答ありがとうございます。 マクロをBシート上で記録し Aシートを非表示にするとエラーが出ます。 Aシートは出来るだけ非表示にしたいのです。 今のところ非表示にしたいデーターをセルの非表示という事で 対応していますがいずれBシートから実行したいのでもし他の要領で Bシートのマクロ実行ボタンから実行できる方法があれば教えてください。

関連するQ&A