ネットが遅くてイライラしてない!?

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

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

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

宜しくお願い致します。

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。


人気Q&Aランキング