• ベストアンサー

Excel VBA プリンタ指定

Excel2000のVBAで、あるシート(aaa)の内容を [ボタンA]では通常使用するプリンタに印刷 下記のコードでうまく動きました If Worksheets("aaa").PrintOut = False Then GoTo DAME End If [ボタンB]では通常使用するプリンタでない ソースネクストの"いきなりPDF PRO2"(インストール済)を使用して c:\配下にPDFファイルを出力したいのですが、どのようなコードを 記述すれば良いのでしょうか? os:xp pro です。

質問者が選んだベストアンサー

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

 先ず、 http://blog.ddc.co.jp/mt/dtp/archives/20080312/102000.html をご参考に、[いきなりPDF Professional 2 設定] ダイアログ - [一般] タブ - [同盟のファイルがある場合、上書きする(N)] に チェック を付けてください。 >c:\配下にPDFファイルを出力したい とのことですが、[保存先フォルダ]・[ファイル名] の指定はご勘弁ください。  随分と探し回ったのですが、私には難しそうです。  というか、[いきなりPDF Professional 2] の設定の方に、デフォルト の出力先とかはありませんかね?  それと、ファイル名は Excel の ブック が「book1.xls」とすると、PDF に出力したものは自然に「book1.pdf」になるようになっていないでしょうか?  上記のようなことでしたら、出力前に、当該ブック を [保存先フォルダ] & "\" & [ファイル名] & ".xls" で保存してから PDF に出力すればよいかと存じます。  PC の環境にもよりますが、PDF に出力してから [名前を付けて保存] ダイアログ が表示されるまで、時間がかかるようですので、 Application.Wait (Now + TimeValue("0:00:05")) として、5秒休ませるようにしております。  お試しになって、時間の調整をなさってください。 Option Explicit Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _  (ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, _  ByVal lParam As Long) As Long Private Const WM_COMMAND As Long = &H111 Private Const IDOK As Long = &H1 Sub ck()  Dim default_printer As String  Dim hWnd As Long  Dim Ret As Long  default_printer = Application.ActivePrinter  Application.ActivePrinter = "~~~~"  Worksheets("aaa").PrintOut  Application.ActivePrinter = default_printer  Application.Wait (Now + TimeValue("0:00:05"))  hWnd = FindWindow(vbNullString, "名前を付けて保存")  Ret = PostMessage(hWnd, WM_COMMAND, IDOK, 0&) End Sub

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

Dim default_printer As String default_printer = Application.ActivePrinter Application.ActivePrinter = "~~~~" Worksheets("aaa").PrintOut Application.ActivePrinter = default_printer 「~~~~」のところは、 [新しいマクロの記録(R)...] で、 1)[印刷ダイアログ] を開き 2)[プリンタ] セクション - [名前(M):] に「いきなりPDF PRO2」を指定すると 3)[キャンセル] ボタン が [閉じる] ボタン に変わりますので、 4)その [閉じる] ボタン を クリック。 するところまでを記録してみると、 Application.ActivePrinter = "~~~~" というような コード が得られますので、それをそのまま、上記の コード に挿入してください。

rei230
質問者

お礼

