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