[[20200131104452]] 『保存場所を指定して保存するマクロを教えてくださ』(yomogi) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『保存場所を指定して保存するマクロを教えてください』(yomogi)

いつもご指導有難うございます。
マクロ学習中の初心者です。
先日、こちらの掲示板で、作成したエクセルファイルを「日時」「指定セル」をファイル名にしてPDF保存するマクロを教えていただきました。

しかし、現状ではマクロが保存されているフォルダにPDFが作成されてしまうため、
宛先(指定セルです)毎に別のフォルダにPDFファイルを移動させなければならない
状態になっています。

そこで、PDFを保存場所を指定して保存([名前を付けて保存]ダイアログボックス?)
するようにしたいのですが、全く歯が立ちません。

どうか、ご指導を宜しくお願い申し上げます。

教えていただいた現在のマクロは以下の通りです

=============================================================
Private Sub PDF保存_Click()
Dim 保存パス As String, tmp As String

        With ActiveSheet
            保存パス = ThisWorkbook.Path & "\" & Format(Now, "yyyymmdd_hhmmss") & "見積書#" & .Range("I6").Value
            .ExportAsFixedFormat Type:=xlTypePDF, Filename:=保存パス
        End With
End Sub

=============================================================

(yomogi)

< 使用 Excel:Excel2013、使用 OS:Windows10 >


 こんにちは〜 ^^
https://excel-ubara.com/excelvba1/EXCELVBA375.html
こちらがすごく参考になるかと思いますです。
でわでわ、頑張ってくださいね。m(_ _)m

(隠居じーさん) 2020/01/31(金) 11:21


マクロ学習中なのであれば、失敗したコードとどうなったかを提示してください。
作成依頼なのであれば、私は非対応なので、他の回答者さんをお待ちください
(tkit) 2020/01/31(金) 11:24

 追伸。。。 ^^
http://officetanaka.net/excel/vba/tips/tips39.htm
フォルダだけの問題ならこちらのほうも参考になるかも
しれません。でわでわ。m(_ _)m
(隠居じーさん) 2020/01/31(金) 11:30

なんか見覚えあるなとおもったら、↓からの続きですね。
 [[20200128103816]] 『PDF作成時に日付と保存された時刻を入力したいのです』(yomogi)

■1
>PDFを保存場所を指定して保存([名前を付けて保存]ダイアログボックス?)するようにしたいのですが、全く歯が立ちません。
どんなことをチャレンジしましたか?自分で考えたくないので聞きましたってのは無しですよ。

■2
>宛先(指定セルです)毎に別のフォルダ
↑だけみると、

 宛先シート
   ___A_____
 1   A社
 2   B社
 3   C社

ってなってたら、

 保存パス = "D:\出力先\" Worksheets("宛先シート").Cells(1,"A").Value & "\" & Format(Now, "yyyymmdd_hhmmss") & "見積書#" & .Range("I6").Value

みたいにすればA社フォルダに出力できるし、「.Cells(2,"A").Value」みたいにすればB社フォルダに保存されますよね?
この発想で、いっぺんに複数の宛先フォルダに出力したいなら行番号が変わっていくループ処理を組めばよいとおもいます。

■3
そうではなくて、処理する毎にフォルダを指定したいなら、隠居じーさんさんが「2020/01/31(金) 11:30」に仰ってるとおりの方法になると思います。

(もこな2) 2020/01/31(金) 12:17


現状のコードでは、固定されたパスに保存されるのは理解されていると思います。
ですので、変数の保存パスに任意に可変するフルパスを代入する必要があります。

例えば、
1.ダイアログで選択したフォルダのパスを取得
2.取得したパスとファイル名を結合
3.結合したフルパスを変数の保存パスに代入
といった形で、ある程度細分化したフローを
頭の中でも書き出してもいいので考えてから、
コードを記述していく方がいいと思います。

既に核心のアドバイスがされているようなので、私はこの辺で。
(tkit) 2020/01/31(金) 13:44


みなさま
いろいろとご指摘いただきありがとうございます。
もう一度、いただいたことを参考にチャレンジしてみます。
(また質問させていただくかもしれませんが・・・)
引続き、よろしくお願いいたします。
(yomogi) 2020/01/31(金) 16:42

ご無沙汰しております。
いろいろ聞きまくって出た結果が以下です。
操作は問題ないようですが、他にも何かよい方法がありますか?
勉強したいので、色々教えてください。

=====================================
Private Sub PDF保存_Click()

 Dim 保存パス As String, tmp As String
 Dim 保存フォルダー As String
 With Application.FileDialog(msoFileDialogFolderPicker)
 If .Show = True Then 保存フォルダー = .SelectedItems(1)
 End With
 With ActiveSheet
保存パス = 保存フォルダー & "\" & Format(Now, "yyyymmdd_hhmmss") & "見積書#" & .Range("I6").Value
 .ExportAsFixedFormat Type:=xlTypePDF, Filename:=保存パス
End With
 End Sub
=====================================
よろしくお願いします。
(yomogi) 2020/02/05(水) 12:47

フォルダ選択の方を使ったのですね。 もうひとつの、ファイル選択を使った例なぞ。 こっちだと、ファイル名の変更ができます。 変えさせたくないなら、フォルダ選択案です。
 Sub test()
    Const 保存フォルダー = "c:\tmp\"
    Dim 保存パス As String

    With ActiveSheet
        保存パス = Application.GetSaveAsFilename(保存フォルダー & Format(Now, "yyyymmdd_hhmmss") & "見積書#" & .Range("I6").Value & ".pdf", "PDFファイル,*.pdf")
        If 保存パス = "False" Then Exit Sub
        .ExportAsFixedFormat Type:=xlTypePDF, Filename:=保存パス
    End With
 End Sub

(???) 2020/02/05(水) 13:17


 ダイアログでキャンセル等のエラー回避が無いですね。
 私でしたら以下のようにしています。

 If .Show = False Then Exit Sub
 保存フォルダー = .SelectedItems(1)
(tkit) 2020/02/06(木) 10:28

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.