早々にご返事いただきありがとうございます。 うまく動きました。 もし、よろしければもう1つ質問があります。 PDFに出力する際、出力先が固定なので保存のダイヤログを表示 しない方法はありますか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ExcelのVBAでGoToの代わりに…

    お世話になっています よく、gotoは悪名高いとか、使わないほうが良いとか言われていますが、何故なのでしょう?? 使わないようにしようと思っても、別の方法がわからず使ってしまっています。 例えば、「aaa」というシートがあるかどうか調べ、なければ作成するとした場合、 Dim myWS As Object For Each myWS In Worksheets If myWS.Name = "aaa" Then GoTo 1 Next Worksheets.Add ActiveSheet.Name = "aaa" 1 次の処理 というように書いていますが、これをgotoを使わないで…となるとどのように書いたら良いのでしょうか?

  • 作成したVBAの改善点をお願いします(初心者)。

    こんばんは。VBAを勉強中ですが、参考書等を見ながら簡単なプログラムを作ってみましたが、もっと簡単な記述やベテランの方から見た改善点等があれば教えていただければと思います。(EXCEL2000を使用しています)。 ★内容 ・inputboxを使用し印刷枚数を入力し、印刷するものです(印刷枚数は1枚以上31枚以下)。 ・(K23)のセルには通し番号が入っており、印刷した枚数分だけ通し番号に1ずつ足していく。 Sub 印刷() Dim aaa As Integer aaa = InputBox("印刷枚数を入力してください", "印刷枚数", "") If 1 <= aaa And aaa <= 31 Then MsgBox "印刷を開始します" ElseIf aaa = "" Then MsgBox "キャンセルされました" ElseIf IsNumeric(aaa) = False Then MsgBox "入力内容が違います" ElseIf aaa <= 31 Then MsgBox "31日までの範囲で入力してください" Else For i = 0 To aaa Worksheets(1).PrintOut Worksheets(1).Range("k23").Value = Range("k23") + 1 Next i End If End Sub 一応、動きますが、勉強中なのでご教授をお願いいたします。

  • エクセルのマクロでのプリンタ自動切替について

    エクセルのマクロ初心者ですが、ご教示いただければ幸いです。 業務で日々使用する様式をボタン一つで印刷できるよう、マクロを作成中です。 エクセルのファイルは共有ファイルサーバーに保存していて、各端末(例:WS0001、WS0002、WS0003…)から印刷したいと考えています。 各端末の「通常使うプリンタ」はPR0001なのですが、この様式はWS0001のUSBポートに繋がったPR0002から出力する必要があります。 WS0001とWS0002他から見た場合にプリンタのパスが異なるため、現状では ActiveSheet.PrintOut ActivePrinter:="pr0002" ActiveSheet.PrintOut ActivePrinter:="\\Ws0001\pr0002" と2つのマクロを別々のボタンに割り当てていますが、ボタンを押し間違えることがあり、何とか1つのマクロにできないかと考えています。 例えば「"pr0002"が無い場合は"\\Ws0001\pr0002"から出力しなさい」といような記述は可能でしょうか? On Error でできるのかと考え、 On Error GoTo 0 ActiveSheet.PrintOut ActivePrinter:="pr0002" On Error GoTo 0 ActiveSheet.PrintOut ActivePrinter:="\\Ws0001\pr0002" あるいは On Error GoTo 0 ActiveSheet.PrintOut ActivePrinter:="pr0002" ActiveSheet.PrintOut ActivePrinter:="\\Ws0001\pr0002" と記述してみましたが、何故かPR0001とPR0002と2枚出力されて、上手くいきません。 ネットワーク上のプリンタ出力先の記述は、 Application.ActivePrinter = "\\Ws0001\pr0002 on NeXX:" ExecuteExcel4Macro _ "PRINT(1,,,1,,,,,,,,2,"""\\Ws0001\pr0002 on NeXX:"",,TRUE,,FALSE)" と記述した方が確実なようですが、端末によってXXの数字が異なるようで、エラーになることがあります。 何卒よろしくお願いいたします。

  • EXCEL VBAでプリンタの設定方法について

    EXCEL VBAのプリンタの設定方法について質問があります。 Dim oApp As Object Dim WFM As Strin WFM = "\\Cl111\フォルダ\ファイル\" &Range("C3").Value & ".doc" Set oApp = CreateObject("Word.Application")  ’ワード起動 oApp.Visible = True oApp.Documents.Open WFM  ’文書を開く Application.ActivePrinter = "AAA on Ne00:"  ’プリンタ設定 oApp.activedocument.PrintOut Copies:=1, Background:=False  ’印刷 oApp.Quit SaveChanges:=False  ’ワード終了 Set oApp = Nothing このようなコードで、(1)ワードを開き、(2)プリンタを設定し、(3)印刷をする、という作業をしたいのですが、 Application.ActivePrinter = "AAA on Ne00:" ではプリンタの設定が変わらず、通常使うプリンターで印刷がされてしまいます。 ワードを開いて印刷することで何か特殊なコードが必要なのではないかと思うのですが、調べても該当するものが出てきませんでした。 どうぞよろしくお願いいたします。

  • プリンターを指定して印刷するには

    アクセスです。 フォームのコマンドボタンをクリックしてレポートを開きます。 VBAコードは Private Sub コマンド0_Click() DoCmd.OpenReport "レポート1" End Sub です。 レポートが開いたら、自動で印刷されますが、 それは、通常使うプリンタに設定しているプリンタで印刷されてしまいます。 そうではなく、 Bullzip PDF PrinterでPDF化させたいのですが、 レポートのイベントで、 Private Sub Report_Open(Cancel As Integer) End Sub で、プリンタを指定することは可能でしょうか? 通常使うプリンタは Bullzip PDF Printerにはしたくないのです。 わがまま言ってごめんなさい。

  • エクセルで色付けのVBAを作成してるのですが・・。

    エクセルでレンジ値の大きさにより色付けをする(下の条件)VBAを作りたいのですが うまく走りません。お手数とは思いますがご教授お願いします。 シート "aaa" のレンジ "A3<A2<A1" とだんだん大きくなれば、 シート "bbb" のレンジ "B1" の文字を黄色にして、シート "bbb" のレンジ "C1" の文字を赤色へ シート "aaa" のレンジ "A3<A2<A1" とだんだん大きくなれば、 シート "bbb" のレンジ "B1" の文字を緑色にして、シート "bbb" のレンジ "C1" の文字を赤色へ シート "aaa" のレンジ "A3,A1" が空白の場合、シート "bbb" のレンジ "C1" の文字を赤色へ シート "aaa" のレンジ "A3,A2,A1" が上の条件に合わなければ、 シート "bbb" のレンジ "B1" の文字を黒色にし、シート "bbb" のレンジ "C1" の文字を赤色にして終わる。 というようなプログラムで下記のように作りました。 ("A1,A2,A3"に入る値は50~100まで) ----------------------------------------------- Sub 注意() Dim v506Hi, v506Lo, v506a, v506b As Single v506a = Worksheets("aaa").Range("A3") v506b = Worksheets("aaa").Range("A1") If Worksheets("aaa").Range("A3") <> "" Then GoTo Sub1 ElseIf Worksheets("aaa").Range("A1") <> "" Then GoTo Sub1 Else Worksheets("bbb").Range("B1").Font.Color = RGB(0, 0, 0) GoTo sub2 Sub1: Select Case v506a Case Is < Worksheets("aaa").Range("A2") v506Hi = Worksheets("aaa").Range("A2") v506Lo = 0 Case Is > Worksheets("aaa").Range("A2") v506Lo = Worksheets("aaa").Range("A2") v506Hi = 500 Case Is = Worksheets("aaa").Range("A2") v506Hi = 500 v506Lo = 0 End Select Select Case v506b Case Is > v506Hi Worksheets("bbb").Range("b1").Font.Color = RGB(255, 255, 0)黄色 Case Is < v506Lo Worksheets("bbb").Range("b1").Font.Color = RGB(0, 255, 0)緑 Case Else Worksheets("bbb").Range("b1").Font.Color = RGB(0, 0, 0) End Select sub2: Worksheets("bbb").Range("c1").Font.Color = RGB(255, 0, 0)赤 End If End Sub ----------------------------------------------------------- プログラム初心者で間違いだらけとは思いますが、よろしくお願いいたします。

  • エクセル2010のVBAでPDFを開きたい

    エクセルのワークシートSheet2にPDFのファイルを挿入しました。アイコン表示になっています。 Sheet1にあるボタンでこのPDFを開こうと思い、見よう見まねで Sub TEST() Worksheets("Sheet2").OLEObjects(1).Verb Verb:=xlPrimary End Sub としたところ、PDFは開くことはひらくのですがアクティブになってくれません。 Worksheets("Sheet2").OLEObjects(1).Activate に変えてもおなじです。 PDFではなくワード文書を張り付けた時には上記のコードでアクティブになってくれたのですが。 どうすればPDFをアクティブに、表に見えるようにできるでしょうか?

  • VBAでプリンタを変えたい。

    こんにちは。 WindowsXPでOffice2003を使用しています。 ちょっと困っているので、わかる方は知恵をお貸しください。 EXCEL VBAを使用し、プリントアウト等色々使っています。 当初は、印刷の時 「Application.ActivePrinter = "(プリンタ名) on NeXX:"」 としていたのですが、不都合があり「Printout」メソッドを 使うようにしました。 問題は、ここからです。 このあと、ポート名(on NeXX:)を使わずに、通常使うプリンタ に戻す(印刷はしたくない)には、どのようにすれば良いのでしょうか。 わかりづらい質問で申し訳ございませんが、 よろしくお願いいたします。

  • Excel VBAの不思議な現象について

    Excel2003を使用しています。 下記にあるコードを実行すると稀に(50回に1回くらいの割合?)、違った動作が走ります。 この原因はなんでしょうか?また、解決策としてはコードをどのように修正したら良いでしょうか?? 【状況】 ・コードを記述しているブック…MENU.xls ・MENU.xlsにあるシート…「メニュー」「AAA」「BBB」「その他」 ※順番もこの通りです 【やりたい動作】 「メニュー」シートのセルの値をコピーして、「AAA」と「BBB」に貼り付ける。 「AAA」と「BBB」を新規ブックへコピーする。 新規ブックにさらに「あああ」と「いいい」というシートを追加する。 新規ブックを確定版.xlsという名前で保存する。 【コード】 ThisWorkbook.Worksheets("メニュー").Range("C1").Copy Worksheets(Array("AAA", "BBB")).Select Range("D9").PasteSpecial Paste:=xlPasteValues ActiveWindow.SelectedSheets.Copy Application.DisplayAlerts = False With ActiveWorkbook .Worksheets.Add(After:=Worksheets(Worksheets.Count)) _ .Name = "あああ" .Worksheets.Add(After:=Worksheets(Worksheets.Count)) _ .Name = "いいい" .SaveAs Filename:=ThisWorkbook.Path & "\" & "確定版.xls" End With Application.DisplayAlerts = True 【不思議な現象】 いつもは、このマクロを実行してエラーも出ず、思った通りの動作で終了します。 ですが、時々、    「AAA」と「BBB」を新規ブックへコピーする。 以降から動作がおかしくなります。 具体的には、 新規ブックに「あああ」と「いいい」が追加されず、MENU.xlsに「あああ」と「いいい」が追加されて、MENU.xlsが「確定版.xls」として保存されてしますのです。 (つまり、ActiveworkbookをMENUであると認識されてしまうようです。) そのため「AAA」と「BBB」を追加した新規ブックは「Book1.xls」として宙ぶらりんの状態です。 この原因は何でしょうか? 途中でエラーが出て止まってくれれば良いのですが、間違ったまま最後まで処理が行われてしまうので困っています。 しかも本当にごく稀にこの現象が起こるのです。 もしお分かりになる方がいらっしゃいましたら教えて下さい。 宜しくお願いします。

  • エクセルマクロ印刷時にプリンタを指定できますか?

    エクセル2002を使用しています。VBAはまったくわかりません。 マクロの自動登録で印刷を記録すると、通常使うプリンタから 出力されるようですが、LANでプリンタ複数使用可能な環境です ので、いちいち通常使うプリンタを変更するのではなく、マクロ 実行時にプリンタを選択したく思います。  因みに、以下のマクロはSheet1に値を入力し、Sheet1の値をコピー したSheet2を印刷するというマクロです。このマクロのどの部分に コードを付け加えればプリンタをこのマクロ実行時に選択可能でしょうか? もしくはマクロではプリンタを選択できないのでしょうか? どうぞよろしくお願いいたします。 ****************************************************************** Sub 印刷() Sheets("Sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("Sheet1").Select End Sub *******************************************************************