プロが教えるわが家の防犯対策術!

保存されているWordのフォルダ名:”A”の階層化に、"01.出力先"というフォルダを作成しました。
フォルダ名:”A”に保存されているWordを立ち上げ、マクロ実行後、"01.出力先"フォルダにファイルを格納したいのですが、以下マクロで
”ファイル名 = myParentFolderPath & "\01.出力先\" & "ファイル名" & ".docx"”
がエラーになってしまいます。
どのようにマクロを書けば良いのか?教えてください。
--------------------------マクロ--------------------------------------------------
Sub ファイル出力()
'
' ファイル出力 Macro

With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = ActiveDocument.MailMerge.DataSource.ActiveRecord
.LastRecord = ActiveDocument.MailMerge.DataSource.ActiveRecord
End With
.Execute Pause:=False
End With

Dim ファイル名 As String
ファイル名 = ActiveDocument.Paragraphs(1).Range.Text
ファイル名 = Left(ファイル名, Len(ファイル名) - 1) & ".docx"
ActiveDocument.SaveAs _
ファイル名 = myParentFolderPath & "\01.出力先\" & "ファイル名" & ".docx", FileFormat:= _
  wdFormatXMLDocument, Password:="ddddd1001"
End Sub

質問者からの補足コメント

  • うーん・・・

    Dim ファイル名 As String
    ファイル名 = ActiveDocument.Paragraphs(1).Range.Text
    myParentFolderPath = ThisDocument.Path
    ファイル名 = Left(ファイル名, Len(ファイル名) - 1)
    「ActiveDocument.SaveAs2 FileName:=myParentFolderPath_& \"01.出力先"\ & ファイル名 & ".docx", FileFormat:= _
    wdFormatXMLDocument , Password:="dddddd1001"」
    「」の部分が、コンパイルエラー:修正候補:式と出ました。どうしたら良いでしょうか。

    No.2の回答に寄せられた補足コメントです。 補足日時:2022/12/13 14:05
  • へこむわー

    ActiveDocument.SaveAs2 FileName:=myParentFolderPath_& \"01.出力先"\ & ファイル名 & ".docx", FileFormat:= _wdFormatXMLDocument
    Close
    としましたが、& ファイル名の&に赤く色がつきます。
    ちなみにファイル名は、01【印刷:2】契約書(AA立川).docxです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2022/12/13 14:29
  • うーん・・・

    ご丁寧にありがとうございます。
    ただ、myParentFolderPathが、Cドライブのフォルダーになっていて、意図したパスが取得できず

    ActiveDocument.SaveAs2 FileName:=myParentFolderPath _
    & "\01.出力先\" & ファイル名 & ".docx", FileFormat:= _
    wdFormatXMLDocument, Password:="ddddd1001"、

    が黄色くなってしまいします。絶対パスでやらないと無理なのでしょうか。

    No.4の回答に寄せられた補足コメントです。 補足日時:2022/12/13 16:40
  • ご丁寧な、ご回答いつもありがとうございます。

    意図するパスは、
    サーバー>会社名>個人フォルダー>簡易稟議書作成ツール
    >00.入力データ>解約・新規>01.出力先

    01.出力先とマクロ実行Documentはともに>解約・新規>配下に保存」しています。

    No.5の回答に寄せられた補足コメントです。 補足日時:2022/12/14 05:35

A 回答 (8件)

Sub ファイル出力()


'
' ファイル出力 Macro
'
Dim myParentFolderPath As String
 myParentFolderPath = ActiveDocument.Path
 With ActiveDocument.MailMerge
  .Destination = wdSendToNewDocument
  .SuppressBlankLines = True
  With .DataSource
   .FirstRecord = ActiveDocument.MailMerge.DataSource.ActiveRecord
   .LastRecord = ActiveDocument.MailMerge.DataSource.ActiveRecord
  End With
   .Execute Pause:=False
 End With

Dim ファイル名 As String
 ファイル名 = ActiveDocument.Paragraphs(1).Range.Text
 ファイル名 = Left(ファイル名, Len(ファイル名) - 1) & ".docx"
 ファイル名 = myParentFolderPath & "\01.出力先\" & ファイル名

ActiveDocument.SaveAs ファイル名
Close

End Sub
    • good
    • 1
この回答へのお礼

不慣れな私にお付き合いいただき、ありがとうございます。
もう完璧です!!本当に感謝です。
ありがとうございました!!

お礼日時:2022/12/14 16:45

No.7の回答者です。


いきなり、修正したマクロだけを回答してしまいました。
以下は、修正部分の説明です。

ActiveDocumentの使い方が、実行ファイルと出力先の新規文書への
二つになっているために、保存するパスがおかしくなるのです。

実行ファイルのパスを事前にmyParentFolderPath として取得して、
差し込み印刷実行後に、出力先のファイルにmyParentFolderPathと
追加したフォルダ名+ファイルの先頭にある文字列のファイル名へと
なるように、変数"ファイル名"を書き換えます。

あとは、ActiveDocument.SaveAs又はActiveDocument.SaveAs2
としてファイル名の変数として取得したもので保存します。

