『別ブックの特定シートをPDF化指定フォルダへ今年度の名前で保存。無ければ作成しその中へ保存。』(taro)
vbaで別ブックの特定シートをPDF化し、指定フォルダの中にあるフォルダの中に、無い時は作成してその年の名前で保存させたいと思っています。
アクティブシートを指定フォルダへ保存はできるのですが、無い時は作成してその中へ保存と別ブックの特定シートの指定ができずにいます。
Sub PDF出力1() ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ FileName:="C:\Users\dai1t\OneDrive\デスクトップ\1会計" & "\" & Format(Now, "予算案") & ".pdf" End Sub
Sub Example()
Dim folder As String
folder = "C:\Users\dai1t\OneDrive\デスクトップ\会計" & "\" & Format(Date, "ge")
If Dir(folder, vbDirectory) = "" Then
MkDir folder
End If
End Sub
アクティブシートを指定フォルダへ保存と、今年度のフォルダが無い時は作成はそれぞれできましたので、これらを組み合わせたらできるかと思い色々試しましたができずにいます。
さらに別ブックの特定シートをPDF化できたらと思いますが、ご教授願えないでしょうか。
< 使用 Excel:Excel2021、使用 OS:Windows11 >
Sub Macro() Dim sh As Worksheet: Set sh = Sheets("出力シート") Dim folder As String : folder = "C:\Users\dai1t\OneDrive\デスクトップ\会計" & "\" & Format(Date, "ge") If Dir(folder, vbDirectory) = "" Then MkDir folder sh.ExportAsFixedFormat _ Type:=xlTypePDF, _ FileName:="C:\Users\dai1t\OneDrive\デスクトップ\1会計" & "\" & Format(Now, "予算案") & ".pdf" End Sub
>別ブックの特定シートをPDF化できたら ブックをシートの前に指定するだけです。 Dim wb As Workbook : Set wb = Workbooks.Open("ここにブックのフルパス") Dim sh As Worksheet : Set sh = wb.SHeets("出力シート")
もちろんブックのフルパスは変数であってもかまいません。 Dir関数とDoLoopでフォルダ内すべてを処理するとか FileDialogで選択したファイルを処理するとか いろいろあります。 ( TKG) 2025/04/15(火) 17:11:12
すみません。コピペで書いていたもんで、今気づきました >Format(Now, "予算案") これ、何がしたのでしょうか。"予算案"としか返りませんよ。
やるとするなら Format(Now, "yymmddhhmm") & "予算案.pdf" とかではないでしょうか。
あと、 >"C:\Users\dai1t\OneDrive\デスクトップ\1会計" & "\"
ここは\を分割する意味はありません "C:\Users\dai1t\OneDrive\デスクトップ\1会計\" ( TKG) 2025/04/15(火) 17:16:41
さらに重大なことを見落としていました。 folderが存在しない場合作成しようとしていますが その後の保存にはfolder出てきてないですよね笑
FileName:= folder & "\" & Format(Now, "予算案") & ".pdf"
等が正当かと。 ( TKG) 2025/04/15(火) 17:20:32
Dim wb As Workbook: Set wb = Workbooks.Open("C:\Users\dai1t\OneDrive\デスクトップ\1会計\1共通data\会計\予算案.xlsm")
Dim sh As Worksheet: Set sh = Sheets("次年度予算案") Dim folder As String: folder = "C:\Users\dai1t\OneDrive\デスクトップ\会計\" & Format(Date, "ge") If Dir(folder, vbDirectory) = "" Then MkDir folder sh.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:="C:\Users\dai1t\OneDrive\デスクトップ\1会計" & "\" & Format(Now, "予算案") & ".pdf"
End Sub
Format(Now, "予算案") これは予算案を返せば大丈夫です。
(taro) 2025/04/16(水) 14:47:45
>パスが見つかりませんとなってしまいます どこのコードでかを明示してください。
考えられるのは、MkDirステートメントで作成できるのは1番深いフォルダーのみです。 具体的に言うなら「Format(Date,”ge”)」というフォルダーのみに対応しています。 例えば「会計」フォルダーが存在しない場合は対応できません。 最下層のフォルダー以外も全て存在確認と作成を行いたいなら、 “\”でSplitするなどして、全てのネストされたフォルダーを確認する必要があります。 ただしこの運用はあまりお勧めしません。最下層のみを都度作成するのが定石だからです。 (TKG) 2025/04/16(水) 15:08:16
そして以前にもお伝えしている通り、folderはPDF保存の際に使用していませんが問題ありませんか? Fomart(Date,”ge”)のフォルダーの存在確認と作成を行ったところで、保存する際に使用しないのは謎です。 保存先のフォルダーも存在確認を行うべきかと存じます。
また、存在確認は「会計」フォルダーなのに対し、保存先は「1会計」フォルダーと記述されていますが正しいですか? 私はコピペで記述しましたが、単なるタイプミスなのであれば修正してくださいね. (TKG) 2025/04/16(水) 15:11:28
最後にもう一つ。 >Sheets("次年度予算案") これがwbのシートを指すのであれば wb.Sheets("次年度予算案") と指定してください。基本的にOpenで開いたブックがアクティブになっているはずなので この記述の順番なら大きな問題は起きないはずですが、普通は指定します。 (TKG) 2025/04/16(水) 15:15:51
総じて、存在確認するフォルダーと保存するフォルダーが一致していません。どちらかが誤っている可能性が高いと思いますよ。 真実はあなたのみぞ知るといった感じですが。 (TKG) 2025/04/16(水) 15:22:23
folderはPDF保存の際に使用していませんが問題ありませんか?
この内容が理解できずにいます。
Dim wb As Workbook: Set wb = Workbooks.Open("C:\Users\dai1t\OneDrive\デスクトップ\1会計\1共通data\会計\予算案.xlsm")
Dim sh As Worksheet: Set sh = wb Sheets("次年度予算案") Dim folder As String: folder = "C:\Users\dai1t\OneDrive\デスクトップ\会計\" & Format(Date, "ge") If Dir(folder, vbDirectory) = "" Then MkDir folder sh.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:="C:\Users\dai1t\OneDrive\デスクトップ\1会計" & "\" & Format(Now, "予算案") & ".pdf"
End Sub (taro) 2025/04/16(水) 15:34:44
>この内容が理解できずにいます。 下記コードは何をしているのか理解していますか? >Filename:="C:\Users\dai1t\OneDrive\デスクトップ\1会計" & "\" & Format(Now, "予算案") & ".pdf" これは"C:\Users\dai1t\OneDrive\デスクトップ\1会計\予算案.pdf"というフルパスのPDFを作成しているだけです。 >If Dir(folder, vbDirectory) = "" Then MkDir folder これはfolder変数に入っている >"C:\Users\dai1t\OneDrive\デスクトップ\1会計\" & Format(Date, "ge") というフォルダーの存在確認を行っています。
つまりIf文とMkDirで存在確認しているフォルダーと保存先のフォルダーが一致していませんよという意味です。以前お伝えしている通り、下記のような記述が正当かと。 Filename:= folder & "\予算案.pdf" ( TKG) 2025/04/16(水) 16:02:05
そしてFormat(now,"予算案")これがなにをしたいのか理解できません。Nowで現在時刻を取得したいのかと推測しました。そのため、最初の例ではyymmddhhmmで現在時刻を追加しておいたということです。
( TKG) 2025/04/16(水) 16:05:41
"予算案"とだけ返したいなら"予算案"と記述するだけにしてください。 コードの読み手を不要に困惑させます。
Format関数やフルパスの概念、変数の概念など基本的な知識が抜け落ちているように感じるので そのあたりもコードを眺めながら考えてみてください。 ( TKG) 2025/04/16(水) 16:08:37
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.