ワークシート上のコンボボックスで印刷シートを指定する。時給の計算その8

vbajikyukeisaneyecatch008

ワークシートにコンボボックスを設置して、そのリストで選択されたシートを印刷します。

時給計算表作成の第8回目です。
今回は、ActiveXコントロールで設置してエクセルVBAコードで操作していきます。

エクセルVBAで時給計算表を作成しています。8回目の記事になります。

今回は、作成保存した時給計算表を、印刷する場合の仕組みをエクセルVBAコードで作っていきます。

こんにちは、じゅんぱ店長(@junpa33)です。

 

時給計算に関連する記事の一覧

「時給計算表作成」の記事一覧を開く

 

無料ソフトダウンロード
この時給計算表エクセルソフトの無料のダウンロードは、

vbajikyukeisaneyecatch010無料DL!時給計算表エクセルソフト 個人別ブックで管理出来ます。

の記事で行うことが出来ます。

 

ワークシート上のコンボボックスで印刷シートを指定

 

基本ペーパーレスにしても、そうとばかりはいかない場合が多いです。

ここでは、保存した時給計算表をプリントアウトする仕組みを作っていきます。

印刷の方法としては、印刷したいシートを開き「ファイル」→「印刷」でいいのですが、

折角、VBAコードを組み立てていますので、これをちょっとオシャレにコード化したいと思います。

一連の流れはこのようになります。

1.「シートリスト作成」ボタンをクリックします。

vbajikyuhyoupho043

矢印下001

2.「プルダウンボタン(ActiveXコントロール・コンボボックス)」を押すとこのBookに存在するシートがリスト化されています。

vbajikyuhyoupho044

矢印下001

3.シート名を選択し「シート印刷」をクリックします。

vbajikyuhyoupho045

矢印下001

4.印刷プレビュー画面でシートを確認して良ければ「印刷」をクリックします。

vbajikyuhyoupho046

矢印下001

5.ファイル内のシート構成を変更した場合は、「シートリストクリア」をクリックしリストを削除してリセットします。

vbajikyuhyoupho047

 

画像説明の様に、ActiveXコントロール・コマンドボタンとVBAプロシージャーとの紐づけは、この記事では説明しません。(後の記事になります。)

今回紹介するのは、このVBAコードのプロシージャー作成の部分になります。

 

コンボボックスから印刷シートを指定するVBAコード

 

この記事のエクセルVBAコードは、「Module3」に記述していきます。

コンボボックスの設置から行っていきます。

コンボボックスの設置

 

コンボボックスの設置はコマンドボタンと同様です。

Excelの「開発タブ」から「挿入」→「ActiveXコントロール」→「コンボボックス」と指定して、エクセルシート上の必要か所に十字カーソルで大きさを決めて設置してください。

vbajikyuhyoupho048

オブジェクト名はデフォルトの「ComboBox1」です。

 

シート名をコンボボックスのアイテムで加えるVBAコード

 

コンボボックスのプルダウンにシート名を表示するVBAコードを作成します。

コンボボックスアイテム表示

変数ShN()は配列変数です。それぞれのシート名を入れますが、シート名の数がまだ不明です。

数量が確定した時点でReDimで再宣言を行います。

コンボボックスにシート名を表示させるには、「AddItem」メソッドを使います。

シート名コード

Sub シート名()

Dim Sh As Worksheet
Dim ShN() As String
Dim n As Long
Dim ComboBox1 As MSForms.ComboBox

'全シート名を抽出するして配列に代入します
n = Worksheets.Count

'配列変数を再宣言します。
ReDim ShN(n)

'0からスタートして、配列変数にシート名を代入していきます
n = 0
For Each Sh In Worksheets
    ShN(n) = Sh.Name
    n = n + 1
Next

'配列に代入したシート名をコンボボックスアイテムに移します
For n = 0 To Worksheets.Count - 1
    Worksheets("初期設定項目").ComboBox1.AddItem ShN(n)
Next n

End Sub

 

MEMO

一次元配列変数(動的配列)の使い方について詳しくはこちらです。

vbahairetueyecatch1次元配列とは。静的配列と動的配列 エクセルVBA

 

