Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2010)
Word差し込み時の5487エラー doc docx
投稿日時: 19/11/15 19:23:53
投稿者: のりぴっぴ

Word差し込みのための下記専用プロシージャを作成し利用しています。
差し込まれる側のWord文書(Wordの様式)の形式により、結果が異なります。
拡張子docの場合は、正常に動きますが、拡張子docxの場合は
実行時エラー 5487 ファイルアクセス権のエラーのため保存できません。(・・・・)とのメッセージが表示されてしまいます。
エラーは、最後から10行上の「wddoc.close」の箇所で起こります。
差込自体はうまくいくのですが、Wordの様式の方がマクロで閉じられません。
 
それで、docであろうと docx であろうと、マクロで閉じたいのですが、どうすればよいのか分からなくて困っております。
どなたかお助けをよろしくお願いします。
 
 
=============================
Public toWdflDoc As String
Public toWdflXls As String, toWdShtName As String
Public TgtSht As Worksheet
'---Word差込----
Dim WdMyDoc As String
Dim objword As Object
Dim wddoc As Object
 
 
 
'---------------------------------------------------------------------------
'Excel(toWdflXlsのtoWdShtName)データをWord(toWdflDoc)に差し込む。
'ワードは選択式(新規文書=[定型書簡1]、レター1と原本様式)
'---------------------------------------------------------------------------
'-----------------
Sub Word差込()
'-----------------
 
'↓Wordを起動し、documentを開く
    Set objword = CreateObject("Word.Application") '←Wordオブジェクトを作成
    With objword
         .Visible = True
        '↓様式Wordドキュメント(=toWdflDocフルパスのファイル名)オブジェクトを作成
        Set wddoc = .Documents.Open(Filename:=ThisWorkbook.Path & toWdflDoc)
    End With
     
'----↓toWdflXlsブックのtgtshtシートをデータソースに指定----------------
With wddoc.MailMerge '↓フルパスでよろしくね!
    .MainDocumentType = wdFormLetters
    .OpenDataSource Name:=toWdflXls, _
        Connection:= _
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
        toWdflXls & ";Mode=Read;Jet OLEDB:Engine Type=35" _
        , SQLSTATEMENT:="SELECT * FROM [" & toWdShtName & "$]"
     
    '---↓新規文書として差し込むか、様式文書を開くか選ぶ--------------
    Dim rc As Integer
    rc = MsgBox("人数分のワードのページを作成しますか?" & vbCr & _
    "【は い】・・人数分のページを作ります。" & vbCr & _
    "【いいえ】・・ページをつくりません。(様式原本のみ作成)", vbYesNo + vbQuestion, "確認")
    '-------------------------------------
    If rc = vbYes Then
        '-----------------------
       '下記3行により[個々の文書の編集]まで一気に
            .ViewMailMergeFieldCodes = False
            .Destination = wdSendToNewDocument
            .Execute
       '-----------------------
       MsgBox "Wordが表示されないときは、ディスプレイ下端のWordアイコンを数回clickしてください。" & vbCr & _
       "定型書簡・・・が人数分のWord文書です。"
       Application.DisplayAlerts = False
            wddoc.Close '←word原本・Wordドキュメントオブジェクトを閉じる。新規文書"定型書簡1"が残る
                '.docxのとき5487 ファイルアクセス権エラーのため保存できませんのエラー発生???学籍記録
       Application.DisplayAlerts = True
        
    ElseIf rc = vbNo Then
       MsgBox "Wordが表示されないときは、ディスプレイ下端のWordアイコンを数回clickしてください。"
    End If
    '-------------------------------------
 
End With
'----------------------------------
                Set objword = Nothing
                Set wddoc = Nothing
 
End Sub

投稿日時: 19/11/15 21:37:59
投稿者: のりぴっぴ

wddoc.Closeに
 SaveChanges:=wdDoNotSaveChangesを追加し
 
wddoc.Close SaveChanges:=wdDoNotSaveChangesとしたところ
 
差し込まれるWordの様式がdocでもdocxでもエラーが発生することなく、Word様式ファイルのみ閉じることができるようになりました。
 
しかし、docでできていて、docxではできなかったのは疑問が残ったままです。
記述上の初歩的な何かが漏れていたということなのでしょうか?
どなたか、ご教示いただけませんでしょうか?

回答
投稿日時: 19/11/15 23:42:14
投稿者: コレ

 回答になってはいませんが
 
 Microsoft Word 16.0 Object Libraryを参照設定
 

Sub test()
    Dim WB As Workbook
    Dim mdoc As Word.Document
    Dim appdoc As New Word.Application
    
    appdoc.Visible = True
    Set mdoc = Word.Documents.Add
    mdoc.Paragraphs(1).Range.Text = "a"
    mdoc.Close
    
    Set mdoc = Nothing
    Set appdoc = Nothing
        
End Sub

 
 このコードを実行すると、保存先を聞いてきます。エラーはでませんでした。
 問題解決としては、保存先であるカレントフォルダのアクセス権の有無とかを検証してみてはどうでしょうか?

投稿日時: 19/11/16 21:03:10
投稿者: のりぴっぴ

アドバイスありがとうございました。
カレントフォルダのファイルアクセス権がWordのファイル形式で何故変わるのか?
そもそもset wddocで開いたものがなぜ閉じられないのか、入り口のところでつまづいてしまい、頭が先に進みません。
 
アドバイスは今後の研究課題とさせていただいて、結果オーライで解決済みとさせていただきたいと思います。