第6話 顧客管理マクロの作成

ここでは、顧客の名前・フリガナ・住所・電話番号・備考欄等を設置して、顧客管理のできるマクロの作成を目指します。
新規登録・変更・検索・印刷・保存・セキュリティーの確保等の機能付きマクロを考えています。いつものように、あちこちふらふらしていきますので、完成はいつになるかわかりませんが......




ユーザーフォームの機能を探る

ツールボックス

ActiveX コントロール)

Visual Basic 標準コントロールと ActiveX コントロール、およびプロジェクトに追加した挿入可能なオブジェクトを表示します。

  • ツールボックスにページを追加するか、または [ツール] メニューの [その他のコントロール] コマンドを使ってコントロールを追加して、ツールボックスをカスタマイズすることができます。

    ページを追加すると、新しいページではいつでも [オブジェクトの選択] ツールを使用できます。



標準ツールボックス コントロール



   [オブジェクトの選択]

ツールボックスの項目のうち、[オブジェクトの選択] だけはコントロールの描画を行いません。この項目を選択したときは、フォームに既に描画されているコントロールに対して、サイズ変更または移動のみ行うことができます。



  [ラベル] (九九問題を参考にしてください)

グラフィックのキャプションなど、ユーザーが変更できないテキストを設定します。



  [テキスト ボックス] (九九問題を参考にしてください)

ユーザーが入力または変更できる文字列を格納します。



  [コンボ ボックス]  プロパティはここをクリック

リスト ボックスとテキスト ボックスを組み合わせたコントロールの描画を行います。ユーザーはリストから項目を選択するか、テキスト ボックスに値を入力することができます。使い方は、リストボックスコントロールと同じで、AddItemメソッドで項目を追加し、ListIndexプロパティで現在選択されている項目を得ます。



サンプルソース
Dim sheetcnt, j, sheetno As Integer
Dim sheetname, a As String


Private Sub UserForm_Initialize()
sheetcnt = Application.Worksheets.Count
For j = 1 To sheetcnt
sheetname = Worksheets(j).Name
UserForm1.ComboBox1.AddItem sheetname
Next j
Worksheets(1).Activate
End Sub


Private Sub ComboBox1_click()
sheetno = ComboBox1.ListIndex
a = ComboBox1.List(sheetno)
Worksheets(a).Activate
End Sub




   [リスト ボックス] (郵便検索を参考にしてください)

ユーザーが選択する項目をリストに表示するときに使用します。すべての項目を表示しきれない場合は、リストをスクロールさせることができます。




  [チェック ボックス]

二者択一の選択をする場合や、複数の選択項目から任意の項目を選択する場合に、ユーザーが簡単に選択できるボックスを作成します。




サンプルソース
Sub チェックボックス()
UserForm2.Show
End Sub

Private Sub CommandButton1_Click()
If CheckBox1.Value = True And _
CheckBox2.Value = True And _
CheckBox3.Value = True Then
TextBox1.Text = "あなたは上級者です"
ElseIf CheckBox1.Value = False And _
CheckBox2.Value = False And _
CheckBox3.Value = False Then
TextBox1.Text = "あなたは、PCをインテリアにしていますね"
Else
TextBox1.Text = "あなたは、中級者です"
End If
End Sub


Private Sub CommandButton2_Click()
Unload Me
End Sub


 [オプション ボタン]

複数の選択項目の中からユーザーが 1 つの項目だけを選択できるボタンを作成します。




サンプルソース
Sub オプションボタン()
UserForm3.Show
End Sub
Private Sub CommandButton1_Click()
If OptionButton2.Value = True Then
TextBox1.Text = "正解 Seven ate nine. で7が9を食べるから"
Else
TextBox1.Text = "不正解"
End If
End Sub


Private Sub CommandButton2_Click()
Unload Me
End Sub


 [トグル ボタン]  プロパティはここをクリック

オン/オフを切り替えるボタンを作成します。

TripleState プロパティをTrueにしています。



サンプルソース
Private Sub ToggleButton1_Click()
Dim a
a = ToggleButton1.Value
MsgBox a
End Sub


   [フレーム]

