エクセルVBAでワード文書をPDF保存

このQ&Aのポイント
  • エクセル2016のワークシート上にオブジェクトの挿入でワードの文書ファイルをアイコンで貼り付けています。VBAでこの文書ファイルを開き、PDFとして保存しようと思います。
  • 参照設定を行い、VBAコードを作成しましたが、「オブジェクトが必要です」のエラーが発生し、PDF保存ができません。
  • どのようにすればオブジェクトを取得し、PDFとして保存することができるでしょうか?ご教示ください。
回答を見る
  • ベストアンサー

エクセルVBAでワード文書をPDF保存

質問の仕方が悪かったようですので先日の質問 https://okwave.jp/qa/q9876787.html を取り消し、再度質問させていただきます。 エクセル2016のワークシート上にオブジェクトの挿入でワードの文書ファイルをアイコンで貼り付けています。VBAでこの文書ファイルを開き、PDFとして保存しようと思います。 見よう見まねで以下のようなコードを書いてみまた。 '参照設定 Microsoft Word 16.0 Object Library Sub test01() Dim objWord As Word.Application Set objWord = CreateObject("Word.Application") objWord.Visible = True Dim objDoc As Word.Document Dim FileName As String FileName = Application.GetSaveAsFilename(, "PDFファイル,*.pdf", , "PDF保存") Set objDoc = Worksheets("Sheet1").OLEObjects(1).Verb(Verb:=xlVerbOpen) objDoc.ExportAsFixedFormat OutputFileName:=FileName, ExportFormat:=wdExportFormatPDF objDoc.Close End Sub これで、文書ファイルは開くのですが、「オブジェクトが必要です」のエラーがでて、Set objDocがEmptyのままPDF保存ができません。どのように直せばいいのでしょうか? ご教示ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.3

> すでに他のワードが開いている場合はいかがすればよろしいでしょうか? 多分ブックに挿入しているファイルを開いた時のWord文書の名前は ○○.xlsm 内の Word 文書 といったブック名を含んだ名前になっていると思います。 そのようなWord文書が他に開いていないとして For i = 1 To objWord.Documents.Count If objWord.Documents(i).Name Like ThisWorkbook.Name & "*" Then objWord.Documents(i).ExportAsFixedFormat OutputFileName:=FileName, ExportFormat:=wdExportFormatPDF objWord.Documents(i).Close If objWord.Documents.Count = 0 Then objWord.Quit End If Exit For End If Next ThisWorkbook.Name & "*内の*" などでもいいと思います。

emaxemax
質問者

お礼

なんどもありがとうございます。 とても勉強になりました。 これからもご指導のほどよろしくお願い申し上げます。

emaxemax
質問者

補足

以下で思ったようにできました。 本当にありがとうございました。 Sub Test02() Dim objWord As Word.Application Dim FileName As String FileName = Application.GetSaveAsFilename(, "PDFファイル,*.pdf", , "PDF保存") Worksheets("Sheet1").OLEObjects(1).Verb xlVerbOpen Set objWord = GetObject(Class:="Word.Application") 'Wordファイルが複数開いていてる対応 For i = 1 To objWord.Documents.Count If objWord.Documents(i).Name Like ThisWorkbook.Name & "*" Then objWord.Documents(i).ExportAsFixedFormat OutputFileName:=FileName, ExportFormat:=wdExportFormatPDF objWord.Documents(i).Close If objWord.Documents.Count = 0 Then objWord.Quit End If Exit For End If Next End Sub

その他の回答 (2)

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.2

一部無駄がありました。 Sub Test() Dim objWord As Word.Application Dim o As Object Dim FileName As String FileName = Application.GetSaveAsFilename(, "PDFファイル,*.pdf", , "PDF保存") Set o = Worksheets("Sheet1").OLEObjects(1) o.Verb xlVerbOpen Set objWord = GetObject(Class:="Word.Application") 'Wordファイルが一個しか開いていない前提です。 objWord.Documents(1).ExportAsFixedFormat OutputFileName:=FileName, ExportFormat:=wdExportFormatPDF objWord.Documents(1).Close objWord.Quit End Sub

emaxemax
質問者

お礼

