プロが教える店舗&オフィスのセキュリティ対策術

VBA独学中です。
ユーザーフォームの閉じるボタンを押すとパスワードを入力しないと閉じれないようにしています。
入力せずにキャンセルボタンなどをつくって押すとパスワードの入力画面だけ閉じて最初のユーザーフォームに戻りたいです。
わかりにくくて申し訳ないですが、よろしくお願いします

A 回答 (3件)

こんばんは、横から失礼します。


フローがイマイチわかりませんが、たぶん
UserForm1のUserForm_QueryCloseでUserForm2.Showを実行しているのでしょうか?そうだと想定して考えると、
UserForm2のOKボタンとCancelボタンがあるとした場合、[×]ボタンは不要なので
UserForm2の[×]を無効にします。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
MsgBox "[×]ボタンは使用できません。"
End If
End Sub

UserForm1のUserForm_QueryCloseでUserForm2.ShowならUserForm1が閉じる前なのでCancelすればよいのですが、わかり易い方法としては、
Public変数を使用する方法です。

Public変数は、標準モジュール宣言エリアに書きます。例として
Option Explicit
Public flag As Boolean

これを使用して
UserForm2の キャンセルボタン
Private Sub CommandButton2_Click()
flag = True
Unload Me
End Sub

UserForm1の
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
UserForm2.Show
If flag = True Then Cancel = True
End Sub

UserForm1を閉じる場合はflag = False を設定する必要があります。

UserForm2をUserForm_QueryCloseで呼ばなければ、もっとシンプルに出来るかと思いますが、参考まで、、
    • good
    • 0
この回答へのお礼

ありがとうございます。
解決することができました!

お礼日時:2021/02/16 15:37

複数のユーザーフォーム開いた状態で閉じるとそんな事になってしまうのでしたっけ。


私の認識違いだったようで、申し訳ありません。

私からは力技的な対処法しか提案できませんが…。

ユーザーフォームの入力項目分のグローバル変数を用意して、閉じるボタンをクリックしたときにその変数に入力項目を全てコピーしておきます。

キャンセルされた時はunload Userform2で両画面とも閉じますが、この直後にUserform1をShowして、グローバル変数に保持していた内容をUserform1にセットしては如何でしょう。

もっと良い方法があれば良いのですが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
難しく考えてたみたいで無事解決できました!

お礼日時:2021/02/16 15:36

現状の動きでは、


ユーザーフォームの閉じるボタンをクリックすると、ユーザーフォームが閉じて、パスワード入力フォームが現れるという事でしょうか?

であれば方法は2つで、
閉じるボタンがクリックされた時に、ユーザーフォームをさはそのままにして、パスワード入力フォームが現れるようにする。
記憶が曖昧ですが、確か閉じるボタンの処理って強制的に閉じてしまうのではなく、自分で記述しないと何も起きませんでしたよね?
もしユーザーフォームを表示させておきたくないのでしたら、visibleだけfalseにすれば良いです。
パスワード入力フォームでキャンセルボタンがクリックされた時は、これをtrueに戻せば元通りです。

若しくは、ユーザーフォームのキャンセルボタンがクリックされた時に、ユーザーフォームの内容をグローバル変数などに保持しておく事です。
パスワード入力フォームでキャンセルボタンがクリックされた時は、再度ユーザーフォームを表示して、保持しておいた情報をユーザーフォーム上に復元してあげれば良いです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
動きとしては閉じるボタンを押すとユーザーフォームは開いたままパスワード入力画面が出てくるような感じです。
パスワードを入力すれば全て閉じます。
パスワード画面のみを閉じてユーザーフォームに戻りたいのですが、Userform1.Showにするとすでに開いていますと出てしまい、機能しないんです。
パスワード画面を閉じるようにunloadUserform2にしても全て閉じてしまいます。
わかりにくくてすいませんが、よろしくお願いします

お礼日時:2021/02/14 09:31

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

このQ&Aを見た人はこんなQ&Aも見ています