- 締切済み
ユーザーフォームを作成したのですが・・・
自分でユーザーフォームを2個(検索フォームと修理内容フォーム)作成しました。 そして、入力フォームというシートの指定セル(例えばB30セル)をアクティブにすると、修理内容フォームというユーザーフォームが立ち上がるようにしました。 ここで、検索フォームが立ち上がっているときには指定セルがアクティブになっても修理内容フォームが立ち上がらないようにするにはどうしたらよいのでしょうか? IF文を使えばよいと思ったのですが、 IF 検索フォーム.show then ************ end if の*********部分がわかりません。 どの様に記載したらよいのでしょうか? よろしければ教えてください。 自分では1日がかりで考えたのですが、答えが見つかりませんでした・・・
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- D-Matsu
- ベストアンサー率45% (1080/2394)
#1です。一つ訂正。 > 検索フォームをDoModalで開けば と書きましたがShowメソッドの引数でモーダル・モードレスの制御してるんでした。またデフォルトがモーダルでした。 さて、本題です。 > 【型が一致しません】と出てしまいました。 Showはメソッドであってプロパティではなく、また戻り値を持ちません。ですから論理値が必要なifでは使えません。 「現在表示中かどうか」を示すプロパティはユーザーフォームにはないようなので、検索フォームの状態を管理するグローバル変数を作ってShow / Hideのたびに値を設定するようにし、その変数の値を見て分岐するようにしてください。
- D-Matsu
- ベストアンサー率45% (1080/2394)
検索フォームをDoModalで開けば閉じるまで何もできなくなりますが、そうはしたくないということでよいでしょうか。 「指定セルがアクティブになった」ときに「検索フォームが立ち上がっていない」ならば「修理内容フォームを立ち上げる」という条件にすればよいです。
お礼
D-Matsuさん、ご回答ありがとうございます。 わかりにくい質問でスイマセン。。 下のようなマクロを書いて、入力フォームシートになったときには指定のセルがアクティブになったときに修理内容フォームを立ち上げるようにしています。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) if Target.Address = "$B$38" Then 修理内容フォーム.Show End If End Sub また、検索フォームで検索した値の行のセルをそれぞれ入力フォームシートのB列に返すようにマクロを組んでいるのですが、その際にB38に来ると修理内容フォームが立ち上がってしまうのです。 これを立ち上がらないようにするためにはどうしたらよいのでしょうか? 自分で上記のプログラムに Private Sub Worksheet_SelectionChange(ByVal Target As Range) if Target.Address = "$B$38" Then if 検索フォーム.show then ←追記しました else 修理内容フォーム.show endif ←追記しました End If End Sub と記載すると、【型が一致しません】と出てしまいました。 解決方法はありますでしょうか?
お礼
D-Matsu様、ありがとうございます。 >Showはメソッドであってプロパティではなく、また戻り値を持ちません。ですから論理値が必要なifでは使えません。 そういう理由だったのですね。勉強になりました。 ご提案いただいた方法でこれから時間を見つけてがんばってみようと思います。後日、報告いたします。
補足
D-Matsu様、後日報告です。 結局、検索フォームが立ち上がったときにフラグを立てることで解消しました。 悩みを聞いていただいてありがとうございました。