こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBAでPDFを作成したい

エクセル2000 Windows7(管理者権限無し)
<ソフトを使うのであれば、フリーソフト>
Adobe、Acrobat 無し(Adobe Readerのみ)

以上の状況下でエクセルVBAを使って、
エクセル⇒PDF保存したいのですが、
検索の方法が悪いのか、どれかの条件で出来なくなってしまいます。

解決方法ご存知の方、ご教授いただけないでしょうか?><;

現状はCubePDFというソフトで手作業で変換しています。
(質問内容に不足部分ありましたら、補足いたします)

投稿日時 - 2013-10-24 10:08:21

QNo.8318460

すぐに回答ほしいです

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

時間が足りなかったようですね

Application.Wait (Now + TimeValue("0:00:10"))← 0:00:20 とか増やす方法もありますが
環境によって変更するようだと、不細工なので
------ここから

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
'↑プリントアウト

Do
cuHw = FindWindow(vbNullString, "CubePDF 1.0.0RC4 (x64)")
Loop While cuHw = 0
'↑CubeBDFのウインドーが開いたかどうかを確認(この段階ではまだアクティブになるまで若干間がある)

SetForegroundWindow cuHw
'↑CubeBDFのウィンドーをアクティブ化

SendKeys "{ENTER}"

------ここまで

cuHw = FindWindow(vbNullString, "CubePDF 1.0.0RC4 (x64)")←この部分は環境によって変更の必要あり

"CubePDF 1.0.0RC4 (x64)" CubuPDFのバージョンに拠って変化します
添付画像を参考にして赤枠で囲まれたウィンド名に変更して下さい


Win32 API関数
SetForegroundWindow と  FindWindow を使用していますので

標準モジュールに
-----
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Declare Function SetForegroundWindow Lib "user32" _
(ByVal hwnd As Long) As Long

-----
宣言文をおいて下さい
http://www.happy2-island.com/excelsmile/smile01/capter00400-03.shtml

投稿日時 - 2013-10-25 12:07:05

補足

ありがとうございました。

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ', IgnorePrintAreas:=False
'↑プリントアウト
の部分を

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, ActivePrinter:="CubePDF on Ne05:"
'↑ActivePrinter:="ここを変える" マクロの記録などで確認 <プリンタの設定>

に変えて使っています^^

2バイト文字のパス名の件は別で質問をあげることにします^^
助かりました!!ありがとうございます^^

投稿日時 - 2013-10-28 10:34:14

お礼

ありがとうございます!!
目からウロコとはまさにこのことです!!!!m(__)m
ありがとうございます!


探す方も多い質問のようなので、
A1セルのファイル名を取得して保存するようにしたものをつけておきます。
(不完全なのでファイル名が英数字でないといけないようですが^^;)


【全て標準モジュール】(IgnorePrintAreas:=FalseはEXCEL2000では使えないらしいです)
~↓~以下~

Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Declare Function SetForegroundWindow Lib "user32" _
(ByVal hwnd As Long) As Long

Sub WEB2525SANARIGATO()

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ', IgnorePrintAreas:=False
'↑プリントアウト

Do
cuHw = FindWindow(vbNullString, "CubePDF 1.0.0RC4 (x86)")
Loop While cuHw = 0
'↑CubeBDFのウインドーが開いたかどうかを確認(この段階ではまだアクティブになるまで若干間がある)


SetForegroundWindow cuHw
'↑CubeBDFのウィンドーをアクティブ化

Dim Fname As String
Fname = Range("A1") 'ファイル名を取得

PresentPrinter = Application.ActivePrinter
With CreateObject("Wscript.Shell") '保存先の所まで移動して名前をつける
.SendKeys "{TAB}"
.SendKeys "{TAB}"
.SendKeys "{TAB}"
.SendKeys "{TAB}"
.SendKeys "{TAB}"
.SendKeys Fname
.SendKeys "{ENTER}"
End With
Application.ActivePrinter = PresentPrinter
End Sub

