• ベストアンサー

Wordマクロを使った保存方法

一太郎で作成したファイルをWindowsでWordで開くように設定しあります。Wordで開いた後に【名前をつけて保存】ファイル名はそのまま使用したいので【保存】【ファイルを閉じる】と言う操作をマクロを使ってやろうとしてるのですが、マクロを実行しようとするとファイルが閉じるだけで、保存されていません。 マクロの記録で上記の操作を一通り実行し記録の終了だけではダメでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。Wendy02です。 >Application.Quit >'Application.Quit >は何が違うんでしょうか? いえ、私の個人的な経験からです。どうも、アプリケーション(Word)をいきなり閉じてしまうということに抵抗があったから、コメントアウト(「'」を先頭につけること)していたのです。 すんなり終わってくれればよいのですが、何かが、プロセス上で残る可能性を心配して、問題なければ、そのコメントアウトを外してくれればよい、ということで書きました。 なお、テキストファイル全部をWord ドキュメントに変換して、閉じるのなら、以下のようにすればよいと思います。(Word .Doc は、そのままになります) 同じファイル名の場合は、枝番が付きます。 8114301a.txt   ↓ 8114301a.doc   ↓ 8114301a_1.doc '間違って同じテキストファイルを開けて行った場合 試してみてください。 '------------------------------------------------ Sub DocsSaves() Dim wd As Variant Dim FileName As String Dim SaveName As String Dim i As String Const Ext As String = ".doc" '拡張子 Const MYPATH As String = "C:\Documents and Settings\[ユーザー名]\デスクトップ\Word\" For Each wd In Application.Documents  If InStr(wd.Name, ".txt") > 0 Then  SaveName = Mid(wd.Name, 1, InStrRev(wd.Name, ".") - 1)    '同名がある時は枝番をつける  Do While Dir(MYPATH & SaveName & Ext) <> ""    i = "_" & CStr(Val(Mid(i, 2)) + 1)    SaveName = SaveName & i  Loop     wd.SaveAs MYPATH & SaveName, FileFormat:=wdFormatDocument   SaveName = ""   i = ""  End If   wd.Close False Next wd  Application.Quit End Sub '------------------------------------------------ もしかしたら、余計な部分を入れてしまったかもしれません。その時はおっしゃってください。

wasamon
質問者

補足

ありがとうございます。一度に開いているワード全てのファイルの拡張子をかえて、目的のフォルダーに保存することが出来ました。 以下について、良く理解できなかったのですがどういうことでしょうか? 8114301a.txt   ↓ 8114301a.doc   ↓ 8114301a_1.doc '間違って同じテキストファイルを開けて行った場合 よろしければ、解説お願いします。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。Wendy02です。 こちらでは、一太郎ファイルがありませんので、txt ファイルで試しています。それで誤解を与えてしまいました。 同じ一太郎ファイルを開ける可能性がなければよいのですが、先ほどやってみて、同じファイルを開けて行うと、ダイアログが出てきて、「既にそのファイルはある・・・」なんていうメッセージが出てきます。 Application.DisplayAlerts = False なんていう技もありますが、それで、前のものを消すのも問題かなって思って、枝番をつけて保存することにしました。 Wordで 以下のファイルを開けました。  8114301.jtd (一太郎ファイル)    ↓  8114301.doc (Wordファイルで保存)  8114301.jtd (もう一度同じ 一太郎ファイルを知らずに開けて実行してしまった)    ↓  8114301_1.doc (枝番をつけて、Wordファイルとして保存) ということをします。 8114301.doc 8114301_1.doc と同じものですが、上書きせずに、枝番で別のファイルになっています。 余計なことかとは思いましたが、上書きしてなくなってしまう、安全を考えました。お分かりになりますでしょうか?

wasamon
質問者

お礼

ありがとうござます。理解できました。8114301と言うのはファイル名だったんですね。何かのコードかと思いました。(笑) 問題なく目的の作業が出来るようになり、感謝いたします。ありがとうございました。ホントに助かりました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。Wendy02です。 >デスクトップ上のワードというフォルダーに保存する。 キメウチ(固有のPCのデスクトップ)でよろしいですか? キメウチでない(どのPCにも応用できるもの)と、少し考えなくてはなりません。。 例えばこんな風にして MY_PATH As String = "C:\Documents and Settings\[ユーザー名]\デスクトップ\Word\" [ユーザー名], Word の部分をそちらのPCに合うように書き換えてください。 Sub TestSaveR() Dim FileName As String Dim SaveName As String Const MYPATH As String = "C:\Documents and Settings\[ユーザー名]\デスクトップ\Word\"  FileName = ActiveDocument.Name  SaveName = Mid(FileName, 1, InStrRev(FileName, ".") - 1)    ActiveDocument.SaveAs MYPATH & SaveName, FileFormat:=wdFormatDocument  ActiveDocument.Close False  Application.Quit End Sub

wasamon
質問者

お礼

自分なりに考えて、以下の行を削除したらうまく行きました。 Application.Quit 本当にありがとうございました。最後にもう一つ質問させてください。 Application.Quit 'Application.Quit は何が違うんでしょうか?

wasamon
質問者

補足

Wendy02さん ありがとうございます!出来ました。感謝です。 しかし、ファイルを同時に10個開いて、一つ目のファイルで実行すると一つ目のファイルは保存できるんですが、その他のファイルも同時に閉じてしまいます。最初に教えていただいた方法だと一つずつマクロを実行することが出来たんですが・・・。よろしくお願いします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 たぶん、ファイルフォーマットを変えてあげないといけないのだと思います。 拡張子は、以下の & ".doc" は、本来要りませんが、一応、拡張子は、Wordの標準で付けておきます。 また、保存先が、以下の場合、カスタマー設定のデフォルトフォルダになります。当たり前のことですが、一応、VBAのコードの保存先は、Normal.Dot 側がよろしいかと思います。 Sub TestSave() Dim FileName As String Dim SaveName As String  FileName = ActiveDocument.Name  SaveName = Mid(FileName, 1, InStrRev(FileName, ".") - 1) & ".doc"    ActiveDocument.SaveAs SaveName, FileFormat:=wdFormatDocument  ActiveDocument.Close  'Application.Quit End Sub

wasamon
質問者

補足

ありがとうございました。出来ました。大変助かります。 >保存先がカスタマー設定のデフォルトフォルダー・・・ こちらは変更できるでしょうか?もしくは、特定のフォルダーに保存するように出来るでしょうか? 例えば、デスクトップ上のワードというフォルダーに保存する。と言う感じです。 よろしくお願いします。

  • starsip
  • ベストアンサー率36% (22/60)
回答No.1

Sub test()'保存してファイルを閉じる ThisDocument.Save ThisDocument.Close End Sub Sub test2()'保存してwordを終了する ThisDocument.Save Application.Quit End Sub

wasamon
質問者

お礼

回答ありがとうございました!

関連するQ&A