[[20100114141439]] 『フォームの書き方についての質問』(seri) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『フォームの書き方についての質問』(seri)
 HPを見ながらVBAを覚えようとしている者です
 フォームを作るところで、実際に仕事にも使えるように応用できればと
 コンボボックスとテキストボックスを実際の作り方説明と数を変えて作ったところ
 入力の間がとんでしまいます
 下記の中の combobox2が飛んで textbox2からtextbox3になってしまいます
 enterでせずにcombobox2を選んでその次にtextbox3を入力しても
 実行したときにtextbox3で入力したものがexcelには表示されません
 どの部分に間違いがあるのでしょうか?

 Private Sub UserForm_initialize()
 With ComboBox1
 .AddItem "赤"
 .AddItem "青"
 .AddItem "白"
 .AddItem "黒"
 End With

 With ComboBox2
 .AddItem "花"
 .AddItem "木"
 End With

 End Sub
 Private Sub commandbutton1_click()
 n = 1
 Do
 n = n + 1
 Loop While Cells(n, 1) <> ""
 Cells(n, 1) = フォーム.ComboBox1.Text
 Cells(n, 2) = フォーム.TextBox1.Text
 Cells(n, 3) = フォーム.TextBox2.Text
 Cells(n, 4) = フォーム.ComboBox2.Text
 Cells(n, 5) = フォーム.TextBox3.Text
 Unload Me
 End Sub
 Private Sub commandbutton2_click()
 Unload Me
 End
 End Sub

 エクセルは2003 XPです

 >下記の中の combobox2が飛んで textbox2からtextbox3になってしまいます
コードの中では選択順番を設定している部分がありません。
フォームのデザイン画面でフォームを右クリックすると、
「Tabオーダー」というのがあるので、そこで順番(TABキーを押したときに移動する順番)
が設定できます。
 
>textbox3で入力したものがexcelには表示されません
すぐ次にUnloadされているので、入力が完了するまでにフォームがクリアされているとか?
こちらの環境では再現できませんでしたけど。
 
(みやほりん)(-_∂)b


 TabIndex,TabStopについても調べてみると良いかも知れません。
(Tabオーダーってのがあるのを初めて知ったとか言えない)

 また、「commandbutton2_click」に書かれている「End」は無くて良いです。
あまり「End」は使わない方が良いです。

 あと気になったのが、CommandButton2_Click()って手打ちしてます?
エディターの上にあるコンボボックスから選ぶ形で作ってるのか、気になりました。

 ちなみにTEXTBOX3云々は、私も再現出来ませんでした。
ちゃんとシートに転記されていました。
(ご近所PG)

 みやほりんさん、ご近所PGさん ありがとうございます

 TabIndex,TabStop・・Tabオーダーは実のところ初めて知りました
 初めての人向け(だと思うのですが)の HPを見ながらやっているのでそこで説明なされているものしか
 今のところ言葉も手順も分からないでいます 
 あと、記述は全部手打ちでしています
 お二人共にシートに転記されているということは記述以外の何かが違うということになるのですね
 もう一度 最初から作り直して試してみます
 (seri)

 エラーも出ずに、転記されないだけ、というのが合点がいきませんが、
 Unload Me
を
 'Unload Me
といったんコメントにして実行してみたらどうなりますか?
(みやほりん)(-_∂)b


 あ、そういえば私は
    Cells(n, 1) = フォーム.ComboBox1.Text
とある所を、全て
    Cells(n, 1) = Me.ComboBox1.Text
と直した上で試しました。
(ご近所PG)

 >記述は全部手打ちでしています
