メールマガジン【アクセスで作るシリーズ】


バックナンバー 【住所録ソフト編】 Vol.44
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

    ACCESSで作るシリーズ  【住所録ソフト編】

    発 行 : Yoshihisa Fukuda          2003.02.22 Vol.44

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
--------------------------------------
今回から、住所録印刷指示画面の指定に従いレポートを制御するプログラム作成です。
今回は、まずグループの制御を行うプログラムの作成を行います。
______________________________________
 □ 住所録印刷レポートの元になるクエリー[AddressRepQuery]を修正する。

まず、最初に住所録印刷レポートの元になるクエリー[AddressRepQuery]を少し修正
します。

1.住所録ソフトのデータベース[Address.mdb]を開きます。

2.データベースウィンドウの[クエリー]タブを選択します。

3.[AddressRepQuery]を選択して[デザイン]ボタンを押下しクエリービルダーを
  開きます。

4.下段のフィールドの最後にある[50on]フィールドのフィールド名[50on]を[Kana]
  に修正します。

  50on: IIf(IsNull([Furigana]),Null,Left([Furigana],1))
  ↓
  Kana: IIf(IsNull([Furigana]),Null,Left([Furigana],1))

5.修正したらクエリーを保存してクエリービルダーを閉じます。
______________________________________
 □ 住所録印刷指示画面に印刷ボタンを付加する。

1.データベースウィンドウの[フォーム]タブを選択します。

2.住所録印刷指示画面のフォーム[AddressRepForm]を選択し[デザイン]ボタンを
  押下します。

3.ツールバーの[コマンドボタン]を選択し、フォームの下の方の[閉じる]ボタンの
  横あたりでクリックします。(コントロールウィザードは有効にしておきます)

4.コマンドボタンウィザードの画面で[種類]を[レポートの操作]、[ボタンの動作]
  を[レポートのプレビュー]にして[次へ]ボタンを押下します。

5.[コマンドボタンを使ってプレビューするレポートを選択して下さい]で住所録
  [AddressRep]を選択し[次へ]ボタンを押下します。

6.[ボタンに表示する文字列またはピクチャを指定します]で[文字列]を選択し、
  横のテキストボックスに[印 刷]と入力し[次へ]ボタンを押下します。

7.[ボタン名を指定して下さい]で[PrintBtn]と入力し[完了]ボタンを押下します。
______________________________________
 □ 住所録印刷指示画面のグループ指定コンボボックスを修正する。

