[[20080311172913]] 『マクロが有効・無効で表示シートを切替』(ajiponpon) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

 『マクロが有効・無効で表示シートを切替』(ajiponpon)

 たびたびの質問で気が引けるのですが…
 自分の知識の限界と検索の限界でこれ以上分からないので教えて下さい。

 やりたい事
 1、ブックを開いた時にマクロを有効にして開くとAシートが表示される
 2、ブックを開いた時にマクロを無効にして開くとダミーのBシートが表示され、
   かつメッセージBOXで「有効にしないとAは表示されない」旨を表示したい

 Private Sub Workbook_Open()
 ActiveWorkbook.Unprotect Password:="パスワード"
 Sheets("A").Visible = True
 Sheets("A").Select
 End Sub
 Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Sheets("A").Visible = False
 ActiveWorkbook.Protect Password:="パスワード"
 End Sub

 検索でここまでは分かったのですが、この場合「有効」だとAだけ表示したいのに
 AとダミーのBも表示されてしまいますよね…?
 Sheets("B").Visible = Falseを単純に書き加えたら閉じる段階でエラーになってしまいます。

 そしてメッセージボックスも参考マクロのあちこちに入れてみたのですが、
 エラーが表示されたり、「無効でダミー表示」の時には表示されず、
 しかも、「有効」でブックを閉じる段階になって初めて表示されて「おぉぉい!!」
 って感じになってしまって…

 詳しい方からしたら何で?と思われるかも知れませんが
 どんな風に書き足したら出来るのか教えて頂けないでしょうか?

 宜しくお願い致します!

 シートをすべて非表示にはできませんので、あくまで
順番の問題と思いますよ。
ダミーを標示した状態で保存する。
マクロ有効の場合にはAを表示してBを非表示にする。
保存するときにはBを先に表示してAを非表示にする。
そういうロジックでやってみてください。
(みやほりん)

 回答有難うございます!
 アドバイスを頂きまして、色々してみたのですが一向に解決せず…
 詳しくないなりに自動記録や検索などで色々してみたのですが、根本的に間違っていますでしょうか?
 出来ましたら具体的に教えて頂けると有難いです

【やってみた事1】

 Private Sub Workbook_Close()
 Sheets("無効ダミー").Visible = True
 Sheets("有効").Visible = True
 Sheets("有効").Select
 ActiveWorkbook.Save
 End Sub

 Private Sub Workbook_Open()
 ActiveWorkbook.Unprotect Password:="パスワード"
 Sheets("有効").Visible = True
 Sheets("有効").Select
 Sheets("無効ダミー").Visible = False
 End Sub

 Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Sheets("無効ダミー").Visible = True
 Sheets("有効").Visible = False
 ActiveWorkbook.Protect Password:="パスワード"
 End Sub

 この場合マクロを有効でブックを閉じようとした段階で
 「実行エラー1004 WorksheetクラスのVisibleプロパティを設定できません」となってしまいます…

 【やってみた事2】
 Private Sub Workbook_Close()
 Sheets("無効ダミー").Visible = True
 Sheets("有効").Visible = True
 Sheets("有効").Select
 ActiveWorkbook.Save
 End Sub

 Private Sub Workbook_Open()
 ActiveWorkbook.Unprotect Password:="パスワード"
 Sheets("有効").Visible = True
 Sheets("有効").Select
 Sheets("無効ダミー").Visible = False
 End Sub
 Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Sheets("無効ダミー").Visible = True
 ActiveWorkbook.Protect Password:="パスワード"
 End Sub

 この場合だとエラーは無くなりましたが、マクロ無効で開いた時、シート”有効””無効”
 どちらも表示されてしまう…

 色々変更しすぎて良く分からなくなってきて、メッセージボックスどころではなくなってきました(TT
 宜しくお願い致します。
 (ajiponpon)


 色々検索した結果、マクロを「有効」で開いてシート有効だけを表示した場合、
 「無効」で開いたときにシート無効(ダミー)だけ表示するというのが出来なさそうに思いました。
 そこで、

 'ThisWorkbookモジュール
 Option Explicit
 Const dPWD = vbBack & "Invalid"
 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  With Application
    .EnableEvents = False: .ScreenUpdating = False
    IsAddin = True: Protect dPWD, , True
    Save
    Unprotect dPWD
    IsAddin = False: Saved = True
    .ScreenUpdating = True: .EnableEvents = True
  End With
  Cancel = True
 End Sub

 Private Sub Workbook_Open()
  Unprotect dPWD: IsAddin = False: Saved = True
 End Sub

 「有効である時だけシートを表示させる」と言うのを検索で見つけてたのですが、
 これだと閉じる時に何度「はい」を選択しても「保存しますか?」のダイアログ?が出てきてしまいます。
 それが回避できるのであればこれを使いたいと思いますが…
 何とかなるものなのでしょうか?
 (ajiponpon)


例えばこんなのはどうでしょうか?

 Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Sheets("無効ダミー").Visible = True
  Sheets("無効ダミー").Select
  Sheets("有効").Visible = False
  ActiveWorkbook.Protect Password:="error123"
  ActiveWorkbook.Save
 End Sub

 Private Sub Workbook_Open()
  ActiveWorkbook.Unprotect Password:="error123"
  Sheets("有効").Visible = True
  Sheets("有効").Select
  Sheets("無効ダミー").Visible = False
 End Sub

 ajiponponさんがされたい事を整理すると
 1)マクロを無効で開いた時には”無効ダミー”のシートが表示されていて、”有効”のシートは隠れている。
 2)マクロを有効で開いた時には、”無効ダミー”のシートは隠れていて、”有効”のシートが表示されている。
 のであればこれで良いのかな?

 後、”マクロを無効状態でメッセージボックスを表示する”のは、VBAでは無理ではないかと。
 何しろ、メッセージボックスを表示する事自体がマクロを有効にしないと出来ないと思います。
 私が知らないだけな気もしますが(^^;;
 (wkj)

 wkjさん、ありがとうございます!!! 出来ました!!!

 書いて頂いたサンプルを見てものすごく納得です…
 詳しくないにしろ、なぜ気が付かなかったんだと!!
 しかも仰るとおり、マクロが有効でなければメッセージボックスが表示する訳がないですよね…
 色んな意味でドツボにハマっていたようです。
 あぁ恥ずかしい…
 スパッ!と解決、そしてお力をお貸し下さって有難う御座いました!
 (ajiponpon)


 出張中で書き込みが出来ませんでした。 
wkjさんフォローありがとうございます。
(みやほりん)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.