プロシージャ名は↓から選択できます。
[右]オブジェクトボックス [左]プロシージャボックス

 
入力支援機能を活用していくと、かなり楽になるはずです。
http://miyahorinn.fc2web.com/vbabegin/s_06.html
(みやほりん)(-_∂)b


 みやほりんさん、ご近所PGさん
 ありがとうございます
 'unload me  と cells(n,1)=me.combobox1.text
 の両方をやってみたら きちんとエクセルシートに転記できていました
 理由は分からないままなのですが 入力の何かが違っていたのでしょうか
 ご近所PGさんの書いてくださった  Me. これは 今回の場合『フォーム』にあたるものの
 代わりになるものとして使えるものと理解してよいのでしょうか?

 みやほりんさん 書いていただいたurlですが 当該頁から勝手に他を見させてもらってしまったのですが
 参考にさせてもらってもよいでしょうか?
 (seri)

 >両方をやってみたら きちんとエクセルシートに転記できていました
同時にやっちゃうと、どちらが原因だったのか、分からなくなります。
私は、
セルに入力するコードが実行される
 >ワークシート再計算
  >再計算の合間にUnloadが実行される
   >転記コードがすべて実行される前にフォームが解放されてしまう
 と言う現象がもしかしたら起きているのかも、と思ったのです。
 
>勝手に他を見させてもらってしまったのですが
> 参考にさせてもらってもよいでしょうか?
私も勝手にさらしているだけなので、どうぞご自由に。
 
(みやほりん)(-_∂)b


 >Me. これは 今回の場合『フォーム』にあたるものの
まぁそうです。
「Me.TextBox1」と書けばその見た目どおり
「私自身(自フォーム)の中にあるTextBox1」って感じです。
 
「フォーム.TextBox1」と書く場合には「フォーム」と言う名前のUserFormが存在しているか、
あるいはそういう名前のUserForm型の変数が宣言されていないといけません。

 新規で作成したExcelBookのVBAProjectにUserFormを追加すると、
標準で「UserForm1」と言うオブジェクト名のフォームが追加されるかと思います。
このフォーム上にテキストボックスを一つ配置すると、
標準で「TextBox1」と言うオブジェクト名のテキストボックスが追加されます。
このテキストボックスの値を参照する際、
    UserForm1.TextBox1.Text
と書く事でその値を参照出来ます。これがseriさんがやろうとしていた事だと思います。
(オブジェクト名を変えたかどうかは分からないけれども。)
 
で、私が書いた
    Me.TextBox1.Text
は、単純に
    TextBox1.Text
でも構いません。Me.TextBox1.TextとTextBox1.Textは同等です。
しかし「UserForm1.TextBox1.Text」とは若干意味が違ってます。
これらの違いは、少々複雑ですが……誤解を恐れず単純に言うと、
フォームが1つではなく、もう一つ追加した時、
標準で「UserForm2」と言うオブジェクト名のフォームが追加されると思います。
この2つ目のフォームから「UserForm1」にある値を参照したい場合に、
    UserForm1.TextBox1.Text
と書くことで、指示したフォームのテキストボックスの持つ値を取得出来る訳です。
このUserForm2上で、もし
    Me.TextBox1.Text
と書けば、お察しの通り「私(UserForm2)のTextBox1」の値を参照しようとします。

 もうちょい理解が進むと、私のこの説明では事象の半分しか説明できていない、
と言う所に辿り着くかと思いますが、それはまたもうちょっと先のお話。
(ご近所PG)

 「Me.」まで入力すると自動メンバー表示が自動的に起動して、
入力が楽になる、というメリットもありますしね。
(みやほりん)(-_∂)b

 みやほりんさん
 試してみたのは、いっぺんに両方ではなく各々でやってみました
 なのでどちらの場合もシートに転記されたということになります
 私のレベルでは何が作用しているのか全く分からないのですが
 やりたいと思うものはできるようになったので もう少し理解できるように
 なったらまた考えてみます

 ご近所PGさん
 『フォーム』というのは、練習のためuserform1となっていたものを変更してみるという
 記述があったので変更したものです
 単純な理解ですがMe.のほうが 分かりやすいような気がしました

 お二人ともに丁寧に書いてくださってありがとうございました

 (seri)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.