ユーザーフォームの処理
このフォームでは、クエリの実行とオートフォーマットの設定、ページ設定と印刷処理を行います。
選択クエリの作成
最初に選択クエリを作成します。この処理は、フォームのInitializeイベントプロシージャとCommandButton1のClickイベントプロシージャに作成します。
- フォームの宣言セクションで変数
RowNoを宣言します。クエリ結果の総レコード数や作表時の行番号として、複数のプロシージャで使用しますので、モジュールレベル変数で宣言しておきます。
Dim RowNo As Integer, ColumnNo As Integer Private Sub UserForm_Initialize() With ComboBox1 .AddItem "地球連邦軍" .AddItem "ジオン公国軍" .AddItem "エゥーゴ" .AddItem "ティターンズ" .AddItem "ネオ・ジオン" .Text = .List(0) End With End Sub
- CommandButton1はクエリを実行するボタンで、ここでデータベース処理を行なわせます。
Private Sub CommandButton1_Click() Dim SQLstring As String Worksheets("Sheet1").Cells.Select Selection.Clear Range("A1").Select 'データベースを開きクエリを実行する Select Case ComboBox1.Text Case "地球連邦軍" SQLstring = "Select * from MSデータ _ Where MSデータ.所属 = '地球連邦軍'" Case "ジオン公国軍" SQLstring = "Select * from MSデータ _ Where MSデータ.所属 = 'ジオン公国軍'" Case "エゥーゴ" SQLstring = "Select * from MSデータ _ Where MSデータ.所属 = 'エゥーゴ'" Case "ティターンズ" SQLstring = "Select * from MSデータ _ Where MSデータ.所属 = 'ティターンズ'" Case "ネオ・ジオン" SQLstring = "Select * from MSデータ _ Where MSデータ.所属 = 'ネオ・ジオン'" End Select
- SQL文字列ができたら、フィールド数を「4」にして標準モジュール「Module2」にあるデータベース処理用Functionプロシージャ「DBAccess」を実行します。クエリが実行され、レコードデータがワークシートのセルに転送されます。
ColumnNo = 4
RowNo = Module2.DBAccess(SQLstring, ColumnNo)
End Sub
オートフォーマットの設定処理
今度は、オートフォーマットの設定処理です。コレクションは、4つのトグルボタンのClickイベントプロシージャで行います。
- まず、トグルボタンがユーザーによって押されると、ボタンは押し込んだ状態になり、
Valueプロパティに「True」が格納されます。この値を調べ、ボタンが押し込まれていれば、他の3つのボタンのValueプロパティを「False」にセットし、それまで押し込まれているボタンがあればボタンをアップ状態にします。こうすることで、4つのトグルボタンコントロールを「ラジオボタン」のように、1つ押し込めばその前に押し込んでいた他のボタンがポップアップするような効果を作ることができます。
AutoFormatメソッドを使用してデータのあるセル範囲にオートフォーマットを実行します。Private Sub ToggleButton1_Click() Range("A1").Select If ToggleButton1.Value = True Then ToggleButton2.Value = False ToggleButton3.Value = False ToggleButton4.Value = False Selection.AutoFormat Format:=xlRangeAutoFormatColor1


