
動画でExcel タブストリップの使い方応用編
動画版「ユーザーフォーム講座の応用編1回」です。
このページでは、基礎編のタブストリップをご覧いただいた後、どのように実務で使っていくのかという、実践的なコードを紹介しています。
基礎編でご紹介したTab Stripを起動したのがこちらです。
社員は現在5名です。

Tabに表示されている文字列をTabのキャプションといいます。
そのキャプション表示名をどのように入力したかというと、手入力で入力しました。
5名程度なら手動で入力してもたいした労力ではありませんが、実際問題として手動で入力するのはめんどくさい。
さらに人数が増えたらもっとめんどくさい。また変更があったら、その変更を
いちいち反映させるのが大変だということで
手入力は、実務的に実用的じゃないということになります。

そこで、そこでこのTabのキャプションを 直接手動で入力するのではなくて ユーザーフォームイニシャライズを使って 起動時に入れてしまおうというわけです。

今回は以下のような手順でユーザーフォームのタブストリップを作成していきます。

まず最初に初期値として、ユーザーフォームの、起動時にTabを選んでない場合、
その初期値としてどのデータを表示するのか、それを決めて表示するコードが必要です。
それからTab選択をチェンジしたら、ちゃんとチェンジして
チェンジされたTabに該当するデータを
表示するコードというように
その表示するのも2通り考えていきたいと思います。

第1段階としての実用へのステップは、イニシャライズを利用して、起動時にタブを読み込めるようにします。

まず、既存のタブ(デフォルト)を削除し、Addメソッドを使って5人分のタブを追加します。

Private Sub UserForm_Initialize()
' タブの設定
With TabStrip1
.Tabs.Clear
.Tabs.Add "佐藤 清"
.Tabs.Add "田中 博"
.Tabs.Add "山口 昇"
.Tabs.Add "斎藤 陽子"
.Tabs.Add "岡田 裕子"
End With
' 初期データを表示するSubプロシージャ
ShowEmployeeInfo 1
End Sub
そして最初表示したときに初期値の設定を何にするかといったら、他に部品用のサブプロシージャーを作って初期データとして表示することにします。
後半でその部分を再利用するために、使いまわせるコド―を部品化したのです。showEmployeeInfoという名前にしました。

呼び出された”showEmployeeInfo”というサブプロシージャーは
引数として1を受けとっています。これは”row As Long”のことで、1行目という意味です。
行を指定して呼んでいるのです。
それでどこのシートでやるかというと、
このEmployeeという従業員データを入力したシートを用意してあるので
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("employees")
wsというシートを参照するように指示します。
TextBox1のバリューは、”ws.Cells(row + 1, 1).Value ' 社員ID”これですね。
TextBox1,2,3,4,5と、テキストボックスのオブジェクト名を変更せずに、そのまま使ってるんですけれども、
1のバリューは、WS.SalesRowは今1と受け取ってますから
2行目からデータが始まっているので1をプラスしています。
このサブプロシージャーを使って、行番号を受け取れば
それはタブをチェンジした時も使えるコードになります。
Sub ShowEmployeeInfo(row As Long)
' 社員情報のシート
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("employees")
' 選択されたタブに応じてテキストボックスにデータを表示
TextBox1.Value = ws.Cells(row + 1, 1).Value ' 社員ID
TextBox2.Value = ws.Cells(row + 1, 2).Value ' 社員名
TextBox3.Value = ws.Cells(row + 1, 3).Value ' 所属課
TextBox4.Value = ws.Cells(row + 1, 4).Value ' 年齢
TextBox5.Value = ws.Cells(row + 1, 5).Value ' 性別
End Sub
部品マクロの後ろの1は引数として渡す行番号です。ShowEmployeeInfo 1
これにより、佐藤清ということ初期値は1行目の人を呼び出すという意味になります。
以下のコードはボタンを閉じるコードと、タブストリップをチェンジしたときに、何を表示するのかを指示するコードとなります。

通常は上記で紹介したUserForm_Initializeのコードでタブストリップを起動しても良いのですが、メンバーの変更に対応して自動的にTab Stripを追加する仕組みにしたらより一層便利です。
以下のコードでは、For~Next構文を使って、社員データの行数を数えて、2行目から社員のタブ使ってタブを追加しています。

下図が社員のデータです。データは2行目から始まり、タブのキャプションとして使うのはB列の社員名となります。

ユーザーフォームで写真の登録抹消ができたら便利ですね。それにはまずタブを追加します。

Private Sub btn_add_Click() がタブを追加するコードになります。
TabStrip1.Tabs.Add で 空のタブを追加しています。そして次の、
TabStrip1.Value = TabStrip1.Tabs.Count - 1で
今追加した空のタブを表示します。

ユーザーフォームの空のタブの社員情報を入力してから、以下の登録ボタンをクリックします。社員の追加ボタンでタブを追加するコードです。

こちらは、タブを削除するボタンです。タブを選択して、抹消ボタンをクリックすると、 タブとシート上に登録したデータも削除されます。

初期値として表示される1番目のデータです。

タブチェンジで選択がかわると、表示されるデータも変わります。

写真の追加(実際はタブの追加)ボタンをクリックすると、空のタブが追加できます。 必要なデータはユーザーが直接フォーム上に入力します。 タブのキャプションはデフォルトのままです。

このようにデータを入力してください。

完了したら、登録ボタンをクリックします。タブに名前が表示されました。

抹消ボタンをクリックすると、今入力したデータが削除されます。削除の記録がシート上に残ります。
