次に、作成したユーザーフォームの上に必要な部品を配置していきます。ツールボックス最上段の右端のコンボボックスアイコンをクリックして、ユーザーフォーム左上に配置してください。同じく、最上段の左から2番目、Aと表示されたラベルアイコンをクリックして、図8を参考に配置してください。
デフォルトでは小さな文字が表示されるので、コンボボックスもラベルもプロパティのFont欄右の「…」をクリックして、表示されるウィンドウでフォントサイズを12程度に設定してください。
必要な部品を配置したら、次はコードを記述していきます。
今回は多少込み入っているので、図9で概略を説明してからコードの説明をします。
始めにコンボボックスに項目を設定します。次に、ユーザーフォーム内を巡回し、「軸公差のコンボボックスが変更されたら」「穴公差のコンボボックスが変更されたら」「寸法入力ボックスの値が確定したら」の3つの条件で動作を指定します。この場合、軸公差の処理についてはモジュール「shaft」として、穴公差の処理についてはモジュール「hole」として、コードを記述し、各条件での動作については、shaft、holeとして呼び出します。
コンボボックスの項目設定は下記のようになります。
Private Sub UserForm_Initialize()
ComboBox1.List = Sheet1.Range("as1:as20").Value
ComboBox2.List = Sheet1.Range("as22:as41").Value
End Sub
軸公差のコンボボックスが変更された場合、穴公差のコンボボックスが変更された場合のコードは下記のようになります。
Private Sub ComboBox1_Change() shaft End Sub Private Sub ComboBox2_Change() hole End Sub
寸法入力ボックスの値が確定した場合のコードは下記となります。「_Exit 」とはオブジェクト(この場合、入力ボックス)での作業が終了した場合に動作するコマンドになります。コンボボックスは選択されていない場合、-1を返すので、コンボボックスのインデックスが0以上であるかで、コンボボックスが選択しているかを判断しています。
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If ComboBox1.ListIndex >= 0 Then
shaft
Else
Label1.Caption = ""
Label2.Caption = ""
Label5.Caption = ""
End If
If ComboBox2.ListIndex >= 0 Then
hole
Else
Label3.Caption = ""
Label4.Caption = ""
Label6.Caption = ""
End If
End Sub
軸公差の処理のコードは下記となります。テキストボックスに入力された値が公差表の範囲にあるかどうかをifコマンドで判断し、表の範囲内にある場合のみシートに値をコピーし、結果をユーザーフォームのラベルに反映させます。
Sub shaft()
If IsNumeric(TextBox1.Text) = True And Val(TextBox1.Text) > 0.000001 And Val(TextBox1.Text) <= 500 Then
Sheet1.Cells(2, 1) = TextBox1.Text
Sheet1.Cells(2, 3) = Sheet1.Cells(ComboBox1.ListIndex + 1, 45)
Label1.Caption = Sheet1.Cells(2, 4) & "[μm]"
Label2.Caption = Sheet1.Cells(2, 5) & "[μm]"
Label5.Caption = Sheet1.Cells(2, 7)
End If
End Sub
穴公差の処理のコードは同様に下記となります。
Sub hole()
If IsNumeric(TextBox1.Text) = True And Val(TextBox1.Text) > 0.000001 And Val(TextBox1.Text) <= 500 Then
Sheet1.Cells(2, 1) = TextBox1.Text
Sheet1.Cells(3, 3) = Sheet1.Cells(ComboBox2.ListIndex + 22, 45)
Label3.Caption = Sheet1.Cells(3, 4) & "[μm]"
Label4.Caption = Sheet1.Cells(3, 5) & "[μm]"
Label6.Caption = Sheet1.Cells(3, 7)
End If
End Sub
ここまでできたら、動作の確認をしてみてください。動作は、VBAエディタのツールバーで横向き三角アイコンをクリックするか、「実行」→「Subユーザーフォームの実行」、あるいはF5キーを押してください。
ここまで入力したシートはこちらからダウンロードできます。
無事、動作したら、次に、ファイルを開くと自動でウィンドウが開き、しかもシートが非表示となるようにしてみます。ウィンドウだけが表示されるようになり、見た目も良くなります。その前に、VBAエディタに戻るために、ユーザーフォームを閉じてください。
Copyright © ITmedia, Inc. All Rights Reserved.
メカ設計の記事ランキング
よく読まれている編集記者コラム