[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『(■解決)マクロを無効にされたときの対処法』(おか)
ブック開いてマクロを有効にすると、ユーザフォームが出るようにしています。 そこですべて作業できるようにしているのですが(シートに手作業で入力させないため) マクロを無効で開かれたときにどうするか困っています。 いい方法ないでしょうか? 自分が考えたのは終了時にシートに保護をかけて、マクロを有効にすると自動的に 保護解除みたいな・・・無効にした人は保護解除されないのでシート表示されても入力できない。
過去ログです。 [[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.