- もし、
Valueプロパティの値がFalseであれば、ボタンはポップアップした状態なので、オートフォーマットを解除します。コレクションは、AutoFormatメソッドの引数FormatにxlRangeAutoFormatNoneをセットして実行します。
Else
Selection.AutoFormat Format:=xlRangeAutoFormatNone
End If
End Sub
- 同じような処理を、残り3つのトグルボタンのClickイベントプロシージャに作成します。それぞれ、
AutoFormatメソッドの引数Formatの値を変え、違うスタイルのオートフォーマットが設定できるようにします。
Private Sub ToggleButton2_Click() Range("A1").Select If ToggleButton2.Value = True Then ToggleButton1.Value = False ToggleButton3.Value = False ToggleButton4.Value = False Selection.AutoFormat Format:=xlRangeAutoFormatColor2 Else Selection.AutoFormat Format:=xlRangeAutoFormatNone End If End Sub Private Sub ToggleButton3_Click() Range("A1").Select If ToggleButton3.Value = True Then ToggleButton2.Value = False ToggleButton1.Value = False ToggleButton4.Value = False Selection.AutoFormat Format:=xlRangeAutoFormatClassic2 Else Selection.AutoFormat Format:=xlRangeAutoFormatNone End If End Sub Private Sub ToggleButton4_Click() Range("A1").Select If ToggleButton4.Value = True Then ToggleButton2.Value = False ToggleButton3.Value = False ToggleButton1.Value = False Selection.AutoFormat Format:=xlRangeAutoFormatList1 Else Selection.AutoFormat Format:=xlRangeAutoFormatNone End If End Sub
| xlRangeAutoFormat3DEffects1 | xlRangeAutoFormat3DEffects2 |
| xlRangeAutoFormatAccounting1 | xlRangeAutoFormatAccounting2 |
| xlRangeAutoFormatAccounting3 | xlRangeAutoFormatAccounting4 |
| xlRangeAutoFormatClassic1 | xlRangeAutoFormatClassic2 |
| xlRangeAutoFormatClassic3 | xlRangeAutoFormatClassicPivotTable |
| xlRangeAutoFormatColor1 | xlRangeAutoFormatColor2 |
| xlRangeAutoFormatColor3 | xlRangeAutoFormatList1 |
| xlRangeAutoFormatList2 | xlRangeAutoFormatList3 |
| xlRangeAutoFormatLocalFormat1 | xlRangeAutoFormatLocalFormat2 |
| xlRangeAutoFormatLocalFormat3 | xlRangeAutoFormatLocalFormat4 |
| xlRangeAutoFormatNone | xlRangeAutoFormatPTNone |
| xlRangeAutoFormatReport1 | xlRangeAutoFormatReport2 |
| xlRangeAutoFormatReport3 | xlRangeAutoFormatReport4 |
| xlRangeAutoFormatReport5 | xlRangeAutoFormatReport6 |
| xlRangeAutoFormatReport7 | xlRangeAutoFormatReport8 |
| xlRangeAutoFormatReport9 | xlRangeAutoFormatReport10 |
| xlRangeAutoFormatSimple | xlRangeAutoFormatTable1 |
| xlRangeAutoFormatTable2 | xlRangeAutoFormatTable3 |
| xlRangeAutoFormatTable4 | xlRangeAutoFormatTable5 |
| xlRangeAutoFormatTable6 | xlRangeAutoFormatTable7 |
| xlRangeAutoFormatTable8 | xlRangeAutoFormatTable9 |
| xlRangeAutoFormatTable10 |
印刷パラメータの設定処理
表を1ページに収めて印刷する処理を組み立てます。また、印刷を実行する際の部数やページ番号印刷など、印刷にかかわるパラメータを設定する処理を作成します。
- スピンボタンコントロールは、印刷部数を設定するようにしました。スピンボタンを押すと、コントロールにはChangeイベントが発生し、また
Valueプロパティにその時の押した量が格納されます。それを、ラベルコントロールのCaptionプロパティにセットし、現在の操作量が一目で分かるようにします。
Private Sub SpinButton1_Change() Label1.Caption = SpinButton1.Value End Sub
- コマンドボタン「CommandButton2」は「印刷」ボタンで、ページ設定と印刷処理を実行します。
RowNoを調べれば、クエリが実行されたのかどうかが分かりますので、「0」の場合はメッセージを表示しこのプロシージャを終了します。Private Sub CommandButton2_Click() Dim Ret As Integer Dim Ttl As Single Dim Title As String If RowNo = 0 Then MsgBox "クエリを実行してください" Exit Sub End If
- 続いて、表のタイトルをテキストボックスコントロールから取得し、変数に格納します。また、セル幅をセルのデータに合わせるオートフィットを実行します。そして、セルの列幅の合計寸法を計算し、cmに換算します。
Title = TextBox1.Text
Range(Cells(1, 1), Cells(1, ColumnNo)).Select
Selection.EntireColumn.AutoFit
For i = 1 To ColumnNo
Ttl = Ttl + Cells(1, i).Width
Next
Ttl = Round(Ttl * 0.35) / 10
- 合計寸法を元に、ページ設定を切り替えます。これは、既に標準モジュール「Module1」に作成してあるプロシージャ「PrintSet」を呼び出します。この辺は、コードバージョンとまったく同じコードです。コードを書くモジュールが違っていますので、参照するモジュール名を付加しているだけです。
Select Case Ttl Case Is < 17 Call Module1.PrintSet("A4縦", 2, Title) Case 17 To 19 Call Module1.PrintSet("A4縦", 1, Title) '左右のマージンで調整 Case 20 To 26 Call Module1.PrintSet("A4横", 2, Title) Case 27 To 28 Call Module1.PrintSet("A4横", 1, Title) Case Is > 28 Call Module1.FitPage(Title) 'データを用紙に収めて印刷する End Select
- 「その他の設定」のチェックボックスを調べ、チェックが入っていればその設定を、チェックが外れていれば設定を解除する操作をします。
ValueプロパティにTrueが格納されます。そこで、この値を調べチェックされていればPageSetupオブジェクトの「BlackAndWhite」プロパティをTrueにします。チェックされていなければFalseにします。If CheckBox1.Value = True Then Worksheets("Sheet1").PageSetup.BlackAndWhite = True Else Worksheets("Sheet1").PageSetup.BlackAndWhite = False End If
""(空白)をセットし、ページ番号を印刷しないようにします。If CheckBox2.Value = True Then Worksheets("Sheet1").PageSetup.CenterFooter = "- &P -" Else Worksheets("Sheet1").PageSetup.CenterFooter = "" End If
If CheckBox3.Value = True Then Worksheets("Sheet1").PageSetup.PrintHeadings = True Else Worksheets("Sheet1").PageSetup.PrintHeadings = False End If
- ここまでのページ設定ができたら、印刷を開始します。
PrintOutメソッドの引数Copiesに、スピンボタンのValueプロパティの値をセットし、印刷部数を指定します。また、変数RowNoを「0」に戻し、次の操作時にクエリが実行されないのにこのボタンが押された場合の処理に備えます。
'印刷開始
With Worksheets("Sheet1")
.Range("A1").Select
.PrintOut Copies:=SpinButton1.Value
End With
RowNo = 0
End Sub
Private Sub CommandButton3_Click()
Unload Me
End
End Sub
