【エクセルVBAについての質問です】


クセロPDFでのPDFファイル出力時、任意のファイル名をつけたいのですが、以下のコードに補足いただけますでしょうか?

Dim objPrinter As Object
Dim Fname As Variant

FN = "C:\vba\test.pdf"

For Each objPrinter In CreateObject("Shell.Application").Namespace(4).Items
If objPrinter.Name Like "クセロPDF*" Then
End If
Next
ActiveSheet.PrintOut


よろしくお願いします。



回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2009/04/21 02:15:39
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:gatchan No.1

回答回数9ベストアンサー獲得回数1

ポイント1pt

これでよろしいでしょうか??

Sub print_out()

Dim objPrinter As Object
Dim Fname As Variant

FN = "C:\vba\test.pdf"

For Each objPrinter In CreateObject("Shell.Application").Namespace(4).Items
    'MsgBox objPrinter.Name
    If objPrinter.Name Like "クセロPDF*" Then
        'MsgBox objPrinter.Name
        With ActiveSheet.PageSetup
            .LeftHeader = ""     '左に表示
            .CenterHeader = FN '中央に表示
            .RightHeader = ""    '右に表示
        End With
        
    End If
Next
ActiveSheet.PrintOut

'以下を有効にするとヘッダー表示を初期化します
With ActiveSheet.PageSetup
    .LeftHeader = ""     '左に表示
    .CenterHeader = "" '中央に表示
    .RightHeader = ""    '右に表示
End With

End Sub

※Vista+xls2003での動作確認しました

id:pocon

あ、すみません、ファイル名をページに付加したいということではなく、PDFのファイル名を任意に指定したいという意味です。

通常では、ブック名がPDFファイル名になるかと思うのですが、それを任意にできないかと思いまして。。

2009/04/21 00:08:41
id:gatchan No.2

回答回数9ベストアンサー獲得回数1

ポイント29pt

"任意"とはどう任意なのかちょっと伝わらないですが・・・

 

↓の意味合いであれば、ただ単にユーザーが入力する「"任意"のファイル名」になるんですが。

提示してある文章ではこれ以上の解釈ができないのですが・・・><;

 

こういうことですか??

以下のコードを厳密に説明するなら、

・任意のファイル名にして

・その任意のファイル名をページのヘッダに付加する

ということになります。(最初の回答ソースを踏襲したとしての話ですが)

 

Sub print_out()

Dim objPrinter As Object
Dim Fname As Variant

FN = "C:\vba\test.pdf"
FN = InputBox("ファイル名を任意に指定します", "ファイル名指定", FN)'これで任意に変えるということ??

For Each objPrinter In CreateObject("Shell.Application").Namespace(4).Items
    'MsgBox objPrinter.Name
    If objPrinter.Name Like "クセロPDF*" Then
        'MsgBox objPrinter.Name
        With ActiveSheet.PageSetup
            .LeftHeader = ""     '左に表示
            .CenterHeader = FN '中央に表示
            .RightHeader = ""    '右に表示
        End With
        
    End If
Next
ActiveSheet.PrintOut

'以下を有効にするとヘッダー表示を初期化します
With ActiveSheet.PageSetup
    .LeftHeader = ""     '左に表示
    .CenterHeader = "" '中央に表示
    .RightHeader = ""    '右に表示
End With

End Sub

 

単にinputboxを使っただけですが、こういうことではない??

id:pocon

すみません、違います。

エクセルexample.xls任意シートのクセロでの印刷時、ファイル名を指定したいということです。

クセロはPDFwriterです。

http://xelo.jp/xelopdf/

2009/04/21 01:40:27
id:airplant No.3

回答回数220ベストアンサー獲得回数49

ポイント50pt

クセロPDFのファイル名をプロパティとして直接指定する事はできないようです。

替わりにsendkeysでファイル名指定をするという方法があります。

下記のページで、実際にうまく動いている報告がありました。

MSN相談箱 エクセルVBAでPDFを作成したいのですが


入れるとすれば、次のようなコードになるでしょう。

For Each objPrinter In CreateObject("Shell.Application").Namespace(4).Items
    If objPrinter.Name Like "クセロPDF*" Then
        ActiveSheet.PrintOut
        ' 秒数は適宜調整ください
        Application.Wait Now + TimeValue("00:00:03")
        With CreateObject("Wscript.Shell")
            .SendKeys FN
            .SendKeys "%S"
        End With
        Exit For
    End If
Next
' ActiveSheet.PrintOut
id:pocon

ありがとうございます。

XeloPDFDriver.exeとやらが、ローカル内を検索してもみつからず、msconfigでもみつからずでして。。

・・・が、解決策が見つかりました。

ようするにファイル名でpdfが作られるならファイル名に名前を入れてしまえば良いのだと、

Activesheetを任意名新規ブックにコピー→PDF作成→新規ブックclose→新規ブック削除

でできました。

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

2009/04/21 02:13:44
  • id:gatchan
    もしページフッタに付加したいなら以下のプロパティのどれかにFNをセットすればよいです。

    With ActiveSheet.PageSetup
    .LeftFooter = "" '左に表示
    .CenterFooter = "" '中央に表示
    .RightFooter = "" '右に表示
    End With

    ------------------------------------------
    WSHオブジェクトも使用されていますね。
    久しぶりに勉強になりました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません