アプリ版:「スタンプのみでお礼する」機能のリリースについて

wordで作成したファイルの最初の第1行名をファイル名として、名前を付けて保存できるマクロを作りたいのですが、うまくいきません。

Sub 保存()
Dim ファイル名 As Variant
ファイル名 = ActiveDocument.Paragraphs(1) & ".docx"
ActiveDocument.SaveAs FileName:=(ファイル名), FileFormat:= _
wdFormatXMLDocument
End Sub

ではだめなのですが、どなたか添削よろしくお願いします。困っております。なにぶん初心者ですので基本的な文法のミスかもしれないですが、うまくいきません。

A 回答 (2件)

パラグラフですから、行末に改行コードがついているのが、原因です。


それと、コーディングはできるだけ変数の型をハッキリさせる意味で
私ならこう書きます。
  Dim ファイル名 As String
  ファイル名 = ActiveDocument.Paragraphs(1).Range.Text
  ファイル名 = Left(ファイル名, Len(ファイル名) - 1) & ".docx"
    • good
    • 1
この回答へのお礼

教えていただいた内容で問題なく作動できました。本当にありがとうございます。
1行目のテキストをリターンを除いた文字数だけ抜き出すということですね?
勉強になりました。
evernoteに保存してある大量のウェブページをwordファイルで保存する際に効率よく使用することができました。ありがとうございました。

お礼日時:2010/11/24 20:16

ご質問の内容と違いますが、一行目を取って、直(じか)にファイル名とするのは、少し問題が残るような気がしましたので、以下のようにしてみました。



Word 2007 と下位バージョンとは挙動が違うようなので、自信が持てませんが、基本的には、Paragraph は、段落、Sentence は、文で、動作が変わってよいはずですが、変わらないような気がします。一応、安全措置をしました。

最初の1行目というのは、いろいろありますが、ファイル名の制限として、半角253のLong Name 設定にしました。

ファイル名の不要な文字に対しては、本来、Win32APIを使うべきかもしれませんが、大げさになるので止めました。不要なコードは、加えてください。

'//
Sub UseSaveAsMethod()
Dim nm As String
Dim n as Variant
nm = ActiveDocument.Paragraphs(1).Range.Sentences(1).Text
For Each n In Array(9, 10, 11, 12, 13, 22)
  nm = Replace(nm, Chr(n), "") '不要な文字の除去
Next
With Application.FileDialog(msoFileDialogSaveAs)
 .InitialFileName = MidB(nm, 1, 253) 'ファイル名の最大値まで
 .Show
 .Execute
End With
End Sub
    • good
    • 0

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