[[20051115135212]] 『(■解決)マクロを無効にされたときの対処法』(おか) ページの最後に飛ぶ

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

 

『(■解決)マクロを無効にされたときの対処法』(おか)

 ブック開いてマクロを有効にすると、ユーザフォームが出るようにしています。
そこですべて作業できるようにしているのですが(シートに手作業で入力させないため)
マクロを無効で開かれたときにどうするか困っています。
いい方法ないでしょうか?
自分が考えたのは終了時にシートに保護をかけて、マクロを有効にすると自動的に
保護解除みたいな・・・無効にした人は保護解除されないのでシート表示されても入力できない。


 過去ログです。
[[20050420111632]]
 (INA)

 過去ログ参考にさせていただきました。
そこで問題が出たので質問なのですが、
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Worksheets("A").Visible = xlVeryHidden
    Worksheets("B").Visible = xlVeryHidden
    Worksheets("C").Visible = True
    ThisWorkbook.Save
End Sub
 
としたところ
マクロ有効にするとABが表示(問題なし)
マクロ無効にするとBCが表示される(Bは非表示にしたいのですが・・・)
Bのプロパティの設定に問題があるのでしょうか?
 
また、マクロ有効にして終了するときに、
WarksheetクラスのVisibleプロパティ設定できません。
となってしまいす。何が問題か分からなくて困ってます。


 openイベントは、どのように記述していますか?

  (INA)

 Private Sub Workbook_Open()
Application.ScreenUpdating = False
    Worksheets("A").Visible = True
    Worksheets("B").Visible = True
    Worksheets("C").Visible = xlVeryHidden
    ThisWorkbook.Saved = True
    Application.ScreenUpdating = True
End Sub
 
それとは別に
Private Sub Workbook_Activate()
    Application.WindowState = xlMinimized
    AppActivate Application.Caption
    ActiveWindow.DisplayWorkbookTabs = False
End Sub
Private Sub Workbook_Deactivate()
    ActiveSheet.DisplayWorkbookTabs = True
    Application.WindowState = xlNormal
    ActiveWindow.DisplayWorkbookTabs = True
End Sub
も書いています


 横から失礼します。
 すべてのシートが非表示になるからではないですか?

 Open後、シートA、シートBが表示、シートCが非表示状態です。
 Close時、シートAを非表示→シートBを非表示、このとき、すべてのシートが非表示になりますよね。

 Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Worksheets("C").Visible = True
    Worksheets("A").Visible = xlVeryHidden
    Worksheets("B").Visible = xlVeryHidden
    ThisWorkbook.Save
End Sub

 は、どうですか?

 (ken)

 ThisWorkBookに記されているのは↓で全てです。
この状態でエラーが発生するんです。
Private Sub Workbook_Open()
Application.ScreenUpdating = False
    Worksheets("A").Visible = True
    Worksheets("B").Visible = True
    Worksheets("C").Visible = xlVeryHidden
    ThisWorkbook.Saved = True
    Application.ScreenUpdating = True
End Sub
Private Sub Workbook_Activate()
    Application.WindowState = xlMinimized
    AppActivate Application.Caption
    ActiveWindow.DisplayWorkbookTabs = False
End Sub
Private Sub Workbook_Deactivate()
    ActiveSheet.DisplayWorkbookTabs = True
    Application.WindowState = xlNormal
    ActiveWindow.DisplayWorkbookTabs = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Worksheets("A").Visible = xlVeryHidden
    Worksheets("B").Visible = xlVeryHidden
    Worksheets("C").Visible = True
    ThisWorkbook.Save
End Sub


 kenさんのアドバイスにしたがって下さい。。。(--;)
  (INA)

 他のブック開いたときに
ActiveSheet.DisplayWorkbookTabs = True
'438'このプロパティまたはメソッドをサポートしていません。
がエラーになるのはなぜでしょうか?

 Private Sub Workbook_BeforeClose(Cancel As Boolean)
にPrivate Sub Workbook_Deactivate()の内容を
全部移したらうまく行きました。
でもなぜエラーが出なくなったかよく分からないです。
一応すべてうまく行きましたので解決とします。
ありがとうございました。

 >でもなぜエラーが出なくなったかよく分からないです。 
  ↓
 >すべてのシートが非表示になるからではないですか?
 kenさんのコメントを読んでいないのでしょうか?
 書いて下さっていますよ?

 ブレークポイントを設定して F8 でステップ実行すれば確認できるでしょう。
   (INA)


 >すべてシートが非表示になるからじゃないですか?
意味は分かるんですが、どうして全部非表示になっているのか分かりません。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Worksheets("A").Visible = xlVeryHidden
    Worksheets("B").Visible = xlVeryHidden
    Worksheets("C").Visible = True
    ThisWorkbook.Save
End Sub
で閉じる前にCを表示させてるんですが・・・
順番が違うと言うことなのでしょうか?
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Worksheets("C").Visible = True    ’←
    Worksheets("A").Visible = xlVeryHidden
    Worksheets("B").Visible = xlVeryHidden
    ThisWorkbook.Save
End Sub

 VBは、と言うかプログラムは1行1行実行されていきます。
 >Private Sub Workbook_BeforeClose(Cancel As Boolean)
から
 >End Sub
までが一気に実行されるわけではありません。
それを元に、一つ一つ見ていくと、
Workbook_BeforeCloseが実行される段階では
    Worksheets("A")は見えています
    Worksheets("B")は見えています
    Worksheets("C")は見えていません
Worksheets("A").Visible = xlVeryHiddenが実行された直後の時点で
    Worksheets("A")は見えていません
    Worksheets("B")は見えています
    Worksheets("C")は見えていません
Worksheets("B").Visible = xlVeryHiddenが実行された直後の時点で
    Worksheets("A")は見えていません
    Worksheets("B")は見えていません
    Worksheets("C")は見えていません
この時点で、全てのシートが見えなくなってしまいました。
よって、次のステップである
Worksheets("C").Visible = Trueは実行されることなくエラーの表示がなされます。
 
上記動作から考えます。
なら「Worksheets("C").Visible = True」を先に実行すればよいのではないか
と。
 
すなわち、一つ一つ見ていくと、
Workbook_BeforeCloseが実行される段階では
    Worksheets("A")は見えています
    Worksheets("B")は見えています
    Worksheets("C")は見えていません
Worksheets("C").Visible = Trueが実行された直後の時点で
    Worksheets("A")は見えています
    Worksheets("B")は見えています
    Worksheets("C")は見えています
Worksheets("A").Visible = xlVeryHiddenが実行された直後の時点で
    Worksheets("A")は見えていません
    Worksheets("B")は見えています
    Worksheets("C")は見えています
Worksheets("B").Visible = xlVeryHiddenが実行された直後の時点で
    Worksheets("A")は見えていません
    Worksheets("B")は見えていません
    Worksheets("C")は見えています
無事最後まで実行する事が出来ます、と言う流れになります。
これらの動作はINAさんが示されているように
 >ブレークポイントを設定して F8 でステップ実行すれば確認できるでしょう。
とする事で確認が出来ます。
(ご近所PG)

 なるほどご近所PGさんご丁寧にどうもありがとうございます。
■解決いたしました(おか)

コメント返信:

[ 一覧(最新更新順) ]


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