Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5420 / 13646 ツリー ←次へ | 前へ→

【50884】ユーザーフォームが開いているかどうかの確認の仕方について教えて下さい。 どーも 07/8/21(火) 19:25 質問[未読]
【50885】Re:ユーザーフォームが開いているかどうか... ぱっせんじゃー 07/8/21(火) 19:44 発言[未読]
【50902】Re:ユーザーフォームが開いているかどうか... どーも 07/8/21(火) 23:11 質問[未読]
【50914】Re:ユーザーフォームが開いているかどうか... ぱっせんじゃー 07/8/22(水) 8:39 発言[未読]
【50916】Re:ユーザーフォームが開いているかどうか... どーも 07/8/22(水) 10:33 お礼[未読]
【50917】Re:ユーザーフォームが開いているかどうか... yuu1 07/8/22(水) 10:56 回答[未読]
【50918】Re:ユーザーフォームが開いているかどうか... どーも 07/8/22(水) 11:49 お礼[未読]

【50884】ユーザーフォームが開いているかどうかの...
質問  どーも  - 07/8/21(火) 19:25 -

引用なし
パスワード
   はじめて投稿致します。よろしくお願い致します。m(vv)m

■ 質問内容 ■
Excel VBAの初心者です。
ユーザフォームが2つありまして、(ここではUserForm1とUserForm2とします)
現時点ではCommandButton1がクリックされた際にUserForm1が開くようにしてあるのですが、これに「UserForm2が開いている際はUserForm1を開かない」といった条件を付けたく思っております。

Private Sub CommandButton1_Click()
  '画面を固定
  Application.ScreenUpdating = False
  
  'ここにUserForm2が開いているかどうかの条件文を書こうと思うのですが…。
  UserForm1.Show vbModeless
   
  '画面固定を解除
  Application.ScreenUpdating = True
End Sub

ウェブ等で、ワークブックが開いているかどうかを検索する方法はいろいろ参考になったのですが、ユーザーフォームが開いているかどうかをチェックする方法については探しきれず、投稿させて頂きました。
よろしくお願い申しあげます。m(vv)m

【50885】Re:ユーザーフォームが開いているかどう...
発言  ぱっせんじゃー  - 07/8/21(火) 19:44 -

引用なし
パスワード
   ループしてチェックします。

Sub UFCHK()
Dim UF As Object
Dim chk As Boolean
 chk = False
  For Each UF In UserForms
  Select Case LCase(TypeName(UF))
   Case "userform1"
   chk = True
   Exit For
  End Select
  Next
 If chk = False Then
   MsgBox "UserForm1は開いていません"
 Else
   MsgBox "UserForm1は開いています。"
 End If
End Sub

【50902】Re:ユーザーフォームが開いているかどう...
質問  どーも  - 07/8/21(火) 23:11 -

引用なし
パスワード
   パッセンジャーさん
早速の御教授ありがとうございます。For Eachを使うのですね。

ということであれば、存在をチェックするfunctionを下記のように作って、

----- ここから -----
'現在開いているユーザーフォームの存在のチェック
'True=ユーザフォーム有り、False=ユーザフォーム無し
Function IsUserformOpen(strUserformName As Variant) As Boolean
  Dim objUserform As Object
   IsUserformOpen = False
  'ユーザーフォームの一覧
  For Each objUserform In UserForms
    '大文字小文字を区別しない
    If LCase(strUserformName) = LCase(objUserform.Name) Then
      IsUserformOpen = True
      Exit For
    End If
  Next
End Function
----- ここまで -----

コマンドボタンのルーチンの条件で使えるかと思ったのですが、

----- ここから -----
Private Sub CommandButton1_Click()
  '画面を固定
  Application.ScreenUpdating = False
  
  If (IsUserformOpen(UserForm2.Name) = False) Then
     UserForm1.Show vbModeless
  End If 
  '画面固定を解除
  Application.ScreenUpdating = True
End Sub
----- ここまで ----
型が違うと怒られてしまいます。

UserForm2.Nameの型がVariantじゃ駄目、と言われているような風なのですが、間違い等をご指摘頂ければ幸いです。

【50914】Re:ユーザーフォームが開いているかどう...
発言  ぱっせんじゃー  - 07/8/22(水) 8:39 -

引用なし
パスワード
   >If (IsUserformOpen(UserForm2.Name) = False) Then

↓では?

If (IsUserformOpen("UserForm2") = False) Then

【50916】Re:ユーザーフォームが開いているかどう...
お礼  どーも  - 07/8/22(水) 10:33 -

引用なし
パスワード
   ぱっせんじゃーさん

おぉ、うまく動きました! 感激です!!!
ありがとうございました!!!

【50917】Re:ユーザーフォームが開いているかどう...
回答  yuu1  - 07/8/22(水) 10:56 -

引用なし
パスワード
   こんにちは。
>ユーザフォームが2つありまして、(ここではUserForm1とUserForm2とします)
>現時点ではCommandButton1がクリックされた際にUserForm1が開くようにしてあるのですが、これに「UserForm2が開いている際はUserForm1を開かない」といった条件を付けたく思っております。

簡単な方法を。
 If DoEvents = 0 Then UserForm1.Show vbModeless
又は
 If UserForm2.Visible = False Then UserForm1.Show vbModeless
でどうでしょう。
但し、先の方法は開いているのがUserForm2とは限りませんが、
>ユーザフォームが2つありまして、(ここではUserForm1とUserForm2とします)
であれば問題ないと思います。

後の方法は、UserForm2がLoadされていない場合、Loadされます。

【50918】Re:ユーザーフォームが開いているかどう...
お礼  どーも  - 07/8/22(水) 11:49 -

引用なし
パスワード
   御教授ありがとうございます!!! m(vv)m
双方試してみまして、どちらも動くことを確認致しました。
ユーザーフォームが開いているかどうかは.Visibleで確認できるのですね。
大変勉強になりました、ありがとうございます!

5420 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free