いつもお世話になっております。
現在、AccessVBAを使用して、簡単なレポートを、PDFとして出力するプログラムを立てているのですが、レポート出力をループで回して、VBAよりPDFファイルを自動的に保存したいのですが・・・。
'(テーブル情報のIDが1の情報のみ、PDFで出力)
DoCmd.OpenReport "レポート名", acNormal, , "ID=1"
以上のロジックを、実行すると、「ファイルの保存先ダイアログ」が勝手に開きます・・。
プリンタの設定は事前にAcrobatに設定してあるので、PDF化は容易に出来るのですが、上記のロジックを実際には(IDの数だけ)ループで回しているので、毎回「名前を付けて保存」ダイアログが開くのがとても煩わしいです(:_;)。
VBA上で、保存先を指定して、「名前を付けて保存」ダイアログが開かないようにする方法はないでしょうか?
今日一日調べても有力な手がかりが無かったので、どなたかご教授下さい。
No.2ベストアンサー
- 回答日時:
> 開発環境はAccess2000なのですが、PrinterオブジェクトはAccess2002~
> 実装されているオブジェクトのようです。
その通りです。Access2000 ですか...
ほぼ同程度の情報取得関数を自前で用意するしかなさそうですね。
WMI を使ってます。それと MyDocument のパス取得に手抜きで WSH を
使ってますのでご注意を。
2つの関数+使い方サンプルです。
WinXP + Access2002 VBA で動作確認しましたが、多分 Excel や Word VBA
でも動きます。もちろん 多分 Access2000 でも。
自分の限られた環境でしかテストしてないので、できれば動作報告して
いただけると助かります。
Option Explicit
' プリンタ情報を保持する構造体
Public Type PRINTER_STRUCT
PrinterName As String ' プリンタ名
PortName As String ' ポート名
DriverName As String ' ドライバー名
DefaultPrinter As Boolean ' 通常使うプリンタか?
End Type
' // プリンタを列挙する(WMI版)
Public Function EnumPrinters(ByRef uPrinter() As PRINTER_STRUCT) As Long
' 引 数: uPrinter PRINTER_STRUCT ここにプリンタ情報が返る
' 戻り値: Long 成功時/インストールされたプリンタ数 失敗時: -1
Dim Printers As Object
Dim Prt As Object
Dim lPrtCount As Long
Dim i As Long
Set Printers = CreateObject("WbemScripting.SWbemLocator").ConnectServer _
.ExecQuery("Select * From Win32_Printer")
lPrtCount = Printers.Count
ReDim uPrinter(lPrtCount - 1)
i = 0
For Each Prt In Printers
With uPrinter(i)
.PrinterName = Prt.Caption
.PortName = Prt.PortName
.DriverName = Prt.DriverName
.DefaultPrinter = CBool(Prt.Default)
End With
i = i + 1
Next Prt
If lPrtCount > 0 Then EnumPrinters = lPrtCount
Set Printers = Nothing
Exit Function
ERROR_HANDLER:
EnumPrinters = -1
End Function
' // PDF プリンタのポート名からデフォルトの保存先パスを取得
Public Function GetPDFSavePath() As String
' 戻り値: 成功時/PDF プリンタの保存先パス 失敗時/""(長さ0の文字列)
' 注 意: 戻り値の終端に¥(パスセパレータ)があるかどうか要チェック
Dim uPrinter() As PRINTER_STRUCT
Dim lRet As Long
Dim lCnt As Long
Dim sTmp As String
Dim i As Long
GetPDFSavePath = ""
lRet = EnumPrinters(uPrinter)
If lRet > 0 Then
lCnt = UBound(uPrinter)
For i = 0 To lCnt
' ドライバー名で PDF プリンタか判定
If UCase$(uPrinter(i).DriverName) Like "*PDF*" Then
sTmp = uPrinter(i).PortName
If UCase$(sTmp) Like "MYDOCUMENT*" Then
sTmp = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
Else
sTmp = Left$(sTmp, InStr(sTmp, "*.pdf") - 1)
End If
GetPDFSavePath = sTmp
Exit For
End If
Next i
End If
Erase uPrinter
End Function
Sub 使い方()
' EnumPrinters 関数
Dim uPrinter() As PRINTER_STRUCT '<-- 構造体を配列で渡す
Dim lRet As Long
Dim i As Long
lRet = EnumPrinters(uPrinter)
Debug.Print "Installed Printer Device: " & CStr(lRet)
For i = 0 To lRet - 1
Debug.Print "----------------------------------------------------------"
Debug.Print " Name : " & uPrinter(i).PrinterName
Debug.Print " Port : " & uPrinter(i).PortName
Debug.Print " Driver : " & uPrinter(i).DriverName
Debug.Print " Default: " & CStr(uPrinter(i).DefaultPrinter)
Next i
Erase uPrinter
Debug.Print "----------------------------------------------------------"
' GetPDFSavePath 関数
Dim sPath As String
sPath = GetPDFSavePath()
If sPath = "" Then
Debug.Print "PDF プリンタ発見できず...orz"
Else
Debug.Print "PDF Printer Save Dir Path"
Debug.Print " " & sPath
End If
End Sub
No.3
- 回答日時:
ミス訂正。
My Document のスペース忘れてました。× If UCase$(sTmp) Like "MYDOCUMENT*" Then
○ If UCase$(sTmp) Like "*MY DOCUMENT*" Then
KenKen_SPさん!!
わざわざ参考ソースまで載せて頂き、本当にありがとうございました!
KenKen_SPさんのソースを参考にさせて頂き、組み込んだ結果、万事うまくいきました(^^)!
本当に助かりました!
ありがとうございました!!
No.2も重ねて、お礼申し上げあげます。
本当に助かりました!
No.1
- 回答日時:
こんにちは。
> VBA上で、保存先を指定して、「名前を付けて保存」ダイアログが開か
> ないようにする方法はないでしょうか?
印刷設定で Adobe PDF 設定-「PDF ファイルの保存先を確認」のチェックを
解除することで、ダイアログが表示されなくなります。この時、ファイルが
保存されるのは印刷ポートで指定したフォルダです。
保存先フォルダは Printer オブジェクトで調べられるかな?
プリンタ名の「 ~ On ポート名」とかから...確認してませんが。
VBA で保存先を指定となると...アイディアですが、印刷キューを送信した
後、そのフォルダにファイルがあるか Dir 関数などで監視しながら待機して
ファイルが出来上がったら移動するとか?
# 確実な方法なら ACROBAT SDK のドキュメントを読むしかないかなと思い
# ます。英語版しかありませんが...
PDFWriter なら、レジストリか INI ファイルに上記のような設定があるの
ではないかと思いますが、これは推測でしかありません。レジストリエディ
ターで HKEY_CURRENT_USER\SOFTWARE\ADOBE 辺りを調べてみて下さい。
INI なら Windows フォルダ内か、Program Files フォルダ辺りでしょう。
それらしい INI がないか確認してみて下さい。
# 私の環境には、PDFWriter がインストールされてませんので確認できません。
KenKen_SPさん!細かい説明真にありがとうございます!
>印刷設定で Adobe PDF 設定-「PDF ファイルの保存先を確認」のチェック>を解除することで、ダイアログが表示されなくなります。この時、ファイル>が保存されるのは印刷ポートで指定したフォルダです。
なるほど!Adobe Acrobatの方で、事前に設定しておくということですね!
>保存先フォルダは Printer オブジェクトで調べられるかな?
>プリンタ名の「 ~ On ポート名」とかから...確認してませんが。
そうなんです!Printerオブジェクトなんですが、今色々と調べてはいるのですが、開発環境はAccess2000なのですが、PrinterオブジェクトはAccess2002~実装されているオブジェクトのようです。(私が調べた結果が勘違いしているかもしれませんが・・・)
>INI なら Windows フォルダ内か、Program Files フォルダ辺りでしょう。それらしい INI がないか確認してみて下さい。
こちらももう一度調べてみますね!
また何か解りましたら、情報よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PDF エクセルのVBAでファイルをpdfで保存するとソフトによっては開けなくなる 3 2022/06/08 10:20
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
- Excel(エクセル) PDFファイルに日付を名前にして保存したい。 エクセル2019でワークシートに請求書のフォームを作り 2 2023/05/27 11:13
- PDF EXCEL ページを指定してPDF出力するVBAを教えてください。 2 2023/02/09 10:27
- Excel(エクセル) 【VBA】PDF出力に任意のファイル名前を付ける方法 3 2023/07/21 10:55
- PDF AutoCAD図面をPDF fileに変換した際、画像情報やブロック名はわかるのでしょうか。 1 2022/06/03 09:42
- PDF ワードで作った文書のPDF化 5 2023/04/10 16:56
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- PDF PDF印刷後に「変更を保存しますか?」と訊かれる 2 2023/04/28 17:35
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
ACCESSレポートをPDFに出力したい
その他(OS)
-
AccessでPDFを複数ファイルにして出力
Visual Basic(VBA)
-
Access2007でページ毎にPDFを出力したい
その他(Microsoft Office)
-
-
4
Access2013でレポートを名前を付けて一括PDF化する方法
その他(データベース)
-
5
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
6
印刷ダイアログを表示させたくない
Visual Basic(VBA)
-
7
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
8
accessのレポートであとから他のテーブルのフィールドを追加する方法
Access(アクセス)
-
9
Acccess レポートをグループ別に出力する
Visual Basic(VBA)
-
10
accessでクエリをExcelにエクスポートする時にファイル名に日付を追加したい
Access(アクセス)
-
11
Access VBA を利用して、フォルダ内のファイルの名称を変更したい
Access(アクセス)
-
12
ACCESSでデータ読み取り専用を解除する方法
その他(データベース)
-
13
AccessのレポートからPDFをページ毎に作成
Access(アクセス)
-
14
Accessのレポート上のテキストボックス値を設定したい
その他(データベース)
-
15
Accessのフォームのみ表示させたい
Access(アクセス)
-
16
Accessフォーム全レコードをPDFで個別保存
その他(データベース)
-
17
プリンターを指定して印刷するには
Visual Basic(VBA)
-
18
Accessでレコードを別テーブルへコピーするには
Access(アクセス)
-
19
帳票フォームでのあるコンボボックスに連動するコンボボックスの作成について
その他(データベース)
-
20
アクセスのレポートに、フォームで算出した数字を表示させたい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Corel Digital Studioの動画をS...
-
コマンドプロンプトでデスクト...
-
webページの特定の部分だけ消し...
-
読み取り専用ファイルを上書き...
-
Excel VBAで作成したマクロをxl...
-
VBAで、強制保存してブックを閉...
-
vb.net webからダウンロードで...
-
EXCEL VBAでカンマ区切りCSVフ...
-
【Excel VBA】自動的にバックア...
-
irvineを利用してVBAからダウン...
-
Excel VBAでほかのアプリケーシ...
-
htmlから取り込んだ を消...
-
MATLABのtxtファイル等の読み込...
-
VBScriptでのSaveAsについて
-
印刷と保存の仕方をVBAマクロの...
-
パワーポイントの自動再生はで...
-
VBA メモ帳の上書き保存がしたい
-
ExcelVBAでデスクトップのPATH...
-
html 保存できない
-
onedriveで同期解除をしたら、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
読み取り専用ファイルを上書き...
-
Excel VBAでほかのアプリケーシ...
-
VBAで、強制保存してブックを閉...
-
Excel VBAで作成したマクロをxl...
-
Corel Digital Studioの動画をS...
-
エクセルで「名前を付けて保存...
-
VBA メモ帳の上書き保存がしたい
-
コマンドプロンプトでデスクト...
-
vbaでIEの名前を付けて保存(A)...
-
VB.NETでEXCELファイルを開き、...
-
VBScriptでのSaveAsについて
-
エクセル:マクロ:保存時に連...
-
Pivot table で集計されたデー...
-
AccessVBAでレポートをPDFで出力
-
VBScriptで日本語が変です
-
ExcelVBAでデスクトップのPATH...
-
htmlから取り込んだ を消...
-
EXCEL/VBA:WORDファイルの上書...
-
AccessVBAでIEを操作、ページ内...
-
webページの特定の部分だけ消し...
おすすめ情報