前提・実現したいこと
こんにちは。Access VBAを用いたレポートのPDF出力について質問です。出力・保存されるPDFファイルのファイル名だけはこちらで指定して、保存先は都度保存ダイアログを開いて選択する方法を教えていただきたいです。
以下のように、何パターンかコードを書き変えて試したのですが、うまくいきませんでした。
上手くいかなかったコード
DoCmd.OutputTo acOutputReport, "R_レポート名", acFormatPDF, "C:保存先パス\保存するPDF名.pdf" ➞名前はこちらで決められるが、保存先を事前にコードで指定しなくてはならず、都度保存ダイアログを開けない。 DoCmd.OutputTo acOutputReport, "R_レポート名", acFormatPDF, "保存するPDF名.pdf" ➞名前はこちらで決められるが、勝手にPCのドキュメントに保存される。 DoCmd.OutputTo acOutputReport, "R_レポート名", acFormatPDF ➞都度保存ダイアログを開いて保存先を決められるが、ファイル名が「R_レポート名」に固定されてしまう。
以下2つの条件を満たすには、どうすればいいのでしょうか。
➀出力するPDFの名前はこちらで決められる
➁保存先は都度ダイアログを開いて決められる
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
- ファイル名はコードで指定する(ユーザーは勝手に変更できない)。
- 保存するフォルダーはユーザーに選択させたい。
ということでしょうか。
下記で紹介されているgetFolderName関数を使うといいでしょう。
AccessのVBAでファイルダイアログからフォルダを指定する方法|アズビーパートナーズ
vba
1'-------------------------------------------------------------------- 2'フォルダ選択ダイアログ 3'--------------------------------------------------------------------- 4 5Public Function getFolderName(tmpFilePath As String) As String 6 7 Dim intret As Integer 8 9 With Application.FileDialog(msoFileDialogFolderPicker) 10 11 'ダイアログのタイトルを設定 12 .Title = "フォルダ選択ダイアログ" 13 14 'デフォルトのフォルダパス 15 .InitialFileName = tmpFilePath 16 17 'ダイアログを表示 18 intret = .Show 19 If intret <> 0 Then 20 'フォルダが選択されたとき戻り値に設定 21 getFolderName = Trim(.SelectedItems.Item(1)) 22 Else 23 'フォルダが選択されなければ長さゼロの文字列を返す 24 getFolderName = "" 25 End If 26 End With 27 28End Function
上記のコードをコピーして標準モジュールに貼り付けます。
[ツール]-[参照設定]で「Microsft Office xx.x Object Library」 にチェックをいれておく。
(リンク先に画像付きで解説されます。)
上記の関数を使って下記のようなコードにすればいいでしょう。
vba
1 Dim FolderName As String 2 FolderName = getFolderName(“”) '引数に初期値のフォルダーパスを設定、""にするとドキュメントフォルダー 3 4 If FolderName = "" Then 5 MsgBox "キャンセルされました。" 6 Else 7 DoCmd.OutputTo acOutputReport, "R_レポート名", acFormatPDF, _ 8 FolderName & "\保存するPDF名.pdf" 9 End If
投稿2020/12/18 08:33
総合スコア34075
0
保存先を選択ダイアログで決定し、後は以下の処理で行えば良いかと。
VBA
1DoCmd.OutputTo acOutputReport, "R_レポート名", acFormatPDF, "C:保存先パス\保存するPDF名.pdf" 2➞名前はこちらで決められるが、保存先を事前にコードで指定しなくてはならず、都度保存ダイアログを開けない。
VBA:AccessのFileDialogを使用して[名前を付けて保存]ダイアログボックスを表示するサンプルプログラム
追記
こんな感じ。
※msoFileDialogSaveAsの場合は、フィルター出来ないのが難点ですけどね。
VBA
1Function SaveAsFileDialog() 2 With Application.FileDialog(msoFileDialogSaveAs) 3 'FileDialogオブジェクトの各種プロパティを設定 4 .Title = "別名保存" 5 .ButtonName = "保存実行" 'デフォルトは[保存(&S)] 6 .InitialFileName = CurrentProject.Path 7 '複数ファイル選択を許可しない 8 .AllowMultiSelect = False 9 10 '[名前を付けて保存]ダイアログボックスを表示する 11 If .Show Then 12 SaveAsFileDialog = .SelectedItems(1) 13 Else 14 SaveAsFileDialog = "" 15 End If 16 End With 17End Function 18Sub PDF化コード() 19 Dim FileName As String 20 FileName = SaveAsFileDialog 21 If FileName <> "" Then 22 DoCmd.OutputTo acOutputReport, "R_レポート名", acFormatPDF, FileName 23 End If 24End Sub
フォルダ選択だったようなので、自作のFunctionを提供しておきます。
VBA
1Public Function MyFileDialog(pType, pTitle, Optional pFileterTitle, Optional pFileter, Optional pPath="") As String 2 Dim wGetFileName 3 wGetFileName = "" 4 With Application.FileDialog(pType) 5 'ダイアログのタイトルを設定 6 .title = pTitle 7 If pType = 3 Then 8 'ファイルの種類を設定 9 .Filters.Clear 10 .Filters.Add pFileterTitle, pFileter 11 .FilterIndex = 1 12 '複数ファイル選択を許可しない 13 .AllowMultiSelect = False 14 End If 15 '初期パスを設定 16 If Nz(pPath) <> "" Then 17 .InitialFileName = pPath 18 Else 19 .InitialFileName = CurrentProject.path 20 End If 21 'ダイアログを表示 22 If .Show <> 0 Then 23 'ファイルが選択されたとき 24 'そのフルパスを返り値に設定 25 wGetFileName = Trim(.SelectedItems.Item(1)) 26 End If 27 End With 28 MyFileDialog = wGetFileName 29End Function 30Sub PDF化コード() 31 Dim FldName As String 32 FldName = MyFileDialog(4, "PDF保存先を選択") 33 If FldName <> "" Then 34 DoCmd.OutputTo acOutputReport, "R_レポート名", acFormatPDF, FldName & "\保存するPDF.pdf" 35 End If
投稿2020/12/18 06:22
編集2020/12/18 09:26総合スコア25327
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/18 08:50 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/18 08:48 編集
2020/12/18 08:59
2020/12/18 09:07
2021/01/10 03:31