Excel VBA質問箱 IV

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

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


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

【45479】ユーザーフォームがうまく作動しない(ToT) 初心者K 06/12/27(水) 0:12 質問[未読]
【45480】Re:ユーザーフォームがうまく作動しない(... ponpon 06/12/27(水) 0:51 発言[未読]
【45481】Re:ユーザーフォームがうまく作動しない(... [名前なし] 06/12/27(水) 1:06 発言[未読]
【45482】Re:ユーザーフォームがうまく作動しない(... 初心者K 06/12/27(水) 1:15 質問[未読]
【45483】Re:ユーザーフォームがうまく作動しない(... [名前なし] 06/12/27(水) 1:33 発言[未読]
【45484】Re:ユーザーフォームがうまく作動しない(... Toshi 06/12/27(水) 7:30 発言[未読]
【45486】Re:ユーザーフォームがうまく作動しない(... ponpon 06/12/27(水) 8:39 発言[未読]
【45485】Re:ユーザーフォームがうまく作動しない(... ichinose 06/12/27(水) 7:30 発言[未読]
【45499】Re:ユーザーフォームがうまく作動しない(... 初心者K 06/12/27(水) 15:45 発言[未読]
【45500】Re:ユーザーフォームがうまく作動しない(... ichinose 06/12/27(水) 16:40 発言[未読]
【45502】Re:ユーザーフォームがうまく作動しない(... 初心者K 06/12/27(水) 18:28 お礼[未読]
【45506】Re:ユーザーフォームがうまく作動しない(... ichinose 06/12/28(木) 7:39 発言[未読]

【45479】ユーザーフォームがうまく作動しない(T...
質問  初心者K  - 06/12/27(水) 0:12 -

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

下記コードを実行すると『オブジェクト変数またはWith ブロック変数が設定されていません』と表示されます。
どなたか解決策をご教授願います。

【モジュール】
Sub 立上げ2()

  UserForm2.Show

End Sub

【ユーザーフォーム】
Private Sub UserForm_Initialize()
 
  Range("A1").Select
  ActiveCell.Value = "123"
  Unload UserForm2
  
End Sub

【45480】Re:ユーザーフォームがうまく作動しない...
発言  ponpon  - 06/12/27(水) 0:51 -

引用なし
パスワード
   ▼初心者K さん:
>こんばんは。
>
>下記コードを実行すると『オブジェクト変数またはWith ブロック変数が設定されていません』と表示されます。
>どなたか解決策をご教授願います。
>
>【モジュール】
>Sub 立上げ2()
>
>  UserForm2.Show
>
>End Sub
>
>【ユーザーフォーム】
>Private Sub UserForm_Initialize()
> 
>  Range("A1").Select
>  ActiveCell.Value = "123"
>  Unload UserForm2
>  
>End Sub

>  Unload UserForm2
  があるからだと思います。
Initializeイベントは、

「オブジェクトが読み込まれたあとで、そのオブジェクトが表示される前に発生します」

ですから、show される前に Unload されるのが、まずいのでは?

【45481】Re:ユーザーフォームがうまく作動しない...
発言  [名前なし]  - 06/12/27(水) 1:06 -

引用なし
パスワード
   ▼初心者K さん:
Private Sub CommandButton1_Click()
  Range("A1").Value = "123"
  Unload Me
End Sub

【45482】Re:ユーザーフォームがうまく作動しない...
質問  初心者K  - 06/12/27(水) 1:15 -

引用なし
パスワード
   ▼[名前なし] さん:
>▼初心者K さん:
>Private Sub CommandButton1_Click()
>  Range("A1").Value = "123"
>  Unload Me
>End Sub
その方法は分かるのですが、Initializeでやりたいのですが...
やはり無理ですかね?!

【45483】Re:ユーザーフォームがうまく作動しない...
発言  [名前なし]  - 06/12/27(水) 1:33 -

引用なし
パスワード
   ▼初心者K さん:

Initializeイベントでは無理では.

【45484】Re:ユーザーフォームがうまく作動しない...
発言  Toshi  - 06/12/27(水) 7:30 -

引用なし
パスワード
   ▼初心者K さん:
Initializeをどうしても使いたいのであれば・・・

Private Sub UserForm_Initialize()
  Range("A1").Value = "123"
End Sub

Private Sub CommandButton1_Click()
  Unload UserForm2
End Sub

ではダメでしょうか

【45485】Re:ユーザーフォームがうまく作動しない...
発言  ichinose  - 06/12/27(水) 7:30 -

引用なし
パスワード
   おはようございます。
>
>下記コードを実行すると『オブジェクト変数またはWith ブロック変数が設定されていません』と表示されます。
>どなたか解決策をご教授願います。

私は、どんな理由で下記のコードのように
Initializeイベントプロシジャー内でUnloadステートメントを実行させたいのか

に興味があります。

この理由にもよりますけど・・、

>
>【モジュール】
>Sub 立上げ2()
>
  Load UserForm2
  unload userform2
>
>End Sub
>
>【ユーザーフォーム】
>Private Sub UserForm_Initialize()
> 
>  Range("A1").Select
>  ActiveCell.Value = "123"
'  Unload UserForm2
>  
>End Sub

とすれば、Initializeイベントプロシジャーのみ実行して、
Userform2は、Unloadされます。

これでは、意味が違いますか??

【45486】Re:ユーザーフォームがうまく作動しない...
発言  ponpon  - 06/12/27(水) 8:39 -

引用なし
パスワード
   ▼初心者K さん:
>▼[名前なし] さん:
>>▼初心者K さん:
>>Private Sub CommandButton1_Click()
>>  Range("A1").Value = "123"
>>  Unload Me
>>End Sub
>その方法は分かるのですが、Initializeでやりたいのですが...
>やはり無理ですかね?!

イベントの発生順序は、

プログラムがメモリに読み込まれる(インスタンス生成) → Initializeイベント →Loadイベント →FORMの表示

の順だと思うので、ichinoseさんの方法でないと
Initializeイベントに
 Unload UserForm2
は、無理だと思います。

【45499】Re:ユーザーフォームがうまく作動しない...
発言  初心者K  - 06/12/27(水) 15:45 -

引用なし
パスワード
   ▼ichinose さん:
>おはようございます。
>>
>>下記コードを実行すると『オブジェクト変数またはWith ブロック変数が設定されていません』と表示されます。
>>どなたか解決策をご教授願います。
>
>私は、どんな理由で下記のコードのように
>Initializeイベントプロシジャー内でUnloadステートメントを実行させたいのか
>
>に興味があります。
>
>この理由にもよりますけど・・、
>
>>
>>【モジュール】
>>Sub 立上げ2()
>>
>  Load UserForm2
>  unload userform2
>>
>>End Sub
>>
>>【ユーザーフォーム】
>>Private Sub UserForm_Initialize()
>> 
>>  Range("A1").Select
>>  ActiveCell.Value = "123"
>'  Unload UserForm2
>>  
>>End Sub
>
>とすれば、Initializeイベントプロシジャーのみ実行して、
>Userform2は、Unloadされます。
>
>これでは、意味が違いますか??

こんにちは。ichinose さん

上記コードで実行してみましたがエラーになります。
理由はInitializeイベントが出来るかなと思い投稿しました。

【45500】Re:ユーザーフォームがうまく作動しない...
発言  ichinose  - 06/12/27(水) 16:40 -

引用なし
パスワード
   こんにちは。

>
>上記コードで実行してみましたがエラーになります。
どこの行でどんな種類のエラーが発生するのですか?
こういう技術関連の掲示板では、曖昧な表現を
なるべく少なくすることですよ!!

ユーザーフォーム(UserForm2)のモジュールで
'===========================
Private Sub UserForm_Initialize()
  Range("A1").Select
  ActiveCell.Value = "123"
End Sub


標準モジュールに
'=====================================
Sub 立上げ2()
  Load UserForm2
  Unload UserForm2
End Sub

というコードで立上げ2の実行で正常に
アクティブシートのセルA1に123と入力し、
Userform2が表示されることなく、終了しています。
(Excel2002で確認)


>理由はInitializeイベントが出来るかなと思い投稿しました。
?、ですから、Initializeイベントでどうしてこのような処理が
したいのかお聞きしたかったのです。

学習的な興味ということですか?


いずれにしろ、エラーが出ているとの事ですが、
上記のとおり、私のほうでは正常に作動しています。

再度、確認してください。

【45502】Re:ユーザーフォームがうまく作動しない...
お礼  初心者K  - 06/12/27(水) 18:28 -

引用なし
パスワード
   こんにちは。ichinose さん

出来ました(^o^)

>どこの行でどんな種類のエラーが発生するのですか?
>こういう技術関連の掲示板では、曖昧な表現を
>なるべく少なくすることですよ!!
⇒ユーザーフォーム(UserForm2)のモジュールにも
 Unload UserForm2を入れていてエラーになっていました。

>>理由はInitializeイベントが出来るかなと思い投稿しました。
>?、ですから、Initializeイベントでどうしてこのような処理が
>したいのかお聞きしたかったのです。
⇒今回は業務的な事でどういった処理をしたいかは話せなかった為
 例として簡単に分かる表現でコードを書きました。

今回、皆様にいろいろとご教授して頂き、大変勉強になり助かりました。
ありがとうございました。
今後機会がありましたら宜しくお願い致します。

【45506】Re:ユーザーフォームがうまく作動しない...
発言  ichinose  - 06/12/28(木) 7:39 -

引用なし
パスワード
   ▼初心者K さん:

おはようございます。

>>?、ですから、Initializeイベントでどうしてこのような処理が
>>したいのかお聞きしたかったのです。
>⇒今回は業務的な事でどういった処理をしたいかは話せなかった為
> 例として簡単に分かる表現でコードを書きました。

あ〜、これはわかっていましたよ!!

又、業務の内容を聞きたかったわけでもないのです。

ユーザーフォームのInitializeイベントというのは、本来
ユーザーフォームを表示する前に
このユーザーフォーム内での処理や表示に関わる変数や
コントロールの初期設定を行うために作動するイベントプロシジャーです。
よって、ユーザーフォームを表示することを前提にしていますよね?
ところが今回のご質問のコード

「1」
   load userform2
   unload userform2


これは、ユーザーフォームを表示しないために行っているコードです。

でも、Initializeイベントプロシジャーの実行は望んでいる・・・、

ありえないコードだし、実際業務のプログラムでInitializeイベントだけを
作動させるために「1」のようなコードを見たことはありません。

また、仮にこれを認めたとしても
このLoad UnloadによるInitializeイベントプロシジャーの実行って、
普通に標準モジュールを呼び出すことに比べると処理時間も掛かります。

さらに「1」のコードを例え自分が書いたコードでも
時間を隔ててこのコードを見た時コメントでもなければ、
「なんでこんなコードにしたんだ?」と悩んでしまいそうなコードです。

よって、どうしてこのような処理をされたいのか? 疑問に思ったのです。

もし、Initializeイベントで実行される処理を使いまわしたいのであれば、
標準モジュール等にその処理を移して、Initializeイベント内でもこの標準モジュールに
記述したプロシジャーを呼び出す という方法が一般的だし、
呼び出し手続きもわかりやすいと思いますよ。

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