質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

2453閲覧

ACCESS 画面印刷が特定のPCで印刷できない

DreamTheater

総合スコア1095

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/10/05 05:50

###動作環境
Windows 10 Pro(1903)
ACCESS(Office 365(2002))

###現象
ACCESS のフォームをハードコピー印刷するVBAが特定のPCのみうまく動作しません。
→下記コードを実行すると、印刷実行の代わりにファイル保存ダイアログが表示されます。

VBA

1' 画面印刷ボタンクリック時 2Private Sub cmd印刷_Click() 3 4 Call subGetHardCopy 5 6End Sub 7 8Public Sub subGetHardCopy() 9 10 'アクティブウィンドウのみキャプチャ 11 Call keybd_event(VK_SNAPSHOT, 1, 0, 0) 12 13 'Excelを使って印刷 14 Dim oleExcel As Object 15 16 Set oleExcel = Nothing 17 Set oleExcel = CreateObject("Excel.Application") 18 19 oleExcel.ScreenUpdating = False 20 oleExcel.Workbooks.Add 21 oleExcel.ActiveSheet.Range("A1") = "出力日時:" & CStr(Now()) 'A1セルに出力日時を記入 22 oleExcel.ActiveSheet.Range("A2").Activate 'A2セルに移動し、キャプチャを貼りつける 23 oleExcel.ActiveSheet.Paste 24 With oleExcel.ActiveSheet.PageSetup 25 '横向きに印刷するように設定 26 .Orientation = xlLandscape 27 '1ページ(縦1x横1)に収まるように印刷範囲を設定 28 .Zoom = False 29 .FitToPagesWide = 1 30 .FitToPagesTall = 1 31 End With 32 oleExcel.ScreenUpdating = True 33 34 oleExcel.ActiveWindow.SelectedSheets.PrintOut ActivePrinter:=Excel.Application.ActivePrinter '即時印刷(アクティブプリンタを使用) 35 '↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 36 oleExcel.ActiveWorkbook.Close savechanges:=False 'ここで開いたブックを、保存せずに閉じる 37 38 Set oleExcel = Nothing 39 40End Sub

問題のPCで、oleExcel.ActiveWindow.SelectedSheets.PrintOut ActivePrinterに代入している
Excel.Application.ActivePrinter をフォーカスすると「オブジェクト変数または With ブロック変数が設定されていません。」
と表示されます。
→正しく印刷されるPCでは「プリンタ名 on NeXX:」という値が表示されます。

###試してみたこと
当初印刷失敗するPCの通常使用するプリンターが「Microsoft Print to PDF」であった為、実際に印刷するプリンタ
に変更したのですが、それでも印刷が失敗します。(設定変更後、ACCESSの再起動は行いましたが、PC再起動は未実施です)
→変更したプリンタは印刷が正常終了するPCと同じプリンタです。メモ帳のテキストなどは問題なく印刷できます。

また、Excel.Application.ActivePrinterの部分を"プリンタ名 on NeXX:"に直書き変更すると正常に印刷されました。

原因についてアドバイス頂きたく、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず対応策は

Excel.Application.ActivePrinterの部分を"プリンタ名 on NeXX:"

とか書かれている方法しかありません。(本筋としては)
というのもExcel自体にプリンタ情報としてブック(excelファイル)の中に保存されているからです。
その情報と合致しない場合プリンタが選べずエラーとなります。

プリンターの機能をプログラムで取得する
完全対応するなら上記方法でプリンタ一覧を取得して
条件あうプリンタを先の「Excel.Application.ActivePrinter」に設定するしかありません。

投稿2020/10/05 06:04

kuma_kuma_

総合スコア2506

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DreamTheater

2020/10/05 06:16

ご回答ありがとうございます。 問題のPCで新しいExcelブックを開き、印刷する際のプリンタは通常使うプリンタが表示されました。 VBA上から新しいExcelブックを開いた場合も同様かと思ったのですが、、、 紹介頂いた『プリンターの機能をプログラムで取得する』を調べてみます。
DreamTheater

2020/10/06 01:52

とりあえず利用者PCのACCESSのみActivePrinterに直値を入れて運用して頂くことにしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問