視覚的または機能的にグループ化したコントロールを作成できます。コントロールをグループ化するには、まずフレームを描画してから、そのフレームの内側にコントロールを描画します。



  [コマンド ボタン] (九九問題を参考にしてください)

ユーザーがコマンドを実行するためのボタンを作成します。



   [タブ ストリップ]  プロパティはここをクリック

アプリケーションのウィンドウまたはダイアログ ボックスの同じ領域に複数のページを定義できます。


タブストリップは、ページによって表示を切り替えるコントロールです。タブストリップ内に配置したコントロールは、ページを切り替えても同じコントロールが表示されます。タブごとに変更することはできません。ページの増減をしたい場合は、タブ上で右クリックをすると画面が出ますので選択すればできます。






Tab1のValueプロパティには「0」が、Tab2のValueプロパティには「1」が、Tab3のValueプロパティには「2」が格納されています。この値を利用してページを番号で把握することができます。

  


サンプルソース
Private Sub UserForm_Initialize()
TabStrip1.Value = 0
Label1.Caption = "タブ1です"
End Sub

Private Sub TabStrip1_Change()
Select Case TabStrip1.Value
Case 0
Label1.Caption = "タブ1です"
Case 1
Label1.Caption = "タブ2です"
Case 2
Label1.Caption = "タブ3です"
End Select
End Sub


   [マルチ ページ]  プロパティはここをクリック

複数の情報画面を 1 つのセットとして表示します。


タブストリップコントロールと似ていますが、各ページを完全に独立したページとして設定できます。コントロールのプロパティもページごとに設定できます。また、別々のコントロールも配置できます。


  


   [スクロール バー]  プロパティはここをクリック

一覧に表示しきれない多くの項目や大量の情報を含むリスト内をすばやく移動するためのスクロール ツールを提供します。リスト内の現在位置とスクロールする量を視覚的に示します。

スクロール ボックスの位置を移動させることにより、別のコントロールに値を設定します。値の取得も可能です。

解説

スクロール バー (ScrollBar) コントロールは、フォーム上に配置した別のコントロールから独立して操作できるコントロールです。外観は、リスト ボックス (ListBox) コントロールや、コンボ ボックス (ComboBox) コントロールのドロップダウンする部分にあるスクロール バーと似ていますが、これらのスクロール バーとは異なり、スクロール バー (ScrollBar) コントロールは独立したコントロールです。

スクロール バー (ScrollBar) コントロールと別のコントロールの状態を連動させるには、スクロール バー (ScrollBar) コントロールのイベントとメソッドに対して、コードを記述する必要があります。たとえば、スクロール バー (ScrollBar) コントロールを使って、テキスト ボックス (TextBox) コントロールの値を変更するには、スクロール バー (ScrollBar) コントロールの Value プロパティの値を取得して、テキスト ボックス (TextBox) コントロールの Value プロパティに値を設定するコードを記述します。

スクロール バー (ScrollBar) コントロールの既定のプロパティは、Value プロパティです。

スクロール バー (ScrollBar) コントロールの既定のイベントは、Change イベントです。

メモ   スクロール バーの縦横の向きを変えるには、スクロール バーのサイズ変更ハンドルを縦方向または横方向にドラッグします。


  


サンプルソース
Private Sub ScrollBar1_Change()
TextBox1.Value = ScrollBar1.Value
End Sub


Private Sub UserForm_Initialize()
With ScrollBar1
.Min = -200
.Max = 200
.LargeChange = 50
.SmallChange = 10
.Value = 0
End With
End Sub


  [スピン ボタン]  プロパティはここをクリック

他のコントロールと組み合わせて数字を増減できるスピン コントロールです。値の範囲や項目リストを前後にスクロールさせるときにも使用できます。

解説

スピン ボタン (SpinButton) コントロールをクリックしたときに変更されるのは、スピン ボタン (SpinButton) コントロールの値だけです。別のコントロールに表示される値を変更するには、スピン ボタン (SpinButton) コントロールを使用するコードを記述します。たとえば、スピン ボタンを使って、日付の年、月、日を変更することができます。また、ある範囲内で値を変化させたり、一覧から項目を選択するほか、テキスト ボックスに表示された値を変更する場合にも使用できます。