ありがとうございました!うまくいきました。 ただ、 'Wordファイルが一個しか開いていない前提です。 とありますが、すでに他のワードが開いている場合はいかがすればよろしいでしょうか?

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.1

無駄がありそうな気もしますが、とりあえず動きます。 Sub Test() Dim objWord As Word.Application Dim objW As Word.Application Dim o As Object Dim FileName As String Set objW = CreateObject("Word.Application") Set objWord = GetObject(Class:="Word.Application") FileName = Application.GetSaveAsFilename(, "PDFファイル,*.pdf", , "PDF保存") Set o = Worksheets("Sheet1").OLEObjects(1) o.Verb xlVerbOpen 'Wordファイルが一個しか開いていない前提です。 objWord.Documents(1).ExportAsFixedFormat OutputFileName:=FileName, ExportFormat:=wdExportFormatPDF objWord.Documents(1).Close objWord.Quit End Sub

emaxemax
質問者

お礼

ありがとうございます。 回答の方でやってみました。

関連するQ&A

  • エクセルマクロでワード文書を強制的に閉じるには

    エクセルマクロでワードへの差し込み印刷を行っています。 時々、ワード様式ファイルを二重起動してしまい、その結果読み取り専用で開くかとのメッセージで出て処理がストップすることがあります。 そこで 差し込み印刷を行う前に、ワード様式ファイルが開いているかどうか確認し、開いていれば一旦ワード様式ファイルを閉じてから、差込印刷を開始するように改良しました。 ところが、今度は、ワード様式ファイルを閉じる段階で 「〇〇.docに対する変更を保存しますか? 保存 保存しない キャンセル」のメッセージが表示され、処理がストップしてしまいます。 メッセージが出ない方法について数日、いろいろ試みましたがいまだできません。どなたかご教示のほどよろしくお願いいたします。 ★印の箇所が最後に試みたcordです。 =============================== Option Explicit Dim myxls, mydoc As String '---------------------- Sub 差込印刷() '---------------------- myxls = ThisWorkbook.Path & "\VBA差込元data.xls" mydoc = ThisWorkbook.Path & "\差込先ワード様式.doc" '↓Word差込印刷時の二重起動による休止を避けるためのcode On Error GoTo ErrorHandler '↓差込先ワード様式.docが既に開いていると次行でerror75が発生、ErrorHandlerに飛んで注意を促す。 Name mydoc As mydoc '-------- Word差込 '-------- Exit Sub ErrorHandler: '↓★ここで差込先ワード様式.docを「保存」「保存しない」「キャンセル」の確認ウィンドウが表示されてしまう。★ Let Application.DisplayAlerts = False '★←これを書いても無駄だった★ GetObject(mydoc).Application.Quit Let Application.DisplayAlerts = True '★ Resume End Sub '----------------- Sub Word差込() '----------------- Dim objword, wddoc As Object Set objword = CreateObject("Word.Application") '←Wordオブジェクトを作成 With objword .Visible = True '↓Wordドキュメントオブジェクトを作成→指定ワード文書が読み込まれた。 Set wddoc = .Documents.Open(Filename:=mydoc) End With '---------------------------------- With wddoc.MailMerge '↓フルパスでよろしくね! .MainDocumentType = wdFormLetters .OpenDataSource Name:=myxls, _ Connection:= _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ myxls & ";Mode=Read;Jet OLEDB:Engine Type=35" _ , SQLSTATEMENT:="SELECT * FROM [sheet1$]" '----------------------- Dim rc As Integer rc = MsgBox("人数分のワードのページを作成しますか?" & vbCr & _ "【は い】・・人数分のページを作ります。" & vbCr & _ "【いいえ】・・ページをつくりません。(Word様式原本のみ作成)", vbYesNo + vbQuestion, "確認") If rc = vbYes Then '----------------------- '下記3行により[個々の文書の編集]まで一気に .ViewMailMergeFieldCodes = False .Destination = wdSendToNewDocument .Execute '----------------------- wddoc.Close '←word原本・Wordドキュメントオブジェクトを閉じる。 Set objword = Nothing Set wddoc = Nothing End If '----------------------- End With '---------------------------------- End Sub

  • Excel VBAで呼び出したWordが文書への差し込みボタンが効かない状態で開く

    以下のExcel VBAでWordは開くのですが、新規文書への差し込みボタンが、活きていないです。参照設定は、Microsoft Word 11.0 Object Libraryを入れています。 どうしたらいいのでしょうか?困っています。 Sub Wordを開き、差し込み印刷する() Dim ワード As Object Dim ワード文書 As Object Dim フルパス As String フルパス = "D:\案内状.doc"          'フルパスを作成 Set ワード = CreateObject("Word.Application") 'Wordを起動 ワード.Visible =True 'Wordを表示 Set ワード文書 = ワード.documents.Open(フルパス) 'Word文書を開く End Sub

  • エクセルVBAでPDF保存ができません

    エクセルのシートを連続してPDFで出力するVBAで困っています。 自分の端末内で動かす分にはぜんぜん問題はありません。ところが会社のサーバー内の共有フォルダーに保存して動かすと、最初の1件だけは正常にPDFに保存されますが、何度やっても2件目でエラーになりPDFが保存されません。 「実行時エラー1004 ドキュメントを保存できませんでした。ドキュメントが開いているか、保存時にエラーが発生した可能性があります。」 となってしまうのです。 PDFが保存されないうちに次のPDFを作成して保存しているためかと思いApplication.Waitで10秒待つようにしたところ最後まで保存ができました。 しかし、自分の端末内ではWaitを入れなくとも問題なくできます。 質問は、この原因と、一律にApplication.Waitで10秒待たなくとも別の方法で対応する方法はないかということです。 よろしくお願いいたします。 Sub TEST01() '2020/10/10   Dim Fdr As String, Fn As String   Dim n As Long      With Sheets("Test")     .Activate     Fdr = ThisWorkbook.Path & "\" & Format(Date, "YYYYMMDD") & "-PDF" 'PDF保存先'     If Dir(Fdr, vbDirectory) = "" Then        MkDir Fdr '無ければ作成     End If          For n = 1 To 20       .Range("C5").Value = Sheets("Data").Cells(n, "A").Value       Fn = .Range("C5").Value & "_" & .Range("D5").Value  'ファイル名       Application.StatusBar = Fn & " PDFファイル作成中/" & n & "件目"       ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Fdr & "\" & Fn & ".pdf"       Application.Wait Now() + TimeValue("00:00:10")   '10秒PDF保存完了を待つ(1-8秒では保存エラー)     Next n   End With   Application.StatusBar = "" End Sub

  • マクロでエクセル・ワード文書をひらく

    Windows2000 Excel2000でマクロ作成中の超初心者です。 コマンドボタンでExcelとWord文書を開いて、その文書を利用しています。次の3点について、ご教示をお願いします。 1)この文書を開いたとき、両方ともマイドキュメントのフォルダに固定したい 2)ワード文書を開くと、タスクトレーにあらわれるため、いちいち最大化ボタンをおさなければならない。これを最初から最大化表示したい 3)他のPCでも使えるコードにしたい ちなみに使っているコードは次の2個です。 Sub ワードをひらく() Dim FileName As String Dim s As String On Error GoTo JumpError FileName = Application.GetOpenFilename("Word文書,*.doc", 1, "Word文書を開く", , False) Shell """C:\Program Files\Microsoft Office\Office\WINWORD.EXE""" & " """ & FileName & """" JumpError: End Sub ----------------------------------- Sub エクセルをひらく() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If End Sub

  • エクセル2010のVBAでPDFを開きたい

    エクセルのワークシートSheet2にPDFのファイルを挿入しました。アイコン表示になっています。 Sheet1にあるボタンでこのPDFを開こうと思い、見よう見まねで Sub TEST() Worksheets("Sheet2").OLEObjects(1).Verb Verb:=xlPrimary End Sub としたところ、PDFは開くことはひらくのですがアクティブになってくれません。 Worksheets("Sheet2").OLEObjects(1).Activate に変えてもおなじです。 PDFではなくワード文書を張り付けた時には上記のコードでアクティブになってくれたのですが。 どうすればPDFをアクティブに、表に見えるようにできるでしょうか?

  • VBA 保存

    保存ボタンを作成してファイルに飛ぶように させていますが…どうしてもエラーになります! エラー表示内容> 実行時エラー1004 シートの名前を他のシート、Visual Basicで参照される オブジェクト ライブラリまたは ワークシートと同じ名前に変更することはできません。 下記は実際の記述です。 Private Sub 保存_Click() Dim FileName As String Dim FileExt As String Dim BkName As String Dim OldWkbook As Workbook Dim NewWkbook As Workbook Const StName1 As String = "計画 グラフ" Const StName2 As String = "ケア一覧" ' Application.DisplayAlerts = False Set OldWkbook = ActiveWorkbook ' 'ファイル名を取得 BkName = OldWkbook.Sheets(StName1).Range("D1").Value FileName = BkName & Format(Now, "yyyy-mm-dd") & ".XLS" ' FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName) If FileName = "" Then Exit Sub Else If Right(FileName, 4) <> ".XLS" Then MsgBox "ファイル名が異常です。" Exit Sub End If End If ' OldWkbook.Sheets(Array(StName1, StName2)).Copy Set NewWkbook = ActiveWorkbook For wIx = 1 To NewWkbook.Sheets(1).Shapes.Count NewWkbook.Sheets(1).Shapes(1).Delete '←シート1のボタンを削除 Next NewWkbook.Sheets(1).Name = StName1 NewWkbook.Sheets(2).Name = StName2 ' FileName = "D:\看護計画保存\" & FileName ' If Dir(FileName) <> "" Then '##ファイルが既に存在する If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then NewWkbook.Close savechanges:=False '##保存せずに終了 Exit Sub End If '##指定ファイル置き換え保存 NewWkbook.SaveAs FileName:=FileName Else '##ファイルを新規保存 NewWkbook.SaveAs FileName:=FileName End If ' NewWkbook.Close savechanges:=False Application.DisplayAlerts = True End Sub

  • エクセル VBA シート保存ボタン

    Sheet上にボタンを作成 ボタンを押すと保存するようにしています! 以前ここでSheet2枚をコピー出来るような 記述教えてもらったのですが・・ 1枚ならどう変化して良いか・・ 記述を書きましたが 何処が違うか教えて下さい! Private Sub CommandButton1_Click()   Dim FileName  As String   Dim FileExt   As String   Dim BkName   As String   Dim OldWkbook  As Workbook   Dim NewWkbook  As Workbook   Const StName1  As String = "ko"      '   Application.DisplayAlerts = False   Set OldWkbook = ActiveWorkbook   '   'ファイル名を取得   BkName = OldWkbook.Sheets(StName1).Range("A1").Value   FileName = BkName & Format(Now, "yyyy-mm") & ".XLS"   '   FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName)   If FileName = "" Then     Exit Sub   Else     If Right(FileName, 4) <> ".XLS" Then       MsgBox "ファイル名が異常です。"       Exit Sub     End If   End If   '   OldWkbook.Sheets(Array(StName1)).Copy   Set NewWkbook = ActiveWorkbook   For wIx = 1 To NewWkbook.Sheets(1).Shapes.Count     NewWkbook.Sheets(1).Shapes(wIx).Delete    Next   NewWkbook.Sheets(1).Name = StName1   '   FileName = "D:\保存\計画\" & FileName   '   If Dir(FileName) <> "" Then     '##ファイルが既に存在する     If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then       NewWkbook.Close savechanges:=False       '##保存せずに終了       Exit Sub     End If     '##指定ファイル置き換え保存     NewWkbook.SaveAs FileName:=FileName   Else     '##ファイルを新規保存     NewWkbook.SaveAs FileName:=FileName   End If   '   NewWkbook.Close savechanges:=False   Application.DisplayAlerts = True End Sub 教えて下さい!

  • VBAでPDFをテキスト出力する時のエラー

    PDFをテキスト出力するVBA実行時、Acrobatから「ファイルを開けません」とエラーメッセージが表示されます。何のファイルなのかわからないので教えてください。 下記VBAで、最終行の「objJs.SaveAs txtFilePath, "com.adobe.acrobat.plain-text"」でPDFは読み込まれて画面表示されますが、同時に「ファイルを開けません」というメッセージが表示されます。PDFは正常に読み込まれていると思われるので、ほかに何が必要なのか教えてください。 AcrobatとMicrosoftScriptingRuntimeは組み込んでいます。 -------------------------------------------- 'PDFのデータをExcelに読み込むメイン処理 Sub Main() 'PDFファイルをテキストに変換するための定数を用意 Const fileName = "テストファイル" Const folderPath = "C:\Data\" Const pdfFilePath = folderPath & fileName & ".pdf" Const txtFilePath = folderPath & fileName & ".txt" 'PDFファイルをテキストに変換 Call convPDFtoText(fileName, folderPath, pdfFilePath, txtFilePath) End Sub 'PDFファイルをテキスト変換する処理 Sub convPDFtoText(fileName As String, folderPath As String, pdfFilePath As String, txtFilePath As String) 'Acrobat操作用の変数を宣言 Dim objAcrobatApp As New Acrobat.AcroApp Dim objAcrobatAVDoc As New Acrobat.AcroAVDoc Dim objAcrobatPDDoc As Acrobat.AcroPDDoc Dim AcrobatId As Long Dim objJs As Object 'Acrobatアプリを起動 AcrobatId = objAcrobatApp.Show 'PDFファイルを開く AcrobatId = objAcrobatAVDoc.Open(pdfFilePath, "") 'PDDocオブジェクトを取得 Set objAcrobatPDDoc = objAcrobatAVDoc.GetPDDoc() 'Acrobat JavaScriptオブジェクトを作成 Set objJs = objAcrobatPDDoc.GetJSObject 'PDFをテキストで保存 objJs.SaveAs txtFilePath, "com.adobe.acrobat.plain-text"

  • WORDのアドイン

    先日、以下のように教えて頂き試したのです、できませんでした。 ご回答が頂けないので再投稿をしました。 教えて下さい。 ------------------------------------------------ お世話になっております。 QNo.4228197で質問させて頂きました。 その節はありがとうございました。 WORDでも同様な事をやりたいのです。 ドキュメントを開いた際のイベントは、 Dim WithEvents oWord as Word.Application Private Sub oWorf_DocumentOpen(ByVal Doc As Word.Document) end sub でいいのでしょうか?? ------------------------------------------------------------ やり方は同じですよ IDTExtensibility2_OnStartupCompleteイベントの最後の方で if oHostApp.Name = "Microsoft Word" then   Set oWord = oHostApp End if IDTExtensibility2_OnBeginShutdownの最後に Set oWord = Nothing を追加 Private Sub oWord_DocumentOpen(ByVal Doc As Word.Document)   If oWord.Documents(1).CustomDocumentProperties.Count Then     MsgBox oWord.Documents(1).CustomDocumentProperties("文書番号").Value   End If end sub といった具合です ------------------------------------------------------------------- 下記のようにしてテストしてみたのですが、うまく行きません。 宣言部 Dim WithEvents objWord As Word.Application IDTExtensibility2_OnConnectionイベント Set objWord = objHostApp IDTExtensibility2_OnBeginShutdownイベント Set objWord = Nothing Private Sub objWord_DocumentOpen(ByVal Doc As Word.Document) MsgBox "word Open" End Sub Private Sub objWord_DocumentActivate(ByVal Doc As Word.Document) MsgBox "word Activate" End Sub どこか違うのでしょうか。 宜しくお願い致します。 ----------------------------------------------------------------

  • Excel2010VBAからWordの呼び出し

    お世話になります。 Excel2003VBAで、次の様にWordファイルをオープンしていました。 Dim boReadOnly As Boolean Dim objWord As Word.Application boReadOnly = True Set objWord = CreateObject("Word.Application") With objWord .Documents.Open toFullName, ReadOnly:=boReadOnly .Visible = True End With これを、Excel2010VBAへ移植すると、WordファイルがExecelの後方に隠れて表示されてしまいます。 暫定として、.Visibleの次行に、   .Activate を追加しています。これを行なうと、Startアイコンの→横に、Wordアイコンが点滅するので、 Wordがオープンした事はわかります。 Wordファイルを呼び出し元のExcelの前面に表示させるには、どうすればいいでしょうか? 御教示よろしくお願いします。

専門家に質問してみよう