VBA別館・Python別館

64457

コマンドボタンが働きました(完) - Tak

2018/08/11 (Sat) 16:53:37

前回で住所録作成用のユーザーフォームも部品も出来ました。  



これから命令を指示するcodeを書きます。 何か処理を指示するときは、
・ユーザーフォームが立ち上がった時
・部品をクリックした時
この時にプログラムが動き出します。

通常はコマンドボタンにその指示を書きますので、ここでもコマンドボタン「入力する」にcodeを書きます。 

開発ーデザインモードでCommandButton(入力すると書いてあるボタンを)をクリックすると、図の様に赤枠で囲ったところが、

Private Sub CommandButton1_Click()

End Sub

と自動でcodeが出来てきます。 処理する事項をこの間に書きます。

なお青枠の部分は、試作中に不必要にクリックしたりするとこれも自動発生するので、不要なら消してください。


Re: コマンドボタンにcodeを書く - Tak

2018/08/12 (Sun) 20:32:34

② フローチャートもどき

このプロジェクトを完成させるために、簡単に処理順序を書いてみましょう。


行数変数n宣言: dim n as integer 最初に書くとすべてのプロシージャーで有効

UserFormスタート:下記のことを処理します

・日付表示(Label1) :なくても良い
・ver表示(Label8) :なくても良い
・最終データ行数(n)を取得しTextBox1へ表示


2.コマンドボタン1(入力ボタン)で何をするか?
・テキストボックスに必要データ書き込む
・そのデータをセルに転記する
・sub終わり

3.コマンドボタン2(修正ボタン)
・修正必要データをユーザーフォームに転記する
・修正したら、元の場所のデータと置き換える
・sub終わり

4.Commandbutton3(終了ボタン)
・Unload meでユーザーフォームを閉じてお終い

Re: コマンドボタンにcodeを書く - Tak

2018/08/12 (Sun) 21:01:05

③ ユーザーフォーム立ち上げ時のcode

Option Explicit '常にこれは書いておく

Dim n As Integer 'データの最終行用の変数設定。最初に書いておくと、この変数の値は、全てのsub文で使用できる。

Private Sub UserForm_Activate()

'日付を表示
 Label1.Caption = Date

'データの最終行を取得する form使用開始の時のみ使用する

 Worksheets("住所録1").Select 'シート住所録1を選ぶ

 Range("B1").Select 'B列を選ぶ

 Selection.End(xlDown).Select '最後の行番号を取得する
 n = Selection.Row 'その番号をnに格納する、 ここではすでに二つのデータがあるので、号はn=2(ROW番号)です。
 
 UserForm1.TextBox1.Value = n + 1 'データの入力行を表示する、新しく入力する行番号はn+1として3となります。

 UserForm1.TextBox2.SetFocus カーソルの位置を決めている

 Cells(n + 1, 2).Select '次の入力行へカーソル移動させる

End Sub

このcodeでユーザーフォームを立ち上げると、図の様になります。

Re: コマンドボタンにcodeを書く - Tak

2018/08/13 (Mon) 07:07:19

④ ユーザーフォーム立ち上げ時のcode

ここの記述は間違えて③とほぼ同じことを書いてしまいました。

上の図のcodeは次の通りです。

--------------------------

Option Explicit ’変数の強制

Dim n As Integer 'データの最終行(最終番号はn+1となる)

Private Sub UserForm_Activate() ’_Initiarize()もOK

'日付を表示
 Label1.Caption = Date

'データの最終行を取得する form使用開始の時に番号枠に表示させる

 Worksheets("住所録1").Select 'シート住所録1を選ぶ ’sheetが複数あるときは必ず指定する

 Range("B1").Select 'B列を選ぶ

 Selection.End(xlDown).Select '最後の行番号を取得する ’Excel VBAの関数の一つ

 n = Selection.Row 'その番号をnに格納

 UserForm1.TextBox1.Value = n + 1 'データの入力番号表示

 UserForm1.TextBox2.SetFocus ’入力し易いようにカーソルを移動させる

 Cells(n + 1, 2).Select '次の入力行へカーソル移動させる

End Sub

------------------------------

これで下記の処理が出来ます

・日付表示(Label1) :なくても良い
・ver表示(Label8) :なくても良い
・最終データ行数(n)を取得しTextBox1へ表示

Re: コマンドボタンにcodeを書く - Tak

