1つだけ過去を変えられるとしたら?

シートにPrivate Subが組み込まれた状態で、そのシートを別のブックに移動した場合、Private Subも同時に移動されてしまいます。
シートの移動を行った場合Private Subのみ移動しない方法はないのでしょうか?

埋め込んであるのは
Private Sub Worksheet_Deactivate()
On Error Resume Next
CommandBars("××").Delete
Call ***
End Sub
となっています。
別ブックに移動した場合、Resume Nextとなっているのにエラーで停止します。このエラーを出さない方法でも構いません。

別の方法として新しいシートを作成してCellsコピーを行うと共に、印刷範囲を指定してから移動する方法も試したのですが、シートに複数のページがある場合は微妙に印刷範囲がずれてしまって上手くいきませんでした。

宜しくお願い致します。

A 回答 (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
'----------------------------------------------

以上。

この回答への補足

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

補足日時:2008/11/13 16:51
    • good
    • 0
この回答へのお礼

自己解決いたしました。

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

お礼日時:2008/11/13 17:07

VBAのエディタで、標準モジュールを追加して、関数をPublicで宣言してそこに書いたらダメですかね?


その場合、シートのコピーや移動をしても、プログラムコードは埋め込まれていないように思います。

この回答への補足

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

補足日時:2008/11/13 15:03
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています