- ベストアンサー
ユーザーフォームの内容が一部だけ残らない
- VBAを始めてまだ1週間ほどなのでどの部分を変えればよいのかわかりません。
- 問題:下記の構文でTextBox2の内容だけが残らない。
- 下記の構文はネット上でいろんな方のものをコピペして製作したので、訳の分からない文字がたくさんあり理解をしていない部分はあります。ですので回答をいただけるならTextBox2の問題解決と下記の内容をもっとスマートな形に変えて不要な部分を削除して頂けたらと思っています。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >VBAを始めてまだ1週間ほどなのでどの部分を変えればよいのかわかりません。 どの程度のプログラム言語自体の経験があるのかは分かりませんが、いきなり、UserForm では、ちょっと敷居が高いのです。確かに、VBでは、フォームを使いこなさなくてはならないのですが、Excelは、そういう必要を求められないので、もう少し基本的な構文から進めることが出来ます。 最近、プログラム言語のテキストで有名な林晴比古さんの著書を読んでいて、プログラム言語を覚えるために、早く実務に結び付けたいと考えるのではなく、一つ一つの過程を楽しむところから始まると書かれていました。 Webサイトで情報を求めるのはやめましょう。まず、テキストからです。 一週間ぐらいですと、まず、記録マクロから、それぞれのモジュールの違いを覚え、 Ret = A + B などの基本的なコードや構文からはじめるべきだと思います。 今回の質問で書かれたコードは、ここの掲示板の回答者でも、ミスなく書ける人は、ここの掲示板でも、残念ながら、半分にも満たないと思います。細かいミスがいくつもあります。 '------------------------------------------- Private Sub CommandButton1_Click() Dim n As Long 'B4に予め文字等があるという前提 With Worksheets("履歴表") n = .Range("B" & Rows.Count).End(xlUp).Row 'Bの一番下を検索する .Cells(n + 1, 2).Value = txtDate.Value .Cells(n + 1, 3).Value = TextBox2.Value 'C列へ代入 .Cells(n + 1, 4).Value = TextBox3.Value 'D列へ代入 .Cells(n + 1, 5).Value = TextBox4.Value 'E列へ代入 .Cells(n + 1, 6).Value = TextBox5.Value 'F列へ代入 .Cells(n + 1, 7).Value = TextBox6.Value 'G列へ代入 .Cells(n + 1, 8).Value = TextBox7.Value 'H列へ代入 .Cells(n + 1, 1).Value = .Cells(n + 1, 2).Row - 4 'A列に番号を順番に入れる End With '' TextBox2.Value = "" '不要 TextBox2.SetFocus End Sub '-------------------------------------------
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
#3の回答者です。 >現在自分が海外に在住の為、本などの書籍が手に入り難くWEBから情報を取ってる次第です。 そうでしたか! 海外といっても、英語圏だけではないので、必ずしも英語でというわけにもいきませんが、日本語でも、英文でも、Amazon で手に入れて良いと思います。Microsoft 社監修以外のものなら、結構読めると思います。Amazon.com のお勧め度で選んでも良いと思います。 私は、本のテキストのほうが良いような気がします。昔、Perl は、Webで覚えられるといわれたのですが、結局、ある大学の先生の書いた本が、とても分かりやすかったです。ただ、Perl は、モノにならなかったというか、面白みがわかなかったです。 それと、私の学ぶWord やWord VBAの勉強は、8割ぐらいは、英文です。分かりにくい部分は、一度、マクロを通してみれば、書いてある意味が分かります。とにかく、ページの最初から最後まで、コードを触ってみることですね。日本語よりも、英文のもののほうが良いものが多いような気がします。 日本語なら、ここを参照してください。 http://vbae.odyssey-com.co.jp/training/text.html 順序よく、自分でコードを書いてみることです。あまり、覚えるということにはこだわらないほうがよいです。長いコードは禁物です。数行だけのコードが良いのです。その点で、Excel VBAは比較的短い時間で学習できます。どんなに長いものでも、短いコードの寄せ集めですからね。自分の手でコードを入れて、実行してみることです。毎日3個ぐらいのマクロを入れて実行すれば、半年ぐらいでモノになります。数をこなすことです。 たぶん、こんなコードから始まるものが良いです。 Sub Main() MsgBox("Hello, World!") End Sub 当たり前すぎますが……。
お礼
Wendy02様 追記して頂き有難うございます。 中国に駐在しており、書籍等に関しては日本へ戻ったときに購入をいたします。 現在何時日本へ戻るかわかりませんが・・・ URLにあるPDFをDLして参照しました。 やはり何度もすぐに読み返せるテキストの方が良さそうですね。 WEB上では自分のほしいコードを一括して全て載せている所はないので コピペしてもそれぞれを統一するのは今の自分では困難な気がします。 だからあのような訳の解からないコードになるんでしょうね。 とりあえずはWEBで基本の基本のようなページを探し 一つの短いコードを書き、実行していきます。 今の自分には当たり前の事が重要なことだと思います。 アドバイス有難うございます。
- imogasi
- ベストアンサー率27% (4737/17069)
>テキストボックス2に自動で日付を入れてB列へ この辺でテキストボックス2に日付を入れるのだろうが 左辺にテキストボックス2が出てくる行は見つからないが。 テキストボックス2には手入力するのか。 現在日付でも入れるのか。現在日付なら、テキストボックスを設ける 必要ないでしょう。 この質問はちょっとした勘違いでは。
お礼
回答有難うございます。 ご指摘いただいた箇所は皆さんの回答が来てから気づいたのですが、 「テキストボックス2に自動で日付を入れてB列へ」ではなく 「テキストボックス1に自動で日付を入れてB列へ」でした。 自分の書き間違いでした。申し訳ありません。 7つのうちのTextBox1(txtDateに名前を変更した)に UserFormを開くたびにその日の日付けが自動で入るという事です。 UserFormに現在日付を入れるのにTextBoxが必要が無いという 情報自体知りませんでした。 余計なお手間を取らせてすいませんでした。
- cistronezk
- ベストアンサー率38% (120/309)
>訳の分からない文字がたくさんあり理解をしていない部分はあります。 理解していない場合は、コードを一つずつ動作させて確認する癖をつけてください。 >n = .Range("B" & Rows.Count).End(xlUp).Row 'Bの一番下を検索する にブレークポイントを設定して、F8でステップ実行し、各変数の値を良く見てください。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_vbe.html TextBox2の内容がどこで消えるのかよくわるはずです。
お礼
回答有難うございます。 UserFormを開くとかボタンを作り終了させるとか 1つだけなら何とか出来ています。 それらをまとめていくと訳が解からなくなり 修正するたびにだんだんおかしくなって行きます。 簡単なことが確実に出来るように勉強します。
- chie65536(@chie65535)
- ベストアンサー率44% (8755/19867)
>TextBox2の内容だけが残らないのです。 プログラムの中にある TextBox2.Value = "" を、10回紙に書き写してみましょう。 9回くらい書き写した時点で「自分が、どんなに愚かな行為をしているか?」に気付ける筈です。
お礼
回答有難うございます。 現時点ではTextBox2.Value=""を10回書いてみてみも 何をもって愚かな行為なのかを理解出来ていない状態です。 自分でもっと理解した上で質問をするようにします。
お礼
回答有難うございます。 自分で記録マクロを作成し変わっていくのは確かに面白かったのです。 そこで無理を承知で色々試し、作ったのが質問の構文です。 ですが、上を見すぎたのでしょう。 現在自分が海外に在住の為、本などの書籍が手に入り難く WEBから情報を取ってる次第です。 構文まで書いていただき有難うございます。 書いて頂いた構文は保存し、簡単なことから始めたいと思います。