• ベストアンサー

Private Subをコピーしない

シートにPrivate Subが組み込まれた状態で、そのシートを別のブックに移動した場合、Private Subも同時に移動されてしまいます。 シートの移動を行った場合Private Subのみ移動しない方法はないのでしょうか? 埋め込んであるのは Private Sub Worksheet_Deactivate() On Error Resume Next CommandBars("××").Delete Call *** End Sub となっています。 別ブックに移動した場合、Resume Nextとなっているのにエラーで停止します。このエラーを出さない方法でも構いません。 別の方法として新しいシートを作成してCellsコピーを行うと共に、印刷範囲を指定してから移動する方法も試したのですが、シートに複数のページがある場合は微妙に印刷範囲がずれてしまって上手くいきませんでした。 宜しくお願い致します。

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

コードをSheetモジュールではなくて ThisWorkbookモジュールのSheetDeactivateイベントに書いておけばいいと思いますが。 '--------------------------------------------- Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)   If Sh.Name = "該当シー名" Then     On Error Resume Next     CommandBars("××").Delete     Call XXXX   End If End Sub '---------------------------------------------- 以上。

ae-1sp
質問者

お礼

自己解決いたしました。 CommandBars("××").Deleteを Application.CommandBars("××").Visible = Falseとすると実行する事が出来ました。 ありがとうございます。

ae-1sp
質問者

補足

Callは出来るのですがCommandBars("××").Deleteが実行されません。 On Errorを解除すると 「実行時エラー’91’ オブジェクト変数またはwithブロック変数が設定されていません。」 と出てきます。 Sheetモジュールに埋め込んでいる場合は問題なく動作するのに何故なのでしょうか?

その他の回答 (1)

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.1

VBAのエディタで、標準モジュールを追加して、関数をPublicで宣言してそこに書いたらダメですかね? その場合、シートのコピーや移動をしても、プログラムコードは埋め込まれていないように思います。

ae-1sp
質問者

補足

シートは複数有って、特定のシートを閉じたときのみCommandBars("××").Deleteを実行したいのです。 PublicではそのシートがDeactivateになった時に自動的に実行できるのでしょうか?

関連するQ&A