[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『フォームの書き方についての質問』(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.