Excel VBA質問箱 IV

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

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


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

【5325】ユーザーフォームが表示されていなかったら 123 03/5/6(火) 21:28 質問
【5326】再現しないです。 こう@連休無し!! 03/5/6(火) 22:41 回答
【5333】Re:再現しないです。 123 03/5/7(水) 10:47 質問
【5337】ステップ実行で,エラーが発生する行を特定... こう@昼休みも無し!! 03/5/7(水) 12:22 回答
【5341】Re:ステップ実行で,エラーが発生する行を特... 123 03/5/7(水) 13:20 質問
【5343】こっちでも問題なしですが・・・ つん 03/5/7(水) 14:11 発言
【5344】Re:こっちでも問題なしですが・・・ Jaka 03/5/7(水) 14:22 回答
【5352】Re:こっちでも問題なしですが・・・ 123 03/5/7(水) 18:56 お礼
【5351】Re:こっちでも問題なしですが・・・ 123 03/5/7(水) 18:43 質問
【5354】論より証拠ってことで・・・ こう@夜休みも無し!! 03/5/7(水) 20:34 回答
【5355】Re:論より証拠ってことで・・・ 123 03/5/7(水) 21:17 お礼
【5356】Re:論より証拠ってことで・・・ こう@そして夜がふける... 03/5/7(水) 22:02 回答
【5394】再現しました こう 03/5/9(金) 19:10 質問

【5325】ユーザーフォームが表示されていなかったら
質問  123  - 03/5/6(火) 21:28 -

引用なし
パスワード
   こんばんは 123です。

またまた 教えてください。
非常に基本的なことで恥ずかしいのですが、

Worksheetの Deactivate 時に
Userform1をUnload して、Userform2.Show
としたいところなのですが、現在Userform1が
表示されているかどうかを判断させる方法がわかりません。

Private Sub Worksheet_Deactivate()

Unload Userform1
Userform2.Show

End Sub

とすると、Userform1が表示されていない時は
エラーになってしまいます。

If Userform1.●● Then
Unload Userform1
End If
Userform2.Show False

としたいのですが、どなたか●●の部分を教えてください。

また、別の方法があれば教えてください。
宜しくお願い致します。

【5326】再現しないです。
回答  こう@連休無し!! E-MAIL  - 03/5/6(火) 22:41 -

引用なし
パスワード
   123 さん,こんにちわ。

>とすると、Userform1が表示されていない時は
>エラーになってしまいます。
エラーになります?こちらで再現しませんでしたが,
どのようなエラーメッセージでしょうか?

===
合っているかどうか判りませんが,Visible で表示している/していない
が判ります。

>Userform1をUnload して、Userform2.Show
>としたいところなのですが、現在Userform1が
>表示されているかどうかを判断させる方法がわかりません。

If Userform1.Visible = True Then
  Unload Userform1
End If
Userform2.Show

ただし,UserForm1.Hideの場合もFalseが返りますね...
無条件に「Unload Userform1」を実行して,「On Error
Resume Next」で逃げますか?

【5333】Re:再現しないです。
質問  123  - 03/5/7(水) 10:47 -

引用なし
パスワード
   ▼こうさん こんにちわ。

こうさん 早々にありがとうございます。

>エラーになります?こちらで再現しませんでしたが,
>どのようなエラーメッセージでしょうか?

「オブジェクト変数またはWithブロック変数が設定されていません」
というメッセージがでます。

Private Sub Worksheet_Activate()
If Userform1.Visible = True Then
  Unload Userform1
End If
Userform2.Show
End Sub

上記だとディバックで同エラーになってしまいます。

>ただし,UserForm1.Hideの場合もFalseが返りますね...
>無条件に「Unload Userform1」を実行して,「On Error
>Resume Next」で逃げますか?

Worksheet_Activate() がいけないのでしょうか。
いろいろやってみたのですが、おかしいところが
分からない状態なのです。

【5337】ステップ実行で,エラーが発生する行を特...
回答  こう@昼休みも無し!! E-MAIL  - 03/5/7(水) 12:22 -

引用なし
パスワード
   123さん,こんにちわ。
