VBSでExcel、Word、PowerPointを一括でPDFに変換してみる
おはようございます。
ExcelやWordを使って資料を作った後、
大体はPDFに変換して誰かに送付したり、社内でレビューをしたりしますよね。
ビジネスシーンでは最早当たり前のようにやられていることかと思います。
まあ、あまりないシーンかもしれませんが、
沢山のドキュメントを一括で変換したいって時に使えるバッチ(VBScript)を作りました。
スポンサーリンク
そもそも何故PDFに変換するのか
送受信者でレイアウトに相違が起きにくい
Excel、Wordであれば、バージョンや各自の設定によって見え方が異なってしまう可能性がありますが、PDFはどんな環境でも同じレイアウトで閲覧することができます。
Officeが入っていなくても閲覧可能
今の時代、あんまりないのかもしれませんが、Excel、Wordの場合はそれぞれのソフトウェアがインストールされていないと閲覧ができません。
サイズが圧縮される
一般的に、PDFに変換するとサイズが圧縮されるため、メールなんかで送受信する際には双方にメリットがあります。
加工できない
重要な書類などは、誰かに加工されてしまうと困る場合があります。
ExcelやWordなんかにもパスワードでロックする機能がありますが、PDFであれば特に何もする必要なく、基本的には加工できません。(特別なソフトなんかでは出来る場合がありますが)
VBScript
2018年10月10日 追記
次の方法でPDF化できるようにしました。
- ブック全体
- アクティブシートのみ(最後に保存した際に、アクティブだったシート)
- ページ指定(From ~ To)
また、出力後に元ファイルを削除するかどうかのフラグを持たせ、元ファイルの削除に対応しました。
※バックアップなど、自己責任でお願いします。
2019年03月22日 追記
ひしもち様のご指摘で、Office 2013以前の場合に保存ダイアログが表示されてしまうケースに対応しました。
(ドキュメントを閉じる前後で、App.DisplayAlertsの値を操作)
2019年09月06日 追記
びば様の要望で、PowerPointに対応しました。
2019年10月09日 追記
全体的に修正。
変換したPDFを別のフォルダに出力するかどうかを「copyFlg」で制御するようにしました。
追加部分
変数の宣言を追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | DimSheet 'アクティブシートのみとするかどうかのフラグ(0:オフ/1:オン) DimActiveSheetFlg ActiveSheetFlg=1 'ページ指定 'From が 0 であれば指定しない DimPageFrom DimPageTo PageFrom=0 PageTo=0 '変換元ファイルを削除するかどうか DimDeleteFlg DeleteFlg=0 |
出力処理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ifActiveSheetFlg=1Then ' アクティブシート指定 SetSheet=Book.ActiveSheet IfErr.Number<>0Then ' 終了( 開放 ) ExcelApp.Quit() Wscript.Echo Err.Description&vbCrLf&strCurrentPath ' スクリプト終了 Wscript.Quit() EndIf on errorgoto0 CallSheet.ExportAsFixedFormat(0,tmpFilePath) Else ifPageFrom=0Then ' ブック全体 CallBook.ExportAsFixedFormat(0,tmpFilePath,0) Else ' ページ指定 CallBook.ExportAsFixedFormat(0,tmpFilePath,0,False,False,PageFrom,PageTo,False) Endif Endif |
元ファイル削除
1 2 3 4 5 6 7 8 9 10 11 12 | ' 変換したファイルを移動 IfFso.GetExtensionName(objItem.Name)="xls"OrFso.GetExtensionName(objItem.Name)="xlsx"OrFso.GetExtensionName(objItem.Name)="doc"OrFso.GetExtensionName(objItem.Name)="docx"Then ' PDFのみコピー Fso.CopyFile tmpFilePath,crtFolderPath&"\",true ' コピー後に削除 Fso.DeleteFile tmpFilePath ifDeleteFlg=1Then ' 元ファイルを削除 Fso.DeleteFile objItem.Path EndIf EndIf |
全体
下記の内容をテキストファイルにコピペして、「convertPdf.vbs」という名前で保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 | OptionExplicit '********************************************************************************** ' ■概要 ' 実行ファイルと同じ階層以下の ' Excel、Word ファイルを PDF に変換して指定したフォルダに出力します。 ' ' ※ Office 2007 以上、プリンタが使用できる環境でのみ動作します。 '********************************************************************************** '============================================================== ' 変数の宣言、初期化 '============================================================== 'フォルダ操作用 DimFso DimobjApl DimobjFolder DimobjFolderTo DimobjFolderItems DimstrCurrentPath Dimobj DimcrtFolderPath DimtmpFilePath 'Excel用 DimExcelApp DimWordApp DimPowerPointApp DimDoc DimBook DimSheet DimPresentations 'コピーするかどうか(0:しない/1:する) DimcopyFlg copyFlg=0 'コピー先 DimcopyTo copyTo="C:\work\temp\" 'アクティブシートのみとするかどうかのフラグ(0:オフ/1:オン) Dim ActiveSheetFlg ActiveSheetFlg = 1 'ページ指定 'From が 0 であれば指定しない Dim PageFrom Dim PageTo PageFrom = 0 PageTo = 0 '変換元ファイルを削除するかどうか Dim DeleteFlg DeleteFlg = 0 '============================================================== ' 処理開始 '============================================================== '1.ファイルオブジェクトを作成 Set Fso = CreateObject( "Scripting.FileSystemObject" ) '2.実行ファイルが格納されているパスを取得 strCurrentPath = WScript.ScriptFullName Set obj = Fso.GetFile( strCurrentPath ) Set obj = obj.ParentFolder strCurrentPath = obj.Path '3.Excel, Word アプリケーションオブジェクトを作成します。 Set ExcelApp = CreateObject("Excel.Application") Set WordApp = CreateObject("Word.Application") Set PowerPointApp = CreateObject("PowerPoint.Application") '4.シェルアプリケーションオブジェクトを作成します Set objApl = WScript.CreateObject("Shell.Application") '5.実行ファイルと同じ階層のフォルダオブジェクトを作成します Set objFolder = objApl.NameSpace(strCurrentPath) '6.実行ファイルの親フォルダがコピー先になければ作成する If copyFlg = 1 Then crtFolderPath = copyTo & Fso.GetBaseName(strCurrentPath) If Fso.FolderExists(crtFolderPath) = false Then Fso.CreateFolder(crtFolderPath) End If End If '7.フォルダオブジェクトから格納されているファイル、フォルダを取得します。 Set objFolderItems = objFolder.Items() '8.ファイル、フォルダ単位の処理 Call prcFolder (objFolder) '9.終了処理 ExcelApp.Quit() WordApp.Quit() PowerPointApp.Quit() Set ExcelApp = Nothing Set WordApp = Nothing Set PowerPointApp = Nothing Set objFolderItems = Nothing Set objFolder = Nothing Set objApl = Nothing If copyFlg = 1 Then Wscript.Echo crtFolderPath & "に変換したPDFを出力しました。" Else Wscript.Echo "PDFの変換が完了しました。" End If '------------------------------------------------------------------------------------------ ' ■サブプログラム ' フォルダ内に含まれるファイルやフォルダを検索し、 ' Excel、Word ファイルを PDF ファイルに変換する。 '------------------------------------------------------------------------------------------ Sub prcFolder(objFolder) Dim tmpFolderPath Dim tmpFolderItems Dim crtFolderPathB Dim objFolderItemsB Dim objItem Dim i Dim flg Set tmpFolderItems = objFolder.Items() ' フォルダ内アイテムの走査 For i=0 To tmpFolderItems.Count-1 'ファイルおよびフォルダオブジェクトを取得 Set objItem = tmpFolderItems.Item(i) 'Wscript.Echo "パス:" & objItem.Name 'ファイル、フォルダの判定 If objItem.IsFolder Then 'パスを退避 tmpFolderPath = crtFolderPath '処理中のディレクトリをパスに含める crtFolderPath = crtFolderPath & "\"&objItem.Name ' 親ディレクトリがなければ作成 If Fso.FolderExists(crtFolderPath)=falseThen Fso.CreateFolder(crtFolderPath) EndIf 'フォルダであれば再起処理を実施 SetobjFolderItemsB=objItem.GetFolder CallprcFolder(objFolderItemsB) 'パスを戻る crtFolderPath=tmpFolderPath Else flg=0 ' 親ディレクトリがなければ作成 If copyFlg=1Then If Fso.FolderExists(crtFolderPath)=falseThen Fso.CreateFolder(crtFolderPath) EndIf EndIf SelectCase LCase(fso.GetExtensionName(objItem.Name)) ' Excelの場合 Case"xls","xlsx" ' 出力パス tmpFilePath=Fso.GetParentFolderName(objItem.Path)&"\" & Fso.GetBaseName(objItem.Name) & ".pdf" Set Book = ExcelApp.Workbooks.Open( objItem.Path ) If Err.Number <> 0 Then ' 終了( 開放 ) ExcelApp.Quit() Wscript.Echo Err.Description & vbCrLf & strCurrentPath ' スクリプト終了 Wscript.Quit() End If on error goto 0 if ActiveSheetFlg = 1 Then ' アクティブシート指定 Set Sheet = Book.ActiveSheet If Err.Number <> 0 Then ' 終了( 開放 ) ExcelApp.Quit() Wscript.Echo Err.Description & vbCrLf & strCurrentPath ' スクリプト終了 Wscript.Quit() End If on error goto 0 Call Sheet.ExportAsFixedFormat(0, tmpFilePath) Else if PageFrom = 0 Then ' ブック全体 Call Book.ExportAsFixedFormat(0, tmpFilePath, 0) Else ' ページ指定 Call Book.ExportAsFixedFormat(0, tmpFilePath, 0, False, False, PageFrom, PageTo, False) End if End if ' 終了( 開放 ) ExcelApp.DisplayAlerts = False Book.Close ExcelApp.DisplayAlerts = True flg = 1 ' Wordの場合 Case "doc", "docx" ' 出力パス tmpFilePath = Fso.GetParentFolderName(objItem.Path) & "\"&Fso.GetBaseName(objItem.Name)&".pdf" SetDoc=WordApp.Documents.Open(objItem.Path,true) If Err.Number<>0Then ' 終了( 開放 ) WordApp.Quit() Wscript.Echo Err.Description&vbCrLf&strCurrentPath ' スクリプト終了 Wscript.Quit() EndIf on errorgoto0 CallWordApp.ActiveDocument.ExportAsFixedFormat(tmpFilePath,17,False) ' 終了( 開放 ) WordApp.DisplayAlerts=False Doc.Close WordApp.DisplayAlerts=True flg=1 ' PowerPointの場合 Case"ppt","pptx" ' 出力パス tmpFilePath=Fso.GetParentFolderName(objItem.Path)&"\" & Fso.GetBaseName(objItem.Name) & ".pdf" Set Presentations = PowerPointApp.Presentations.Open( objItem.Path, True, False, False) If Err.Number <> 0 Then ' 終了( 開放 ) WordApp.Quit() Wscript.Echo Err.Description & vbCrLf & strCurrentPath ' スクリプト終了 Wscript.Quit() End If on error goto 0 Call Presentations.SaveAs( tmpFilePath, 32, False) ' 終了( 開放 ) PowerPointApp.DisplayAlerts = False Presentations.Close PowerPointApp.DisplayAlerts = True flg = 1 End Select ' 変換したファイルを移動 If copyFlg = 1 And flg = 1 Then ' PDFのみコピー Fso.CopyFile tmpFilePath, crtFolderPath & "\",true ' コピー後に削除 Fso.DeleteFile tmpFilePath if DeleteFlg=1Then ' 元ファイルを削除 Fso.DeleteFile objItem.Path EndIf EndIf EndIf Next ' 終了( 開放 ) SetobjItem=Nothing SetobjFolderItemsB=Nothing EndSub |
実行してみる
Excelフォルダ―にはExcelファイルを2種類、同じ階層にはWordファイルを2種類配置しました。
この状態で、ConverPdf.vbsを実行。
変換が完了するとメッセージが表示されます。
VBScript内で指定した出力先にPDFが出力されます。
PDFを表示してみると、ちゃんと内容が表示されることが確認できました。
まとめ
例えば、タスクスケジューラなんかに仕込んで
決まったフォルダにドキュメントを入れておけば自動で変換してくれるなんてこともできそうですね。
ではでは。
ディスカッション
コメント一覧
web上を探し回ってここにたどり着き、なんとかじぶんのやりたいことを解決できました。
助かりました、スクリプトの公開をありがとうございました。
ただ一つ、ExcelのシートがすべてPDFに変換してしまうのですが、アクティブシートのみPDF変換するようにはできないものでしょうか。
お忙しい中超初心者のお相手は無理かもしれませんが、お暇な時で結構ですのでご教授いただければ幸いです。
フジイヒロシ様
いつも記事を見ていただきありがとうございます。
ご質問の件、アクティブシートとはどういった状態のことでしょうか。
例えば、
1.対象のExcelを開いていて、且つ表示しているシート
2.何かしらのデータが存在するシート
基本的には、開いているファイルを変換する想定をしていませんでしたが、ご要望であれば少し方法を調べてみます。
doradoraさま
早速のご回答ありがとうございます。お忙しいのに手を煩わせてしまったようで申し訳ございません。
doradoraさまのおっしゃる1.のケースです。
例えばシートが1.2.3とあって、すべてのシートにデータが入っているとします。
1.を編集後、上書き保存してpdfにエキスポートします。そうするとシート1のみPDFにエキスポートして2.3のシートについてはPDFにエキスポートしません。この1の状態をアクティブシートというと認識していますが、勘違いでしょうか?
1のみPDFとしたかったわけです。なにせ、ど素人ですので、お手を煩わせて申し訳ありません。
フジイヒロシ様
ご要望の件について、
1. ブック全体
2. アクティブシートのみ
3. ページ指定
で切り替えられるようにコードを修正しました。
フジイ様が実現したいことであれば、「ActiveSheetFlg」を 1 にしていただければ出来るかと思います。
よろしくお願いします。
doradora様
あまりの素早いご回答にびっくりしました。なおかつ先を見越したようなページ指定(これexcelで初心者が陥る、とんでもないところに入力があって白紙のページが何枚もできてしまうのを防げそうです。)もさらにびっくりです。
お恥ずかしいような話ですが初心者の作ったexcelをpdfにする変換作業が画期的に楽になりそうです。
感謝感謝です。本当にありがとうございました。
フジイヒロシ様
お役に立てたみたいでよかったです。
また何かあれば、ご遠慮なくご連絡いただければ。
今後ともよろしくお願いします。
お言葉に甘えてもいいでしょうか。
変換した元のファイル(xlsx等)が残ってしまいますのでそれをpdf に変換後削除することは可能でしょうか?
毎日一回タイムスケジューラで実行したいのです。毎日新規でxlsxファイルがクラウド上に送られてきます。
お手を煩わせて申し訳ございません。お暇ときで結構です。よろしくお願いいたします。
フジイヒロシ様
ご要望の件、削除するかどうかのフラグを持たせて、
PDF出力後に削除できるように修正しました。
一応、元のファイルがなくなってしまいますので、
バックアップなどをお忘れなく、あくまで自己責任でよろしくお願いします。。
doradora様
お手数をおかけしました。助かりました。重ね重ねありがとうございます。
今後はdoradora様のお手を煩わせることなく、doradora様のサイトを参考に自分自身で勉強します。
申し訳ありませんでした。
もうお願いせずに頑張ります、doradora様のスクリプトが某日本一の巨大山岳会(もちろん非営利で会員数750人)の登山山行計画書、報告書届け出システムで作動していることをご報告申し上げ、感謝の言葉に代えさせていただきます。
本当にありがとうございました。
フジイヒロシ様
無事に利用できたようでよかったです。
私としても、誰かの役に立てばと思いブログをしていますので、
こういったものができないか、等の意見は大歓迎ですし、いつでもご連絡ください。
今後ともよろしくお願いします。
こんにちは!
とても有用なVBSだったので、さっそく使わせていただこうと思ったのですが、エラーが出てしまい動きませんでした。
エラーは以下のような感じです。
行:77
文字:9
エラー:パスが見つかりません
コード:800A004C
ソース:Microsoft VBScipt 実行時エラー
Excel2016なのですが、2016は対応していないでしょうか?
りょう様
いつもブログを観ていただきありがとうございます。
ご質問の件、基本的には 2016 でも動作するはずです。
おそらくですが、34行目の出力先のパスが存在しないのが原因だと思います。(c:\work\temp\)
該当の箇所にフォルダを作成していただくか、パスを書き換えて実行してみてください。
今後もよろしくお願いします。
ご回答ありがとうございます。
パスが間違ってました!
無事使えるようになりました。
これは実行ファイル(vbsファイル)と同じ階層にフォルダを作成し、その中に変換したファイルを入れることはできますか?
りょう様
ご希望の件についてですが、
再起処理をして実行ファイルと同じ階層以下のフォルダを処理しているので、
実行ファイルと同じ階層に出力するのはちょっと手間がかかります。
処理が終わってから、出力したフォルダをまるっと実行ファイルと同じ階層にもってくるのが簡単じゃないかと思います。
86行目、8.ファイル、フォルダ単位の処理 の後に、次のような処理を加えるのはどうでしょうか。
‘フォルダを移動(MoveFolderがうまく動かないケースがあるのでコピー→削除)
Fso.CopyFolder crtFolderPath , strCurrentPath & “\”
Fso.DeleteFolder crtFolderPath
ありがとうございます!!
もひとつお願いなのですが、
copyTo = “C:\work\temp\”
でフォルダ指定すると思うのですが、
このフォルダが存在しない場合に、自動で作成することはできますか?
りょう様
74行目、6.実行ファイルの親フォルダがコピー先になければ作成する
の部分で、先に以下の処理をすれば可能です。
crtFolderPath = copyTo
If Fso.FolderExists(crtFolderPath) = false Then
Fso.CreateFolder(crtFolderPath)
End If
今後ともよろしくお願いします。
ありがとうございます!
とても有用なブログに出会えて幸せです!笑
今後ともよろしくお願いいたします。
りょう様
お役に立てたなら何よりです。
何かありましたらご遠慮なくご連絡ください。
今後ともよろしくお願いします。
たびたびすみません。
以前ご回答いただいた
[74行目、6.実行ファイルの親フォルダがコピー先になければ作成する
の部分で、先に以下の処理をすれば可能です。
crtFolderPath = copyTo
If Fso.FolderExists(crtFolderPath) = false Then
Fso.CreateFolder(crtFolderPath)
End If]
をやってみたのですが、
パスが見つかりません
とエラーになってしまいます。
何が考えられますかね?
りょう様
ご質問の件、
「copyTo」がドライブ直下でなく階層ディレクトリになっているためエラーになるのかと思います。
(Fso.CreateFolderでは階層ディレクトリを作成できない)
doraxdora.gm.biz@gmail.com までご連絡いただければ、階層ディレクトリに対応したソースをお送りします。
よろしくお願いします。
ご回答ありがとうございます。
階層ディレクトリを作成できなかったのですね。
メールさせていただきました。
よろしくお願いいたします。
こんにちは。大学教員をしていて、学生のWordファイルのレポートやレジュメを閲覧したり印刷したりするのにPDFのほうが便利なため、日常的に複数のWordファイルをPDFにする作業が発生します。自分でも似たようなVBAマクロをつくって運用していましたが、こちらのスクリプトの方がよくできているので利用させていただきます。便利なツールを公開してくださいましてありがとうございます。
元ファイル削除のフラグは、デフォルトでオフにしておいていただくほうが安全かと思います。
unomi 様
いつもブログを観ていただきありがとうございます。
ご指摘の件、記事を修正しました。
確かにその方が安全ですよね。。
今後ともよろしくお願いします。
doradora様
こんにちは、当方全くの初心者です。
自分がやりたいことができる理想的なVBSなので使用させて頂きたいと思っています。タスクスケジューラにも組み込みたいのですが、リンクを張って作ったファイルなのでPDF変換後Excelから保存するか、しないかのダイアログが出てしまいます。Excelマクロを使ってダイアログが出ないようにもしてみたのですが、「.xlsm」ではPDFの変換ができませんでした。何か回避する方法はないでしょうか?不躾で恐縮ですが、よろしくお願いいたします。
ひしもち様
いつもブログを観ていただきありがとうございます。
ご質問の件ですが、「リンクを張って作ったファイル」とは何を差しているのでしょうか。
1.PDFに変換する対象のファイル
2.VBSファイル
3.その他
基本的な仕組みとしては、
「バッチ(VBSファイル)の実体があるフォルダ配下のドキュメントをPDFに変換する」となっていて、特に変わったことをしなければタスクからも実行は可能なはずです。
よろしければもう少し具体的にやりたい事をお教えいただければ
何かお役に立てるかもしれません。
よろしくお願いします。
早速のご回答ありがとうございます。言葉足らずですみません。
accessから出力した簡単な数値だけのExcelファイルをもとに、「条件付き書式」などを使ってガントチャートっぽく作ったExcelのファイルをPDF変換しています。accessからのExcelとガントチャートExcelは別ファイル、別フォルダでリンク(ハイパーリンク?)されています。ガントチャートExcelを開いて閉じるとリンク先の値が変わっているので保存するか、しないかのダイアログが出てしまいます。VBSファイルを実行したときも同じダイアログがでるので保存するか、しないを選択してクリックする必要があります。この操作があるのでタスクスケジューラで完全自動化が難しいのではないかと思っています(まだタスクスケジューラは試していません)。何か説明も下手でご迷惑をおかけしてすみません。ご理解いただけるでしょうか。
ひしもち様
ご質問の件、実現したいことについて承知しました。
少しお時間をいただきたいのと、差し支えなければサンプルを頂けないでしょうか。(データ、チャートの2ファイル)
doraxdora.gm.biz@gmail.com
調べてみますので少々お待ちください。
よろしくお願いします。
ありがとうございます!!早速サンプルを送りいたします。Excelのファイルは会社の業務で使用しており明日が休日になるので明後日に送付いたします。何卒よろしくお願いいたします。
コメント失礼します。実行後に「(指定フォルダ)に変換したPDFを出力しました」と出るのですが、その指定フォルダ内にPDFがありません。
原因わかりますでしょうか?お手数をおかけします、お時間あればご回答頂けますと幸いです。
とりさま
いつもブログを見てくださってありがとうございます。
ご質問の件ですが、
指定フォルダはどこにしていますか?
また、officeのバージョンなども教えていただけると調査しやすいです。
よろしくお願いします。
ありがとうございます。指定フォルダはCの中にフォルダを作成して、その中に生成されるようにしています。
あと、バージョンoffice365でした・・・これが原因でしょうか。
とり様
office365が原因かもしれませんね。
ただ、申し訳ないのですが、現時点で環境が用意できなくて調べることができません。
少しお時間をいただければ office365で調べてみます。
他に考えられるのはフォルダの書き込み権限、指定したパスに誤りがある等かなと思います。
(ただこの場合はエラーになりそうですが)
お力になれず申し訳ありません。
素晴らしいスクリプトをありがとうございます!
当方素人なもので、スクリプトをUTF-8で保存してエラーが出たり、拡張子が .xlsmのエクセルファイルが変換されないなど、多少まごつきましたが、全て解決して快適に使用させていただいております。
ところで、エクセルのシートの内容によっては表が分割されてPDFに変換されてしまうのですが、縮小してページフィットさせることは可能でしょうか?
お時間の許すタイミングで構いませんのでご回答いただければ幸いです。
よろしくお願いいたします。
ななし様
いつもブログを観ていただきありがとうございます。
ご質問の件ですが、次の方法で実現できるかと思います。
方法)
「ExportAsFixedFormat」でPDF出力する前に、シートの PageSetupプロパティを変更する。
例1:シートに対して処理
例2:ブックに対して処理
お試しいただければ。
今後もよろしくお願い致します。
お忙しいところ素早いご回答をいただきありがとうございます!
おかげさまで希望通りの処理となりました。
本当にありがとうございます。
引き続き使わせていただきます!
ななし様
無事にご希望の動作が出来たとのことで、良かったです。
引き続きドラブロをよろしくお願い致します。
こんにちは!
VBS初心者です。さっそく使わせていただいたところエラーが生じました。
エラーは以下のような感じです。
原因を教えていただければ幸いです。
行:77
文字:3
エラー:書き込みできません。
コード:800A0046
ソース:Microsoft VBScript 実行時エラー
びば様
いつもブログを観ていただきありがとうございます。
ご質問の件ですが、
34行目、「copyTo = “xxxx” 」の「xxxx」部分に記述されているフォルダは存在しますか?
存在するのであれば、書き込みをする権限が不足していると思われます。
スクリプトのファイルを右クリックし、「管理者として実行」を試してみてください。
よろしくお願いします。
さっそくの回答ありがとうございます!
xxxxの部分は変更していたのですが,そのフォルダに書き込み禁止が設定されていたようで,違うフォルダを設定したらできました!
素晴らしいスクリプトですね!職場で広めます!
そこで,もうひとつ要望なのですが,エクセルにあるすべてのシートをPDF化することはできますか?
びば様
37行目の「ActiveSheetFlg = 1」を「ActiveSheetFlg = 0」に変更すれば全体のPDF化が出来るはずですのでお試しください。
よろしくお願いします。
ありがとうございます!できました!!
ほんとにすばらしいスクリプトです!素人の私にも実行できました。
わがままついでにもうひとつ要望なのですが・・
パワーポイントのPDF化も追加できますか・・・?
びば様
記事中のソース「全体」をパワポ対応に更新しました。
ご確認ください。
ありがとうございます!
私なんかの要望にお応えいただきありがとうございます!
さっそく利用させていただきました。
ちなみに,パワポのPDFが所定のフォルダに移動しませんでした。
これは初心者ながら解読して解消できました^^
びば様
ご要望にお応え出来てよかったです。
今後もよろしくお願いします。
何度もすいません・・
職場に広めたところ便利!とよろこんでもらえたものの,「vbsを保存したフォルダにPDFが作成されないの?」
と贅沢な要望を受けてしまいました・・・
250~261行を実行しないようにしたら出来たものの,copytoで指定した場所に,空のフォルダが作成されるのは止められませんでした。
教えてください。
びば様
メールにてソースを送らせていただきました。
ご確認いただき、希望通りの結果になったようですので、この件はクローズとさせていただきます。
今後もよろしくお願いします。
とても有用なスクリプトを公開していただき、どうもありがとうございます。
ちょうどツールを探していたところで、とても助かりました。
ひばさんが書かれているパワポのPDFが所定のフォルダーに移動しない件は当方でも発生しました。
確認したところ、251行目の変換したファイルを移動するステップで、pptとpptxの拡張子判定が抜けていましたので、
追加したところ正常に移動されるようになりました。
ご報告まで。
くろ様
ご指摘ありがとうございます。
全体のソースを修正しました。
今後もよろしくお願いします。
こんにちは。
素人質問で大変恐縮なのですが、教えてください。
実行ファイルと同じ階層のみを対象にしたいのですが、どこを変えたらよいのでしょうか。
たね様
いつもブログを見ていただきありがとうございます。
ご質問の件、さくっと対応するのであれば
136行目を次のようにすれば同じ階層のみの処理に出来るかと思います。
If objItem.IsFolder Then
↓
If False Then
よろしくお願いします。
早速のご回答ありがとうございます。
本当にさくっと解決いたしました!
すごい!
ありがとうございました!
たね様
解決できたようで良かったです。
また何かございましたらご遠慮なく。
引き続きよろしくお願いします。
こんにちは。素人質問で大変恐縮ですが、教えてください。
拡張子.xlsxのファイルはdoradora様のスクリプトをコピーさせていただき、PDF化できました。
.xlsmが拡張子のExcelファイル及び、.txtが拡張子のメモなどのテキストファイルをPDF化するためには、どこをどのように変更すればよいのでしょうか。。お手数おかけする質問で大変申し訳ないのですが、宜しくお願い致します。
kenbow 様
いつもブログを見ていただきありがとうございます。
ご質問の件、.xlsm ファイルについてはバッチ内で “.xlsx” が書かれている箇所に同じように追記するだけで大丈夫かと思いますが、 txt ファイルについては対応していません。ご了承ください。
今後もよろしくお願いします。
初めまして。
非常に参考になるプログラムをありがとうございます。
質問があるのですが、作成したpdfを一つのpdfファイルにまとめることは可能でしょうか。
お手数ですが、ご確認いただけますと幸いです。
よろしくお願いいたします。
いつもブログを見ていただきありがとうございます。
ご質問の件、たぶん出来ると思います。
ちょっと調べてみるのでお時間をいただければ。。
よろしくお願いします。