2018/08/14 (Tue) 14:51:43

⑤ データ書込みをする

・プログラムをonにして、Userfrom1を立ち上げます。
 データ番号は3になっております。 前回までに二人の住所が書き込まれておりますので、三人目の3となるわけです。  こまでが前回の図です。

・CommandButton1をクリックしてデータをユーザーフォームに書き込みます

・正しいこを確認して、入力コマンド(入力するの表示のあるコマンドボタンです)をクリックする

これ以降は次回

なお、修正コマンドは少し難しすぎるので今回は外しました。

データを追加する - Tak

2018/08/14 (Tue) 14:59:31

⑥ データの追加準備をする

立ち上がったユーザーフォームに必要項目を書き込みます。

Re: コマンドボタンにcodeを書く - Tak

2018/08/14 (Tue) 15:09:04

⑦ 入力ボタンで追加データをシートに格納する

続いて入力するかどうか聞かれますので、今回はNoにしておきます。

コマンドボタンのcode - Tak

2018/08/14 (Tue) 18:49:48

⑧ 書き込み用コマンドボタンのプログラム

次のようなcodeになっております。 説明はcode中にコメントで記入してあります。

-------------------------

Private Sub CommandButton1_Click()
'comandbutton1「入力する」のcode

Worksheets("住所録1").Select 'シート住所録1を選ぶ

Range("B1").Select 'B列を選ぶ

Selection.End(xlDown).Select '最後の行番号を取得する
n = Selection.Row 'その番号をnに格納。 変数の宣言はuserform1の最初にしてある。

UserForm1.TextBox1.Value = n 'データの入力行表示

Cells(n + 1, 2).Select '次の入力行へカーソル移動させる


Worksheets("住所録1").Select 'シート住所録1を選ぶ

Range("B1").Select 'B列を選ぶ

'未入力データの警告
If UserForm1.TextBox2.Value = "" Then MsgBox ("データを入力ください。"): Exit Sub

Cells(n + 1, 2).Value = UserForm1.TextBox1.Value

Cells(n + 1, 3).Value = UserForm1.TextBox2.Value

Cells(n + 1, 4).Value = UserForm1.TextBox3.Value

Cells(n + 1, 5).Value = UserForm1.TextBox4.Value

Cells(n + 1, 6).Value = UserForm1.TextBox5.Value

Cells(n + 1, 7).Value = UserForm1.TextBox6.Value



'続けて入力するかどうかの確認。 これで今までのnの値に影響されない

Dim m As Integer '最後のデータ行数。 繰り返し入力の場合は、改めて最後の行を取得する
Dim myBtn As Integer
Dim myMsg As String

myMsg = "続けて入力しますか?"
myBtn = MsgBox(myMsg, vbYesNo)
If myBtn = vbYes Then

Worksheets("住所録1").Select 'シート住所録1を選ぶ

Range("B1").Select 'B列を選ぶ

Selection.End(xlDown).Select '最後の行番号を取得する

m = Selection.Row 'その番号をmに格納

Worksheets("住所録1").Select
Cells(m + 1, 2).Select


UserForm1.TextBox1.Value = m 'データの入力行表示
UserForm1.TextBox2.Value = ""
UserForm1.TextBox3.Value = ""
UserForm1.TextBox4.Value = ""
UserForm1.TextBox5.Value = ""
UserForm1.TextBox6.Value = ""
UserForm1.TextBox2.SetFocus

End If

If myBtn = vbNo Then Unload Me


End Sub

Re: コマンドボタンが働きました - Tak

2018/08/15 (Wed) 19:52:04

⑨ 最後のコマンドボタン

ボタン「終わる」の説明です。 簡単なので図は有りません。

------------------

Private Sub CommandButton3_Click()
'終わる
' End ’これでもOK
Unload Me ’これもOK
End Sub

ではEndとUnload Meの違いはないかと言いますと、
・End はプログラムを終了します。

・Unload Me はフォームを閉じます。

メインフォームを閉じればアプリケーションは終了しますから、終わるときに何らかの処理が必要でなければEndも構いません。 

これで住所録のVBAは完了です。

お疲れさまでした。

名前
件名
メッセージ
画像
メールアドレス
URL
文字色
編集/削除キー (半角英数字のみで4~8文字)
プレビューする (投稿前に、内容をプレビューして確認できます)

Copyright © 1999- FC2, inc All Rights Reserved.