スピン ボタンを使って、変更した値を表示するには、ラベル (Label) コントロールの Caption プロパティやテキスト ボックス (TextBox) コントロールの Text プロパティなど、コントロールの表示部分にスピン ボタンの値を代入する必要があります。スピン ボタンの縦横の向きを変えるには、スピン ボタンのサイズ ハンドルを縦方向または横方向にドラッグします。

スピン ボタン (SpinButton) コントロールの既定のプロパティは、Value プロパティです。

スピン ボタン (SpinButton) コントロールの既定のイベントは、Change イベントです。



 

 


サンプルソース
Dim Gyou As Integer
Private Sub UserForm_Initialize()
Gyou = 1
Worksheets("sheet1").Cells(Gyou, 1).Activate
TextBox1.Text = "1"
End Sub

Private Sub SpinButton1_Change()
TextBox1.Text = SpinButton1.Value
If TextBox1.Text = 0 Then
TextBox1.Text = "1"
Else
End If
End Sub

Private Sub TextBox1_Change()
On Error Resume Next
Gyou = TextBox1.Text
Worksheets("sheet1").Cells(Gyou, 1).Activate
SpinButton1.Value = TextBox1.Text
End Sub


   [イメージ]  プロパティはここをクリック

ビットマップ、アイコンまたはメタファイルからグラフィカル イメージを表示します。Image コントロールに表示されるイメージだけが装飾可能で、PictureBox コントロールよりも使用するリソースは少なくてすみます。

フォーム上に画像を表示します。

解説

イメージ (Image) コントロールを使うと、フォーム上にデータとして、画像を表示できます。たとえば、社員名簿で社員の写真を表示することができます。

イメージ (Image) コントロールでは、画像のトリミングやサイズ変更、拡大縮小は可能ですが、画像の内容を編集することはできません。たとえば、画像の色を変えたり、画像を透明にしたり、画像に手を加えることはできません。これらの処理を行うには、ペイントなどのイメージ編集アプリケーションが必要です。

イメージ (Image) コントロールでは、次のようなファイル フォーマットがサポートされています。

  • *.bmp

  • *.cur

  • *.gif

  • *.ico

  • *.jpg

  • *.wmf

メモ   画像は、ラベル (Label) コントロールでも表示できます。ただし、ラベル (Label) コントロールでは、画像のトリミングやサイズ変更、拡大縮小はできません。

イメージ (Image) コントロールの既定のイベントは、Click イベントです。



 「RefEdit」  プロパティはここをクリック

ユーザー フォームのワークシートで入力または選択したセル範囲のアドレスを表示します。

ユーザー フォームのワークシートで入力または選択したセル範囲のアドレスを表示します。範囲を選択するには、コントロールのボタンをクリックしてユーザー フォームを折りたたみ、範囲を選択します。次に、コントロールのボタンをもう一度クリックしてユーザー フォームを展開表示します。

RefEdit コントロールがワークシートに埋め込まれている場合、そのブックに含まれる任意のワークシートのセルとコントロールの内容をリンクできます。

解説

RefEdit コントロールの既定のプロパティは Value です。

RefEdit コントロールの既定のイベントは BeforeDragOver です。

モードレス ユーザー フォームでは RefEdit コントロールを使用できません。ユーザー フォームをモーダルにするには、ShowModalプロパティを使用します。


 






サンプルソース
UserForm1 の RefEdit1 コントロールにコントロールのヒントを設定し、ユーザー フォームを表示します。
さらに、ユーザーが UserForm1 の CommandButton1 をクリックします。イベント処理プロシージャの次の使用例は、ワークシートの選択範囲のアドレスを表示し、プログラムを終了します。

Sub Reftest()
UserForm1.RefEdit1.ControlTipText = _
"ワークシートのデータ選択範囲"
UserForm1.Show
End Sub

Private Sub CommandButton1_Click()
MsgBox RefEdit1.Value
End
End Sub