投稿日時 - 2013-10-25 14:56:44

ANo.5

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

>この先、作成(保存)までいく方法ありますでしょうか?

デフォルトの状態でPDF化して構わなければ

Sheets("DEMO").PrintOut , ActivePrinter:="Cube PDF"

Application.Wait (Now + TimeValue("0:00:10")) 
'↑はCubePDFのウインドーが開ききるまでの待ち時間、数値は任意で指定

SendKeys "{ENTER}"


保存先やファイル名の変更、その他設定が必要な場合は
http://www.excel-vba.net/excel-application-006.html

こちらを参考に、変更して下さい

投稿日時 - 2013-10-24 18:09:31

補足

解答ありがとうございます^^

試してみたのですが、
Enterが CubePDF 上で押されておらず、
エクセル上でおされる形となり、
エクセルの選択セルが一つずれるだけになってしまいます^^;

CubePDFがアクティブになっていないんだとは思うのですが。。。やり方が><;
わかりますでしょうか?

投稿日時 - 2013-10-25 09:07:47

お礼

”いけましたー”とお礼を入れたかったのですが
AppActivateなど色々試しては みたものの
CubePDFを選択させる方法がわかりませんでした^^;

選択する方法をお教えいただけないでしょうか?
~~~
必要かどうかわかりませんが、
cubepdf.exe の場所は
C:\Program Files\CubePDF\cubepdf.exe
です。

投稿日時 - 2013-10-25 10:55:38

ANo.3

管理者権限無しであれば新たなソフトのインストールは無理でしょう

>CubePDFというソフトで手作業で変換しています

CubeがインストールされているのであればCubePDFの仮想プリンターもインストールされていると思われます
ファイル⇒印刷 で使用するプリンターをCubePDFを選択すればPDFファイルが出力されるはずです

http://www.kananet.com/freesoft-cube-pdf/freesoft-cube-pdf.htm#excel-henkan

投稿日時 - 2013-10-24 13:13:09

お礼

解答ありがとうございます^^

Sheets("DEMO").PrintOut , ActivePrinter:="Cube PDF"

↑これで試してみたのですが、Cube PDFが起動するだけで、作成(保存)まで進んでくれないのです。。。

この先、作成(保存)までいく方法ありますでしょうか?><;

投稿日時 - 2013-10-24 13:31:55

ANo.2

追記。

http://freesoft-100.com/pasokon/pdf_maker.html

に「印刷すればPDFファイルが出来る」と言うフリーソフトがいっぱいあります。

エクセルやワードで「印刷するだけ」でPDFファイルが出来上がるので便利ですよ。

Adobeにも「印刷するとPDFになる」ってのがありますが、買うと高いです。

PDFにするのは「印刷すればよいだけ」なんで、エクセルVBAででも簡単に実行出来ます(ブックを印刷するマクロをVBAで書くだけ)

投稿日時 - 2013-10-24 11:11:07

補足

何度もありがとうございます!
XPの時はPrimo使えたんですが><;

管理者権限が厳しいですね^^;
Primoは確かVBAでPDF化まで出来てた記憶があるんですけどね。。。
7は非対応で(T T)

投稿日時 - 2013-10-24 13:38:00

ANo.1

http://www.sourcenext.com/product/pdf/home/
の「無料体験版」を使うと、エクセルのファイルを一発でPDFファイルに出来ます。

投稿日時 - 2013-10-24 10:56:03

お礼

早い解答ありがとうございます^^

早速試してみたのですが、

"アクセス権が不十分なためこのマシンのすべてのユーザーが使用できるように
アプリケーションをインストールすることはできません。
管理者としてログインし、再度インストールしてください。

ということで、インストールが途中で止まってしまいます^^;

会社のPCのため管理者としてはログインできないので、
この方法では、できないという結論にしました><すみません。。。

投稿日時 - 2013-10-24 11:55:05