>「オブジェクト変数またはWithブロック変数が設定されていません」
>というメッセージがでます。
>
>Private Sub Worksheet_Activate()
>If Userform1.Visible = True Then
>  Unload Userform1
>End If
>Userform2.Show
>End Sub
>
>上記だとディバックで同エラーになってしまいます。

違う場所でエラーになっているような気が・・・
ということで,ステップ実行させてエラーが発生する行を特定
してみてください。

また,Userform1はモードレスで表示させてますよね。
あとOfficeのバージョンも教えてください。

【5341】Re:ステップ実行で,エラーが発生する行を...
質問  123  - 03/5/7(水) 13:20 -

引用なし
パスワード
   ▼こう@昼休みも無し!! さんこんにちわ。

昼休みもない状態なのにすみません。

If Userform1.Visible = True Then
のところでディバックになります。
(実行時エラー 91)

このエラーは、If構文の対象になっているUserForm1が
表示されていない時にでてしまいます。

UserForm1が表示された状態で、Worksheet1をActiveにすると
正常に作動します。

実は、Worksheet1とをActiveにすると、UserForm1が表示され、
Worksheet2をActiveにすると、UserForm2が表示されるように
したいのです。
従って、Worksheet2にも、逆パターンでコードを記述しています。

UserFormはモードレス表示です。
バージョンは Excel2002 です。

お忙しいところすみません。
宜しくお願いします。

【5343】こっちでも問題なしですが・・・
発言  つん E-MAIL  - 03/5/7(水) 14:11 -

引用なし
パスワード
   123 さん、こうさん、こんにちは
横から失礼します。

私の方でも、試してみましたが、
特にエラーは発生しませんでした。
こちらもExcel2002です。

>If Userform1.Visible = True Then

この形もしてみましたけど、特に問題なかったなあ〜

>実は、Worksheet1とをActiveにすると、UserForm1が表示され、
>Worksheet2をActiveにすると、UserForm2が表示されるように
>したいのです。
>従って、Worksheet2にも、逆パターンでコードを記述しています。

それやったら、単純に

Private Sub Worksheet_Activate()
  UserForm1.Show vbModeless
End Sub

Private Sub Worksheet_Deactivate()
   Unload UserForm1
End Sub

とやったらどうでしょうか?

Private Sub Worksheet_Deactivate()
  Unload Userform1
  Userform2.Show
End

これやったら、例えばSheet2以外のシートに飛んだ場合でも、
Userform2が表示されてしまうと思いますが・・・・

問題解決にならないレスですみません。
でも、こうさんとこでも、私の所でも再現しないっちゅーことは、
なにか別の所に問題があるのでは????

こうさん
お忙しいのですね。お疲れさんどす。
風邪はやってるし、お体に気を付けてくださいまし〜

【5344】Re:こっちでも問題なしですが・・・
回答  Jaka  - 03/5/7(水) 14:22 -

引用なし
パスワード
   みなさま こんにちは。
なんかのきっかけになれば..。

If UserForms.Count > 0 Then
  For Each USF In UserForms
    MsgBox USF.Name
  Next
End If

失礼しました。

【5351】Re:こっちでも問題なしですが・・・
質問  123  - 03/5/7(水) 18:43 -

引用なし
パスワード
   ▼つん さん こんばんは。

Worksheet1とWorksheet2を切り替えてUserForm1と2を
それぞれ表示させるぶんには、できるのですが、
どうしても、エラーがでてしまうのが、UserFormを閉じた状態で
WorksheetをActiveまたはDeactiveにした時なのです。
つんさんのやり方でも試してみましたが、どうしてもできませんでした。

つんさん も こうさん も UserFormを閉じた状態でもエラーがでませんか?

みなさんに つき合わせてしまって すみません。

【5352】Re:こっちでも問題なしですが・・・
お礼  123  - 03/5/7(水) 18:56 -

引用なし
パスワード
   ▼Jaka さん こうさん つんさん:こんばんは。

以下のコードでやってみたら、できました。

(Worksheet1にて)
Private Sub Worksheet_Activate()
UserForm1.Show
End Sub

Private Sub Worksheet_Deactivate()
If UserForms.Count > 0 Then
Unload UserForm1
End If
End Sub

