- ベストアンサー
Wordの名前を付けて保存のマクロを教えてください
いつもお世話になっています。 名前を付けて、特定のフォルダに保存したいのですが、.GetSaveAsFilenameのところで 「メソッドまたはデータ メンバが見つかりません。」のエラーがでてうまく動きません。 何処が間違っているのか教えてください。よろしくお願いします。 元のデーターは、別のフォルダに入っていて、その名前を取得したいです。 しかし、その名前の修正をしたいときもあるので、確認して保存したいです。 ご教授お願いします。 SUB test() Dim fname As String Dim SF As String SF = "\\osaka\PCBackup\" fname = Application.GetSaveAsFilename(SF, _ FileFilter:="wordファイル,(*.doc),*.docx") ActiveDocument.SaveAs Filename:=fname End Sub
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
Wordで動作させるVBAでしょうか? もしそうだとすればExcelのダイアログを使う 意味がわかりません WordのVBAで保存ダイアログを表示し保存できる VBAサンプルを貼っておきます Excelの機能を使う必要のないものです Sub test() Dim fname As String Dim SF As String SF = "\\osaka\PCBackup\" '現在開いているファイル名を取得 fname = ActiveDocument.Name With Application.FileDialog(msoFileDialogSaveAs) '保存先を開いてファイル名は現在開いているものにする .InitialFileName = SF & fname If .Show = False Then Exit Sub 'キャンセル Else .Execute '保存 End If End With End Sub いろいろ案がでているようなので Excelで動作させるVBAであって 求めているものと違うのであればごめんなさい ちなみに With Application.FileDialog(msoFileDialogSaveAs) を With Application.FileDialog(msoFileDialogFilePicker) に変更するとファイル参照用のダイアログがでます ただし動作内容のVBAは変更する必要がありますけど 今作っている部分を汎用はできるかと思います
その他の回答 (8)
- Prome_Lin
- ベストアンサー率42% (201/470)
「Set s = o.GetFolder("F:\E")」の「()」内をご自分の指定したいフォルダにしてください。 「Set s = ~」は「オブジェクト」という概念になります。 「s = "F:\E"」ですと、単に「s」という変数に「F:\E」という文字列を格納しているだけですが、「オブジェクト」ですと、プログラムの機能として覚えている、というような感覚です。 従って、「F:\E」で単純にいい処理と、ダメな場合が出て来ます。 「For Each n In s.Files」の場合は、ダメな場合で、単に「"F:\E".Files」とは意味が異なり、システムとして「F:\E」を取得している、というような感じです。 分かりにくい説明で申し訳ございません。 なお、「For Each n In s.Files」を使うと、「s」のフォルダに存在するすべてのファイルを1つずつ調べてくれます。 直接、ファイルの数を知りたければ「s.Files.Count」になります。
お礼
Prome_Lin 様 ありがとうございました。 今の私には難しすぎて、ちゃんと理解できていませんが、何か月か経って見直した時に、少しでもわかるように頑張りたいと思います。 何度もご解答いただきありがとうございました。
- saya_linux
- ベストアンサー率57% (8/14)
With Application.FileDialog(msoFileDialogFilePicker) の部分を With Application.FileDialog(msoFileDialogSaveAs) にしてください 保存機能をもった保存専用のダイアログが開き msoFileDialogSaveAsで保存ダイアログを開いた場合に if文の部分は保存動作の可否をする部分です msoFileDialogFilePickerで動作させたい場合は 保存動作のコードを自分で記述しなければならないです その場合はFilter指定で必要な拡張子だけ対象として表示したり カスタマイズ性は高いです その場合は最初に作成をすすめていたコードに近いものを 記述することになると思います
お礼
saya_linux 様 ありがとうございました。 完璧です! msoFileDialogFilePickerで動作させたい場合が来たら、また質問させていただくと思います。 その時は、ワードのカテゴリで投稿します。 ありがとうございました。
- saya_linux
- ベストアンサー率57% (8/14)
現在完成しているコードを 貼っていただけますか? Word2010以降でだけ動作すればいいのであれば No.6さんのSaveAs2メソッドを使うという手もありますね 従来のSaveAsも隠しメンバで残っていますので 手段としてはいろいろとありますが まずは現在どこに問題があるのかがわかりません
補足
saya_linux 様 お返事ありがとうございます。 フォルダは、保存するときに選ぶので、SFを取って、下記のようにしました。 Sub test() Dim fname As String '現在開いているファイル名を取得 fname = ActiveDocument.Name With Application.FileDialog(msoFileDialogFilePicker) '保存先を開いてファイル名は現在開いているものにする .InitialFileName = fname If .Show = False Then Exit Sub 'キャンセル Else .Execute '保存 End If End With End Sub 名前を付けて保存を7つぐらいのフォルダに分けて保存したいので、その都度、保存先が指定できると、マクロボタンを7つ作る必要がなくなるので、是非教えてください。 よろしくお願いします。
- Prome_Lin
- ベストアンサー率42% (201/470)
申し訳、ございません。 きっと、おやりになりたいことと違うのだと思うのですが・・・ 以下のWordのマクロは、特定のフォルダにある「拡張子」が「docx」か「doc」のファイルを取得しています。 なお、私の知っている「名前を付けて保存」のやり方は「ActiveDocument.SaveAs2("F:\E\abc.docx")」です。 きっと、こういう鈍くさいやり方ではなく、もっとスマートにやられたいのでしょうね。 もし、何かのヒントになれば、幸いです。 それから、「Word」の「VBA」のご質問でしたら、「Word」というカテゴリはありますから、そこに投稿しましょう。 Sub Test() Dim e, f As String Dim o, s As Object Set o = CreateObject("Scripting.FileSystemObject") Set s = o.GetFolder("F:\E") For Each n In s.Files e = o.GetExtensionName(n.Name) If e = "doc" Or e = "docx" Then f = o.GetBaseName(n.Name) End If Next End Sub
補足
Prome_Lin 様 ありがとうございます。 投稿カテゴリの件は、本当に申し訳ありません。以後、気を付けます。 さて、私はマクロ初心者で、時間のある時に、こんなことができればと ネットでコードを探して、つなぎ合わせたり、セルの位置を変えたりできるだけなのです。 自分にできる以上のことを求めてしまい、こちらでお世話になっている状態です。 教えていただいたコードは難しすぎて、sを 該当のフォルダ名に変更し nextの後に、ActiveDocument.SaveAs2("s&n")にするぐらいしかできませんでした。 ActiveDocument.SaveAs2("s&n")が違うようで、動きません。 もし、よろしければ、教えてください。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは どうも環境が違うみたいで、こちらでは上手く出来てしまいます。 No4さんの回答の方がいいですね。
お礼
ushi2015 様 ありがとうございました。 環境が違うと、違うものなのですね。。。難しいです。 今回は、投稿先を間違えてしまい申し訳ありませんでした。 いろいろと勉強になりました。 これからもよろしくお願いします。 ありがとうございました。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは これで、フォルダもファイル名も大丈夫でしたけど何か違ってますか? Sub test1() Dim fname As Variant Dim SF As String Dim exA As Object Dim Wn As String '元のファイル名 Wn = Application.ActiveDocument.Name Set exA = CreateObject("Excel.Application") SF = "\\osaka\PCBackup\" 'GetSaveAsFilename(InitialFilename, FileFilter, FilterIndex, Title, ButtonText) fname = exA.GetSaveAsFilename(SF & Wn, "Word Files (*.doc*), *.doc*") exA.Quit If fname <> False Then ActiveDocument.SaveAs FileName:=fname End If End Sub
補足
ushi2015 様 なんどもありがとうございます。 エクセルの名前を付けて保存ダイアログボックスのファイル名が空欄で出てきます。 Wnが表示されません。よろしくお願いします。 win7 Word2010 です。
- Prome_Lin
- ベストアンサー率42% (201/470)
あの~、エクセルのところで質問されている、ということは、エクセルの「VBA」でワードファイルを操作したい、ということですよね? 私がいつもやっているのは、 Option Explicit Sub wd() Dim f, w As Object Set w = CreateObject("Word.Application") Set f = w.Documents.Open("F:\あ.docx") f.SaveAs ("F:\い.docx") f.Close End Sub という方法なのですが、何よりまず、「Set w = CreateObject("Word.Application")」がないと、エクセルの場合はワードを操作できないと思うのですが・・・
補足
Prome_Lin 様 ありがとうございます。 候補カテゴリにワードがなかったので、エクセルで投稿してしまいました。 申し訳ありません。 エクセルは関係なしでお願いします。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは WordにはGetSaveAsFilenameが無いので、 Sub test() Dim fname As Variant Dim SF As String Dim exA As Object Set exA = CreateObject("Excel.Application") SF = "\\osaka\PCBackup\" ChDir SF fname = exA.GetSaveAsFilename("", "Word Files (*.doc*), *.doc*") exA.Quit If fname <> False Then ActiveDocument.SaveAs FileName:=fname End If End Sub こんな感じで。
補足
ushi2015 様 ありがとうございます。 WordにはGetSaveAsFilenameが無いのですか! 勉強になります。 だから、エクセルの名前を付けて保存ダイアログボックスが出てくるのですね。 そこまでは、なんとか理解できたと思うのですが 質問A、保存先がマイドキュメント が出てきます。 質問B、元のファイル名をそのままダイアログボックスに入れて表示したいのですが空欄になり、名前を入力しても、拡張子が付きません。 そこで、 Dim Wn As String ’元のファイル名 Wn = Application.ActiveDocument.Name Set exA = CreateObject("Excel.Application") SF = "\\osaka\PCBackup\" ChDir SF fname = exA.GetSaveAsFilename(SF & "\" & Wn, "Word Files (*.doc*), *.doc*") exA.Quit If fname <> False Then ActiveDocument.SaveAs Filename:=fname End If のように変更したら、保存したいフォルダは出てきました。 あと、元のファイルの名前を新しいファイル名に引き継ぐ方法を教えてください。 よろしくお願いします。
お礼
saya_linux 様 ありがとうございます。 ばっちり、希望通りに動きました。 エクセルのダイアログを使ったのは、私が間違ってエクセルのコーナーで 投稿してしまったからだと思います。 お騒がせして申し訳ありません。 SFを削除しただけで、参照用のダイアログも使えました。 ありがとうございました。
補足
すみません、お礼を言った後ですが、参照用のダイアログで保存できませんでした。 ファイル名が見つかりません・・・と。 他にどこを変更すればいいのでしょうか? よろしくお願いします。