プロが教えるわが家の防犯対策術!

下記のプログラムでユーザーフォームを作成しました。
まったく同じ記述で、他のブックでは、最終処理として、所定の箇所に選択した記号が表示(コピー)されるのですが、このブックでは表示されません。
しかし、エラーは出ていないので文法的には合っているようにおもいます。
それだけに、どこが違うのか尚更わかりません。

なお、Unload UserForm1 を Unload UserForm にした場合、
Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value の UserForm1 を
UserForm にした場合、
「実行時エラー424、オブジェクトが必要です。」のエラーが出ます。
どこが悪いのかわかりません。
どなたか、教えてください。

なお、エクセルは2003、OSはXPです。

Private Sub ComboBox1_Change()
End Sub

Private Sub ComboBox2_Change()
End Sub

Private Sub ComboBox3_Change()
End Sub

Private Sub CommandButton1_Click()
Unload UserForm1
Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value
Unload UserForm1
Sheets("基本データ作成").Range("C4") = UserForm1.ComboBox2.Value
Unload UserForm1
Sheets("基本データ作成").Range("C5") = UserForm1.ComboBox3.Value
End Sub

Private Sub UserForm_initialize()
With ComboBox1
.AddItem "U"
.AddItem "K"
.AddItem "E"
End With
With ComboBox2
.AddItem "A"
.AddItem "B"
.AddItem "C"
End With
With ComboBox3
.AddItem "D"
.AddItem "E"
.AddItem "F"
End With
End Sub

A 回答 (3件)

#1です。



エラーも出ないで、思った動作にもならないとは思えませんが、、、
質問に書いたコード以外にも記述があるのかな?

> 最終処理として、所定の箇所に選択した記号が表示(コピー)される

ここでいう「最終処理」とはCommandButton1をクリックする事で、「所定の箇所」とは基本データ作成シートのセルC3~C5の事で、「記号」とは各ComboBox1~3の値(AとかKとか)ですよね?

> 一度閉じてしまったユーザーフォームの画面を開けるには

Show メソッドを呼ぶだけです。
ユーザーフォームのオブジェクト名が UserForm1 なら

 UserForm1.Show
    • good
    • 0
この回答へのお礼

何度もすみません。^^
ちゃんと最後まで動きました。
ご教示いただいた方法でユーザーフォームを開けて、正常に動いていたブックのユーザーシートと、異常のあるものとを対比したところ、異常のある方には、以前に作ったユーザーフォーム1という名前のユーザーフォームが別にありまして、その後に新規データ入力という名前のユーザーフォームをつくっていたために、選択した記号を代入したときに、動かしていないユーザーフォーム1の記号を代入していたと思われます。そこでユーザーフォーム1の記述を新規データ入力に変えると、正常に記号が表示されました。ちゃんと動くようになったので、まず間違いないと思います。どうもお手数をおかけしました。

お礼日時:2004/05/11 01:49

#1です。



> 結論から申しますと、同じ結果でした。

同じ結果というのは、#1で書いたコードでも上手く動かなかったって事?

この回答への補足

こんばんわ
残念ながら、そういうことです。
うまく動かなかったです。
どうしてよいのやら。。。
ちょっと違う話ですが、一度閉じてしまったユーザーフォームの画面を開けるにはどうしたらよいのでしょうか?

補足日時:2004/05/10 23:51
    • good
    • 0

書き方が変です。


上手く動くとは思えませんが、上手く動く事があるなら、何らかの偶然が作用しているのでは無いでしょうか?
親のForm1をUnloadしてからではComboBoxの値は不定だと思います。

Private Sub CommandButton1_Click()
 Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value
 Sheets("基本データ作成").Range("C4") = UserForm1.ComboBox2.Value
 Sheets("基本データ作成").Range("C5") = UserForm1.ComboBox3.Value
 Unload UserForm1
End Sub

この回答への補足

こんばんわ
お世話になります。
結論から申しますと、同じ結果でした。
ちょっと間違えていたのですが、動いているほうは、
UserForm.ComboBox1.Value となっており、(1)がありませんでした。
おっしゃるとおり、偶然が作用していたと思われます。

補足日時:2004/05/10 01:57
    • good
    • 0

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