LabelとTextBox
今回はLabelとTextBoxをうまく使ってセルにうまい事値を吐き出していこう。という回です。
TextBoxは前回やった通りユーザーが何かしらの値を入力する場所の事ですね。
LabelはTextBoxの見出し的なものですかね。
Aと書いたアイコンがそれにあたります。
大まかな形を作っていきましょう
ではLabelとTextBoxを適当に5つくらい並べてみましょう。
こうですね。
次はLabelのキャプションを変更してみましょう。
今回は出力する予定のセルの番地を入れた名前にしてみました。
出来たらコマンドボタンを作ってキャプションを変更「出力」ボタンにしていきましょう。
大体の形は出来ましたね。
プログラムの記述
では、コマンドボタンをダブルクリックしてコマンドボタンが押された時の動作を記述していきましょう。
出力自体は出来たものの「めんどくさ!」ってなるじゃないですか?
そこで登場するのがControlsというものです。
今回の様にTextBoxが1~5などオブジェクト名に規則性がある場合にループで回しつつ制御していく事が出来ます。
実際にやってみましょう。
Private Sub CommandButton1_Click() Dim i As Long 'カウンタ For i = 1 To 5 Range("A" & i).Value = Me.Controls("textbox" & i).Value Next End Sub
今回はA1~A5セルに出力というのとTextBoxが1~5までというルールが一緒なので上記のように記述する事が出来ます。
Controlsの引数にユーザーフォームのパーツ名(オブジェクト名)を文字列として渡せば、それがそのパーツとして認識してくれるわけですね。
これはRangeと同じような仕組みなので覚えておきましょう。
これはもちろんmeが無くても動きますが僕は必ずmeを入れる派です。
まとめ
- Labelは見出しのようなもので「A」と書いたアイコン
- TextBoxが複数ある時はControlsを使用すべし
- Controlsは文字列として与えられたオブジェクトを操作する事が出来る
- Controlsを使用すればループ処理が容易である
以上を踏まえて次回は、そもそもLabelのキャプションをいちいち変えるの面倒くさいよね!って時とかユーザーフォームって立ち上げた時になんかいい感じにならないの?
みたいな時の為の「UserForm_Initialize(ユーザーフォーム・イニシャライズ)」をやっていきましょう。