K-fix Learning & Playing

基礎編


ワークシートの印刷

では、VBAの基礎における最後のステップ、印刷に関するコードを作成していきます。また、名前を付けて保存する方法と印刷プレビューの方法も一緒に説明していきます。
では、下のとおりにコードを作成してください。

                        
        Sub 印刷()
            Dim Fname As Variant
            Dim NwBook As Workbook
            Set NwBook = Workbooks.Add
            Fname = Application.GetSaveAsFilename _
                (FileFilter:="Excel ファイル(*.xlsx),*.xlsx")
            If Fname <> False Then
                NwBook.SaveAs Fname
            End If
            
            With Worksheets("Sheet1")
                .Range("A1") = 1000
                .PrintOut
                .Range("B1") = "ワークシート"
                .PrintOut Preview:=True
            End With
        End Sub
                        
                    

このコードを実行すると、新規ブックの作成、名前付け保存、印刷、そして印刷プレビューが次々に処理されるのが分かります。では、このVBAコードの説明をしていきます。
まず、名前を付けて保存のダイアログボックスが返してくるファイル名を格納する変数をバリアント型で宣言します。

次に、Addメソッドで新規ブックを作成し、それをNwBookにして扱います。
名前を付けて保存のダイアログボックスを使うには、ApplicationオブジェクトのGetSaveAsFilenameメソッドを使います。このメソッドは、画面に名前を付けて保存のダイアログを表示させ、ユーザが入力したファイル名を選んだフォルダ名・ドライブ名と一緒にフルパスで返してきます。これを変数Fnameで格納しておきます。

GetSaveAsFilenameメソッドの書式

Application.GetSaveAsFilename (InitialFileName、FileFilter、FilterIndex、Title、ButtonText)

Application    :アプリケーションオブジェクトを指定
InitialFileName :デフォルトのファイル名を指定
FileFilter      :ファイルの種類を指定
FilterIndex     :フィルタの何番目がデフォルトになるかを指定
Title        :ダイアログボックスのタイトルを指定
ButtonText    :[保存]ボタンに表示する文字を指定

この記述例のようにGetSaveAsFilenameの引数で、fileFilter:="Excel ファイル (*.xls)、*.xls"と指定すると、名前を付けて保存のダイアログボックスには、ファイルの拡張子が「.xls」のファイルだけしか表示されません。

次のIFステートメントでは、変数Fnameの値がFalseでなければファイル名が入力されていると判断し、ファイル名を変数FnameとしてSaveAsメソッドで保存します。

次の構文では、ワークシート「sheet1」のセルA1に1000を代入し、プリントアウト(印刷)を処理します。セルに値を入れているのは、Excelはデータのないワークシートは印刷を行わないからです。
また、PrintOutメソッドの引数にPreviewを設定し、Trueを設定すると直接印刷はせず、印刷プレビューを表示します。通常は、印刷プレビューを表示させ、印刷はユーザに直接実行させたほうがいいでしょう。

PrintOutメソッドの書式

object.PrintOut (From、To、Copies、Preview、ActivePrinter、PrintToFilter、Collate)

object     :印刷するオブジェクトを指定
From/To   :印刷開始と終了のページ数を指定
To       :印刷終了ページ数を指定
Copies     :印刷部数を指定
Preview    :印刷前に印刷プレビューするかどうかを決める
ActivePrinter :印刷するプリンタを決める
PrintToFilter :ファイルに出力するかどうかを決める
Collate     :部単位で印刷するかどうかを決める

-補足:セルやセル範囲の指定方法-

セルの指定はRangeプロパティまたはCellsプロパティを使います。これらのプロパティを用いると、Rangeオブジェクトが操作でき、セルやセル範囲にデータや数式を入力することができます。また、WorkbookオブジェクトやWorksheetオブジェクトの指定を省略したときは、自動的に現在選択されているWorkbookオブジェクトやWorksheetオブジェクトを参照します。(セル番地のアルファベットは大・小文字のどちらでもかまいません)

記述例 意味
Range("A1") A1のセル
Cells(1、1) A1のセル
Range("A1:B1") A1からB1のセル範囲
Range(Range("A1")、Range("B1")) A1からB1のセル範囲
Range(Cells(1、1)、Cells(1、2)) A1からB1のセル範囲
Range("A1、D1") A1とD1のセル
Range("A:A") A列全体
Rows("3") 3行目全体
Rows(3) 3行目全体
Rows("3:5") 3行目から5行目までの全体
Union(Rows("3")、Rows("5")) 3行目全体と5行目全体
Columns("A") A列全体
Columns(1) A列全体
Columns("A:C") A列からC列までの全体
Union(Columns("A")、Columns("D")) A列全体とD列全体