(Worksheet2にて)
Private Sub Worksheet_Activate()
UserForm2.Show
End Sub

Private Sub Worksheet_Deactivate()
If UserForms.Count > 0 Then
Unload UserForm2
End If
End Sub

Jakaさん ありがとうございました。

でも なんで できなかったのでしょうか。
原因がわかりません。

とにかく ありがとうございました。

こうさん つんさん お忙しいところ
ありがとうございました。

【5354】論より証拠ってことで・・・
回答  こう@夜休みも無し!! E-MAIL  - 03/5/7(水) 20:34 -

引用なし
パスワード
   123さん,こんにちわ。
「昼休みも無し!!」は大げさでしたね。お気遣いありがとうごさいます。
つんさんもね。


>つんさん も こうさん も UserFormを閉じた状態でもエラーがでませんか?
出ないですよ。
ということで,サンプルを作ってみたので確認してください。
フォームの「右上X」で閉じて実行してもエラーは発生しません。

実行環境は,OS:WinXP Pro,Office2000 SR1 です。

http://www.geocities.co.jp/HeartLand-Poplar/1524/VBA/TEST0507.LZH
Norton AntiVirus スキャンエンジン4.1.0.15 でチェック済み

【5355】Re:論より証拠ってことで・・・
お礼  123  - 03/5/7(水) 21:17 -

引用なし
パスワード
   ▼こう@夜休みも無し!! さん:こんばんは。

遅くまでご苦労様です。
そんな中 わざわざすみませんでした。

早速 作って頂いたファイルを試してみたところ、
なんと まったく問題なく 作動するではありませんか。

自分のファイルにコードをコピーして、フォーム名を
実際のものに変えてやってみました。
・・・・できませんでした。

ということは、私のフォームに問題があるということですよね。

原因を探ってみましたが、私の知識ではわかりませんでした。

つんさん、こうさん、Jakaさん
大変お騒がせ致しました。

こうさん お忙しいのに すみませんでした。
ご協力感謝いたします。

それと 私の未熟さに 深く反省しております。
これからも 宜しくお願い致します。

【5356】Re:論より証拠ってことで・・・
回答  こう@そして夜がふける... E-MAIL  - 03/5/7(水) 22:02 -

引用なし
パスワード
   123 さん,こんにちわ。

>遅くまでご苦労様です。
>そんな中 わざわざすみませんでした。
いえいえ,質問箱の対応で遅くまで仕事している訳ではありません
のでご心配なく。

>早速 作って頂いたファイルを試してみたところ、
>なんと まったく問題なく 作動するではありませんか。
でしょっ(ニヤリ)

>ということは、私のフォームに問題があるということですよね。
>原因を探ってみましたが、私の知識ではわかりませんでした。
内容に差しさわり無ければ見させて頂いてもよろしいでしょうか?
可能であれば,メールに添付してで送ってみてください。
(で,解決できるかどうかは保障できませんが・・・)

【5394】再現しました
質問  こう E-MAIL  - 03/5/9(金) 19:10 -

引用なし
パスワード
   >>なんと まったく問題なく 作動するではありませんか。
>でしょっ(ニヤリ)
>
>>ということは、私のフォームに問題があるということですよね。
>>原因を探ってみましたが、私の知識ではわかりませんでした。

123さんに教えていただいたコードで再現させてみました。

Uerform1を強制的に閉じたあと,Sheet2に変更すると,Sheet2内の
Worksheet_Activate()が実行され,
 Private Sub Worksheet_Activate()
   Unload UserForm1
   UserForm2.Show vbModeless
 End Sub
の処理を実行します。

この時に,
 Userform1 Initialize
 Userform2 Initialize
の2つの処理が実行されます。
なぜ,閉じたUserform1のInitializeが実行されるんでしょうか?

123さんのエラーの場合,
この閉じたUserform1 の Initialize イベント処理内でテキストボックス
の初期化を行うところで前述のエラーが発生していました。

ということで,
http://www.geocities.co.jp/HeartLand-Poplar/1524/VBA/TEST0507_2.LZH
Norton AntiVirus スキャンエンジン4.1.0.15 でチェック済み
にサンプルを置きましたので確認してみてください。

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