コンボボックスで選択したシートを印刷するVBAコード

 

次に、コンボボックスで選択されたシートを印刷します。

コンボボックスで選択のシート印刷

コンボボックスで選んだシート名を取り出すには、

「ListIndex」プロパティはリストの番号を取得します(整数値)。

「List」メソッドはリストの項目テキストを取得します。

シート名(文字列)を表示させるためには「.List(.ListIndex)」と記述します。

印刷設定を行います。

  • プリントエリアの指定
  • ヘッダー表示
  • A4サイズ指定、印刷方向
  • 上下左右余白

プリントプレビューで印刷シートの確認

印刷

 

MEMO

Callステートメントの使い方について詳しくはこちらです。

vbacalleyecatch部品化プロシージャーでCallステートメントは必須

Gotoステートメントの使い方について詳しくはこちらです。

VBAGotoeyecatch001Gotoステートメントはコードをジャンプする!毒と薬との両面がある

 

コード

Sub シート印刷()

Dim PSh As String

Call Module1.設定値代入

Worksheets("初期設定項目").Select

'リストで選択されたシート名を取り出します
With Worksheets("初期設定項目").ComboBox1

'-------選択されなかった場合のエラー処理
    On Error GoTo errstep1

'-------選択されたシート名を変数PShに代入します
    PSh = .List(.ListIndex)

End With

'印刷のための設定を行います
With Worksheets(PSh).PageSetup

    .PrintArea = "A1:K34"
    .RightHeader = EmpName & "時給計算表" & PSh
    .PaperSize = xlPaperA4
    .Orientation = xlLandscape
    .LeftMargin = Application.CentimetersToPoints(1)
    .RightMargin = Application.CentimetersToPoints(1)
    .TopMargin = Application.CentimetersToPoints(1)
    .BottomMargin = Application.CentimetersToPoints(0.5)
    .HeaderMargin = Application.CentimetersToPoints(0.5)
    .FooterMargin = Application.CentimetersToPoints(0.5)
    
End With

'プリントプレビューを表示します
Worksheets(PSh).PrintPreview

Exit Sub

'エラー時の処理方法
errstep1:
MsgBox "シートの選択がされていません"

End Sub

 

コンボボックスのリストのクリア

 

シート構成が変わった時には、コンボボックスのリストを変更しなければなりません。

コンボボックスのリストクリア

一旦、今のリストをクリアして、再度シートリストを作成するという方法になります。

コンボボックスのリストクリアは非常に簡単です。

コード

Sub コンボリストクリア()

'コンボボックスのリストをクリアする
    With Worksheets("初期設定項目").ComboBox1
        .Clear
    End With

End Sub

 

シートに設置したコンボボックスからの印刷のまとめ

 

作成保存した時給計算表の印刷方法について説明してきました。

エクセルのデフォルトの印刷機能であれば、よくご存じのように印刷したいシートを表示して「ファイル」→「印刷」(その前に印刷設定もあります)をしないといけません。

会計月毎の保存シートも1年で12枚、多年に渡ればその何倍かになります。

その度毎に、シートを開きに行ったのでは大変です。

シート数が増えれば増えるほど、今回説明したこの機能が役に立ってくると思います。

またこの方法は、別にいろいろな場面でも使えるテクニックですので、ご自身で応用を考えられても面白いかと思います。

 

短期間でエクセルVBAの独学習得を目指したいなら

 

エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。

けれども、

出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。

独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。

先人が行った勉強方法をあなたがそのまま利用すればよいということです。

独習のための大切な7つのポイントは、上記記事にて解説しています。

重要ワード

独習によるVBA習得のキーワードは、

出来るだけ多くの実例に触れること!

です。

正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。

ハッキリ言って、

本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、

手っ取り早く短期間習得できるというのは間違いないでしょう。

 

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
vbastudyeyecatch2エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

 

このサイトでよく使うVBAのコードのトピックを纏めています。

「エクセルVBA最速理解」の記事一覧を開く

 

今回の記事はここまでです。   最後までご覧いただき有難うございました。

 

 

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。