先日の記事にて「【Wordマクロ】Word起動時に、前回終了時に開いていたファイルを表示 」を紹介しました。もともとお客様からのご要望で作ってみたのですが、けっこう便利なので私もこのマクロが気に入って使っています。
今朝、Word起動時にこんなエラーメッセージが出てしまいました。これは、明らかにこのマクロのエラーです。私は昨夜、このファイル「マクロの表示画 面.docx」を一時的にデスクトップに保存しました。しかし、Wordを閉じた後、このファイルを別のフォルダに移動したのです。
(Windows 10だとこんな感じのメッセージボックスになります)
そのようなわけで、デスクトップにはもう存在しないファイルを開こうとしたので、エラーになってしまいました。こういうケースもありますね。そこでマクロを改良してみました。
ファイルの有無を確認後に、そのファイルを開くのです。そうしたら、エラーが表示されることはあります。
これでますます便利なマクロになりました。
そうそう、便利なマクロというと、Microsoft MVP (Outlook) のきぬあささん が、さっそく改良版のマクロを公開されています。
Re: 【Wordマクロ】Word起動時に、前回終了時に開いていたファイルを表示
“Word起動時にShiftキーが押されていたらファイルを開く” とのことで、早速試してみました。
ブログ記事にアドインが公開されているので、それをインストールしたらできました!
▼このマクロでできること
ブログ記事のタイトルの通りで、Word起動時に、前回終了時に開いていたファイルを表示します。
最後に開いていたファイルが存在しない場合(ファイルを削除した場合やファイルを移動した場合)には、その前のファイルを開きます。
▼マクロの解説
2つのマクロを紹介しています。
マクロ1は、For Next ステートメントで書きました。マクロ2はFor Each Nextステートメントで書きました。
同じようなマクロですが、新しいファイルから厳密に順番にファイルの有無を確認するためには、For Nextステートメントで i にてインデックス番号を指定した方がいいと思います(マクロ1の仕様)。
RecentFileオブジェクトには、ファイルには指定できる FullName プロパティがないので、ファイルのパスを取得するために青文字部分のようにPath プロパティと Name プロパティ を使用しています。
赤文字部分のDir関数を使ってファイルの有無を調べます。Dir関数は、パスとして指定したファイルが存在したときにファイル名(フォルダ名なし。拡張子付き)を返す関数です。
そのため、ファイル名を返した場合(つまり、戻り値が1文字以上の文字列の場合)には、そのファイルが存在すると判断できます。ファイル名が返らない場合(つまり、戻り値がない場合)には、そのファイルは存在しません。
▼マクロ1
Sub AutoExec()
Dim myRecentFile As RecentFile
Dim myPath As String
Dim i As Long
For i = 1 To Application.RecentFiles.Count
Set myRecentFile = RecentFiles(i)
With myRecentFile
myPath = .Path & Application.PathSeparator & .Name
End With
If Dir(myPath, vbNormal) <> "" Then
myRecentFile.Open
Exit For
End If
Next
End Sub
▼マクロ2
あんまり厳密じゃないかも。でも動きます。
Sub AutoExec()
Dim myRecentFile As RecentFile
Dim myPath As String
For Each myRecentFile In Application.RecentFiles
With myRecentFile
myPath = .Path & Application.PathSeparator & .Name
End With
If Dir(myPath, vbNormal) <> "" Then
myRecentFile.Open
Exit Sub
End If
Next
End Sub
▼関連記事