Microsoft Access Club >Access裏技Tips >このページ >次頁 < 前項 サイト内検索


VBAで気ままに印刷設定を変更する : Access裏技Tips



A4の用紙設定がいつの間にやらB4に変わっていた、という経験はありませんか。 ここでは、VBAで思いのまま印刷設定を行う技を紹介します。

VBAで思いのまま印刷設定を行う

  1. サンプルテーブル(tbl_sample)をもとにして、「社員別出身地リスト」のレポート(rpt_sample)を作成します。
  2. より具体的な用紙サイズの一覧を表示するために、「用紙選択」テーブル(tbl_papersize)を作成します。
  3. 次に、「印刷設定」フォーム(frm_sample)を作成し、コマンドボタン、コンボボックス、オプショングループを配置します。
  4. これらは、印刷設定をプリンタードライバーに伝える役目を担います。
  5. コマンドボタンのクリック時イベントプロシージャを作成し、PrtDevModeプロパティを介して印刷を行います。

「社員別出身地リスト」のレポート作成

  1. 「社員別出身地リスト」のレポートを作成します。
  2. サンプルデータを元に、社員別出身地リストを作成します。

「用紙選択」のテーブル作成

  1. 「用紙選択」のテーブルを作成します。サンプルデータを元に、社員別出身地リストを作成します。
  2. 「サイズ」フィールド(数値型)、「名称」フィールド(テキスト型)を作成し、データ入力を行います。

「印刷設定」のフォームの作成

  1. 「印刷設定」のフォームを作成します。
  2. 非連結フォームを作成します。
  3. 印刷部数選択を行うため、コンボボックス(Cob印刷の部数)を作成し、値集合ソースに、10部まで部数指定を可能にする 1;2;3;4;5;6;7;8;9;10 を記述します。
  4. 用紙サイズ選択を行うため、コンボボックス(Cob用紙のサイズ)を作成し、値集合ソースに、tbl_papersizeを指定します。
  5. 印刷の向きを選択するため、オプショングループ(Op印刷方向オプション)を作成します。
  6. 印刷、印刷プレビューを切り替えるため、オプショングループ(Op印刷選択)を作成します。
  7. 印刷を実行するコマンドボタン(Cmdコマンド)を作成します。

Typeステートメントの作成

フォームのクラスモジュールにTypeステートメントを作成します。

Private Type str_DEVMODE ' --- A
    RGB As String * 94
End Type

Private Type type_DEVMODE

    strDeviceName As String * 16
    intSpecVersion As Integer
    intDriverVersion As Integer
    intSize As Integer
    intDriverExtra As Integer
    lngFields As Long
    intOrientation As Integer
    intPaperSize As Integer
    intPaperLength As Integer
    intPaperWidth As Integer
    intScale As Integer
    intCopies As Integer
    intDefaultSource As Integer
    intPrintQuality As Integer
    intColor As Integer
    intDuplex As Integer
    intResolution As Integer
    intTTOption As Integer
    intCollate As Integer
    strFormName As String * 16
    lngPad As Long
    lngBits As Long
    lngPW As Long
    lngPH As Long
    lngDFI As Long
    lngDFr As Long
   
End Type

解説
  1. 詳細は、AccessVBAヘルプのPrtDevModeプロパティ欄を参考にして下さい。
今回のおすすめポイント

Type ステートメント

Typeステートメントでユーザー定義型を宣言すると、その宣言の適用範囲内であれば、どこからでもその型の変数を宣言できます。 ユーザー定義型の変数の宣言には、Dim、Private、Public、ReDim、または Static のいずれかのステートメントを使います。

コマンドボタンクリック時イベントプロシージャの作成

コマンドボタンクリック時イベントプロシージャの作成

Private Sub Cmdコマンド_Click()

    Const DM_ORIENTATION = &H1
    
    Dim DevString As str_DEVMODE
    Dim Dm As type_DEVMODE
    Dim strDevModeExtra As String
    Dim rpt As Report
    
    If 1 <> MsgBox("指示に従って処理を行います。", 17) Then End ' --- A
    DoCmd.OpenReport "rpt_sample", acDesign ' --- B
    Set rpt = Reports("rpt_sample")
        
    If Not IsNull(rpt.PrtDevMode) Then ' --- C
        strDevModeExtra = rpt.PrtDevMode
        DevString.RGB = strDevModeExtra
        LSet Dm = DevString
        
        With Dm ' --- E
            .lngFields = Dm.lngFields Or DM_ORIENTATION
            .intCopies = Me.Cob印刷の部数
            .intPaperSize = Me.Cob用紙のサイズ
            .intOrientation = Me.Op印刷方向オプション
        End With
        
        LSet DevString = Dm ' --- F
        Mid(strDevModeExtra, 1, 94) = DevString.RGB
        rpt.PrtDevMode = strDevModeExtra
    End If
    
    DoCmd.Close acReport, "rpt_sample", acSaveYes ' --- G
  
    Select Case Me.Op印刷選択 ' --- H
        Case 1
            DoCmd.OpenReport "rpt_sample", acPreview, "", ""
        Case 2
            DoCmd.OpenReport "rpt_sample", acNormal, "", ""
    End Select
    
End Sub
解説
  1. Msgbox関数で[Chancel]ボタンをクリックすると、以降の処理を中止します。
  2. デザインビューでレポートを開きます。なお、この措置は必ず行います。
  3. MPrtDevModeプロパティが空白でなければ、以下の処理に進みます。
  4. CWithステートメントで記述を簡潔、見易さを向上させています。
  5. 設定が終わった後、プロパティの更新を行います。
  6. デザインビューを保存して閉じます。
  7. 印刷レビューと印刷を、ユーザのお好みで区分します。

動作確認

  1. 印刷設定フォームをフォームビューで開きます。
  2. 各種項目を選択して[印刷開始コマンド]ボタンをクリックします。


関連ページ

ページの先頭へ 前ページへ戻る

 


VBAで気ままに印刷設定を変更する : Access裏技Tips


 

-Microsoft Access Club-

cPanel と PLESKをインストールした専用・共有レンタルサーバーを銀行振込でご提供中。契約書は一切不要です。
cPanel や PLESKをインストールした専用・共有レンタルサーバー
まずは1ヶ月から...。
日本国内の銀行振込がOK、契約書は不要です。