Closeを追加していますが、不要なら削除してください。
    • good
    • 1

>01.出力先とマクロ実行Documentはともに


一応、もう一度下記のコードで確認してみてください

Sub getPath()
Dim ファイル名 As String
ファイル名 = ActiveDocument.Paragraphs(1).Range.Text
ファイル名 = Left(ファイル名, Len(ファイル名) - 1)
MsgBox ActiveDocument.Path & "\01.出力先"
MsgBox ActiveDocument.Path & "\01.出力先" & "\" & ファイル名 & ".docx"
End Sub
    • good
    • 1

>保存されているWordのフォルダ名:”A”の階層化に、"01.出力先"というフォルダを作成しました。



>myParentFolderPathが、Cドライブのフォルダーになっていて、意図したパスが取得できず

意図するパスとはどのようなパスですか?
親フォルダパスを取得したりしていませんか?
ThisDocument.Parent.Path

マクロ実行Documentはどこに保存していますか?
未保存でしたら 01.出力先フォルダのある同じ階層に保存してください

検証
myParentFolderPath = ThisDocument.Path を
myParentFolderPath = ActiveDocument.Path で
この回答への補足あり
    • good
    • 1

Dim myParentFolderPath


myParentFolderPath = ThisDocument.Path
Dim ファイル名 As String
ファイル名 = ActiveDocument.Paragraphs(1).Range.Text
ファイル名 = Left(ファイル名, Len(ファイル名) - 1) '& ".docx"
ActiveDocument.SaveAs2 FileName:=myParentFolderPath _
& "\01.出力先\" & ファイル名 & ".docx", FileFormat:= _
wdFormatXMLDocument, Password:="ddddd1001"
ActiveDocument.Close SaveChanges:= False

ActiveDocumentを閉じています 保存したばかりなので
SaveChanges:= False は不要ですが保存しないで閉じるコードです

Wordアプリケーション自体を終了する場合は
ActiveDocument.Close SaveChanges:= Falseの 上に
Application.Quit SaveChanges:=wdPromptToSaveChanges を加えます

コピペで使えると思いますよ
ActiveDocument.SaveAs2 FileName:=myParentFolderPath _
& "\01.出力先\" & ファイル名 & ".docx", FileFormat:= _
wdFormatXMLDocument, Password:="ddddd1001"
Application.Quit SaveChanges:=wdPromptToSaveChanges
ActiveDocument.Close
End Sub

諄いようですがApplication.Quit を加えるとWordアプリケーション自体が終了します
保存先はマクロ有効Documentではないので 編集済みコードが消えますので 実行前に作業しているDocumentを 必ず保存 してください

Document.countなどでDocumentの数でApplication.Quitを実行するなんて方法もありますので自身で調べてみてください

ファイル名に使えない文字については参考例 Functionを記します
使えない文字をアンダーバーに変換しています

Public Function character_change(ByVal strName As String, _
Optional ByVal repChar As String = "_") As String
Dim buf As String, ngChar
buf = strName
For Each ngChar In Array("\", "/", ":", "*", "?", """", "<", ">", "|", "[", "]")
buf = Replace(buf, ngChar, repChar)
Next
character_change = buf
End Function

使い方はファイル名の作成最後に
ファイル名 = character_change(ファイル名)
この回答への補足あり
    • good
    • 1

myParentFolderPath_& よく見て



myParentFolderPath _
& "\01.出力先\"・・・

あと、取敢えず テスト段階なので
, Password:="ddddd1001" は 削除しておいた方が確認が早いかな

保存した後の開かれているファイル名の確認もしてください
Close が無いですね・・以下の意味がわかると思います
この回答への補足あり
    • good
    • 1

よく見たら


ActiveDocument.SaveAs _
ファイル名 = myPa・・・

書き方間違ってます

myParentFolderPath = ThisDocument.Path

ファイル名 = Left(ファイル名, Len(ファイル名) - 1)
ActiveDocument.SaveAs2 FileName:=myParentFolderPath _
& "\01.出力先\" & ファイル名 & ".docx", FileFormat:= _
wdFormatXMLDocument, Password:="ddddd1001"

こんな感じだと思いますが Close が無いですね・・
1回実行すると開いているドキュメントは保存先のドキュメントとなりますので、そのままもう一度実行するとThisDocument.Pathは保存先のパスになります(\01.出力先が含まれる)よってエラーになると思います

名前を変更して何度も出力する場合は新規Documentを作りそれを保存するようにすれば繰り返しの処理が可能になると思います
この回答への補足あり
    • good
    • 1

こんにちは どの様なエラーが分かりませんが


変数 myParentFolderPath の代入がされていません

myParentFolderPath=ActiveDocument.Path とか
myParentFolderPath=ThisDocument.Path
で取得してください

ちなみにファイル名に使用出来ない文字が含まれていないか確認も必要です
    • good
    • 1
この回答へのお礼

Thank you

ありがとうございます。TRYしてみます。

お礼日時:2022/12/13 13:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!