1.住所録印刷指示画面のグループ1コンボボックス[GroupCombo1]を選択し、以下の
  プロパティを修正します。

  値集合ソース・・・ "なし";"None";"都道府県";"Prefecture";"50音";"Kana"
  列数    ・・・ 2
  列幅    ・・・ XXcm;0cm (XX は[GroupCombo1]の[幅]プロパティの値

2.住所録印刷指示画面のグループ2コンボボックス[GroupCombo2]を選択し、以下の
  プロパティを修正します。

  値集合ソース・・・ "なし";"None";"都道府県";"Prefecture";"50音";"Kana"
  列数    ・・・ 2
  列幅    ・・・ XXcm;0cm (XX は[GroupCombo2]の[幅]プロパティの値
______________________________________
 □ 住所録印刷指示画面の印刷ボタンにプログラムを記述する。

1.作成した[印刷]ボタンを選択し[クリック時]プロパティにカーソルを移動し、
  右端の[...]ボタンを押下します。

2.モジュールウィンドウが開いたら、以下の様にプログラムを書き足します。

  ※先頭に#のある行が追加する行です。
   先頭に*のある行は修正が必要な行です。

Private Sub PrintBtn_Click()
On Error GoTo Err_PrintBtn_Click

  Dim stDocName As String

#  Dim stLinkCriteria As String

#  Call SetGroup
#  stLinkCriteria = SetWhereStr

*  stDocName = "AddressRep_W"
*  DoCmd.OpenReport stDocName, acPreview, , stLinkCriteria

Exit_PrintBtn_Click:
  Exit Sub

Err_PrintBtn_Click:
  MsgBox Err.Description
  Resume Exit_PrintBtn_Click

End Sub

3.モジュールウィンドウの最終行へカーソルを移動し、以下のサブルーチンを追加
  します。

Private Sub SetGroup()
  Dim dbs As Database
  Dim stDocName As String
  Dim GrpLevel As Variant
  Dim Doc As Document
  Dim RepCtl As Control
  
  Set dbs = CurrentDb
  With dbs.Containers!Reports
  
  For Each Doc In .Documents
    If Doc.Name = "AddressRep_W" Then
      DoCmd.DeleteObject acReport, "AddressRep_W"
      Exit For
    End If
  Next Doc
  End With
  
  DoCmd.CopyObject , "AddressRep_W", acReport, "AddressRep"
  
  DoCmd.OpenReport "AddressRep_W", acViewDesign
  If Me.GroupCombo1 <> "なし" Then
    GrpLevel = CreateGroupLevel("AddressRep_W", Me.GroupCombo1.Column(1) _
                  , True, True)
    Reports!AddressRep_W.Section(acGroupLevel1Header).Height = 300
    Reports!AddressRep_W.Section(acGroupLevel1Footer).Height = 100
    Set RepCtl = CreateReportControl("AddressRep_W", acTextBox, _
    acGroupLevel1Header, , Me.GroupCombo1.Column(1), 90, 57, 800, 240)

    RepCtl.Name = Me.GroupCombo1.Column(1)
    Set RepCtl = Nothing
    CreateReportControl "AddressRep_W", acLine, acGroupLevel1Header, , , _
              57, 250, 14801, 0
    CreateReportControl "AddressRep_W", acLine, acGroupLevel1Header, , , _
              57, 300, 14801, 0
    CreateReportControl "AddressRep_W", acLine, acGroupLevel1Footer, , , _
              57, 57, 14801, 0
  End If
  If Me.GroupCombo2 <> "なし" Then
    GrpLevel = CreateGroupLevel("AddressRep_W", Me.GroupCombo2.Column(1), _
                  True, True)
    Reports!AddressRep_W.Section(acGroupLevel2Header).Height = 300
    Reports!AddressRep_W.Section(acGroupLevel2Footer).Height = 100
    Set RepCtl = CreateReportControl("AddressRep_W", acTextBox, _
    acGroupLevel2Header, , Me.GroupCombo2.Column(1), 90, 57, 800, 240)

    RepCtl.Name = Me.GroupCombo2.Column(1)
    Set RepCtl = Nothing
    CreateReportControl "AddressRep_W", acLine, acGroupLevel2Header, , , _
              57, 250, 14801, 0
    CreateReportControl "AddressRep_W", acLine, acGroupLevel2Header, , , _
              57, 300, 14801, 0
    CreateReportControl "AddressRep_W", acLine, acGroupLevel2Footer, , , _
              57, 57, 14801, 0
  End If
  DoCmd.Close acReport, "AddressRep_W", acSaveYes
End Sub

※ プログラムのコードはメールマガジンの特性上、横のカラムが長く出来ないため
  結合子( _ )で複数行に分割していますが、1行で記述しても構いません。

今回はここまでです。
次回はサブルーチンの続きで、抽出条件の設定、それから表示順序の設定を行います。

______________________________________
 □ お知らせ。

  ・ホームページの更新について。

   都合によりホームページの更新が24日(月曜日)の午後になります。

   サンプル等が必要な方は、それ以降アクセス下さいますよう、お願いします。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

◇ ACCESSで作るシリーズ 【住所録ソフト編】
◇ 発 行 元  :Yoshihisa Fukuda(福田 義久)
◇ ご意見・ご要望
  ご質問等   :fukud@nifty.com

◇ このメールマガジンは、インターネットの本屋さん『まぐまぐ』を利用して発行
  しています。(まぐまぐID:0000077071)
◇ バックナンバー:http://www.fsc-net.com
◇ 登録・解除  :http://www.fsc-net.com

 Copyright(C) 2001-2003 Yoshihisa Fukuda All rights reserved.

◇転載について
 このメールマガジンの無断転載などは、一切禁止です。
 転載をご希望の方は、事前にメールで連絡をください。
◇免責
 このメールマガジン及びホームページの内容による、いかなる損害、障害などに
 関して発行者は一切の責任を負いません。
 掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□