

wordの差し込み印刷で、PDFファイルで保存するマクロを作成したのですが、
保存先の「出力」フォルダーに、PDFファイルとワードファイルが作成されます。
不要なワードファイルを削除しようと、
Kill myMainDoc.Path & "\" & "出力\" & myFileName & ".docx"
を入れているのですが、ワードファイルが削除できません。
なぜでしょうか?
------------------
Sub 差し込み印刷_レコード毎に別ファイルで保存()
Dim myMainDoc As Document: Set myMainDoc = ActiveDocument
With myMainDoc.MailMerge
'-------------------------------------------
'ファイル名の指定
'-------------------------------------------
Dim myFieldName As String
myFieldName = "出力ファイル名"
If IsValidFieldName(.DataSource.FieldNames, myFieldName) = False Then
MsgBox "フィールド名が間違っています", vbExclamation
Exit Sub
End If
'-------------------------------------------
'差し込み印刷の設定
'-------------------------------------------
'新規文書に書き出す
.Destination = wdSendToNewDocument
'空白の差し込みフィールドを印刷しない
.SuppressBlankLines = True
'-------------------------------------------
'本処理
'-------------------------------------------
Dim i As Integer 'レコード番号
Dim iMax As Integer '対象となる最終レコード番号(レコード数ではない)
.DataSource.ActiveRecord = wdLastRecord
iMax = .DataSource.ActiveRecord
Dim j As Integer: j = 0 '作成したファイルの通し番号
For i = 1 To iMax '全レコードを対象にループ処理
'レコードの指定(1つのレコードに限定)
With .DataSource
.FirstRecord = i
.LastRecord = i
.ActiveRecord = i
End With
On Error Resume Next
.Execute
If Err = 0 Then
'-------------------------------------------
'レコードが対象として選択されている場合:差し込み印刷を実行
'-------------------------------------------
j = j + 1
Dim myFileName As String: myFileName = .DataSource.DataFields(myFieldName).Value
If myFileName = "" Then myFileName = "★" & myFieldName & ":不明★"
myFileName = myFileName 'ファイル名:通し番号+指定したフィールドの値
'新規文書に名前をつけてdocx形式で保存
Dim myNewDoc As Document: Set myNewDoc = ActiveDocument
myNewDoc.SaveAs FileName:=myMainDoc.Path & "\" & "出力\" & myFileName & ".docx", _
FileFormat:=wdFormatXMLDocument, _
AddToRecentFiles:=False
Dim myFilePath As String '保存先のフォルダパス
Dim myDoc As Document
Dim intPos As Integer 'ピリオドの位置
Set myDoc = ActiveDocument
'拡張子のない名称を取得
myFileName = myDoc.Name
intPos = InStrRev(myFileName, ".")
myFileName = Left(myFileName, intPos - 1)
'PDFファイルで保存
myFilePath = myMainDoc.Path 'Wordファイルと同じフォルダ
myDoc.ExportAsFixedFormat _
OutputFileName:=myFilePath & "\" & "出力\" & myFileName & ".pdf", _
ExportFormat:=wdExportFormatPDF
Kill myMainDoc.Path & "\" & "出力\" & myFileName & ".docx"
Set myDoc = Nothing
myNewDoc.Close
DoEvents
Set myNewDoc = Nothing
Else
'-------------------------------------------
'レコードが対象として選択されていない場合:エラー発生
'-------------------------------------------
Err.Clear
End If
Next i
End With
Set myMainDoc = Nothing
End Sub
Function IsValidFieldName(myFieldNames As Object, myFieldName As String) As Boolean
IsValidFieldName = False
Dim myName As Object
For Each myName In myFieldNames
If myName.Name = myFieldName Then
IsValidFieldName = True
Exit For
End If
Next
End Function
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
やはり開いている自分を削除しようとしたためでしたね。
No.1にあるように「作らない=別名で保存しない」という選択が一番なんでしょが、何か不都合があるのでしょう。
対策としては、一旦ダミーの別名で保存すると、削除対象のファイルは閉じた別物になるはずですので、削除可能になると思います。
試してみてください。
No.2
- 回答日時:
No.1です。
とりあえず、On Error Resume Next
を取り除いてみましたか?
私の説が正しければ、
>Kill myMainDoc.Path & "\" & "出力\" & myFileName & ".docx"
で、エラーが起きているはずです。
他にエラーが起きてそこまでたどり着けないのでしたら、途中のPDFファイルの部分は一旦パスして走らせてみてください。
先ずはそこからです。
既にお試しでしたら、この回答はスルーして構いません。
No.1
- 回答日時:
>myNewDoc.SaveAs FileName:=・・・・・・
この処理によって、最初読み込んだマクロを含んだファイルの本体がこちらになっています。
※一般的な操作でいえば、名前を付けて保存するようなもの。
つまり
>Kill myMainDoc.Path & "\" & "出力\" & myFileName & ".docx"
は、自分自身を削除しろという命令です。当然、開いていますからエラーが起きませんでしたか?
On Error Resume Nextによってスルーしているのでしょうね。
後で消すくらいなら、最初から作らなければよいのではないですか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) excel VBAでメールを送る方法について 2 2021/11/03 15:34
- Visual Basic(VBA) Excel VBAでフォルダ内の全テキストファイルの任意データを取得について 7 2021/12/18 16:00
- Visual Basic(VBA) Excel VBAでWordの複数ファイルを統合する場合のエラーについて教えてください 11 2021/12/29 12:11
- Visual Basic(VBA) VBA excelからメールを送る方法について 1 2021/11/03 11:30
- Word(ワード) word_VBA_フォームからダイアログそこからの復帰について 2 2021/12/13 23:44
- Visual Basic(VBA) 空のシートに関数を入れたい 2 2021/12/03 15:08
- Visual Basic(VBA) サブフォルダ含むすべてのフォルダの Excel 検索 4 2021/12/13 09:33
- Visual Basic(VBA) シート名をフォルダ名に変更 1 2021/12/01 15:59
- Visual Basic(VBA) EXCLE VBA シートクリックしたら該当シートコピー 1 2021/11/11 16:37
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クライアントからのDBアクセス
-
DataGridViewの、選択されてい...
-
VB.netの戻り値が返ってこない
-
iserease のDB2 UDBに対してODB...
-
COBOL初心者です。
-
データベースへのinfoの入力
-
ADO VBA 実行時エラー3021
-
Access でレコードセレクタが押...
-
DetailsViewで挿入後、挿入した...
-
レコードが存在しなかった場合
-
データセットのレコード更新が...
-
レコードセット(ADO.Recordset)...
-
mysql内のデータを表示させたい
-
カレントレコードが無い事を判...
-
Excel VBA読み込みで文字化けが
-
vb.netのdatatableのレコード削...
-
Javaで使用するデータベースの...
-
Accessデータシートビューの行...
-
ワードの差込印刷で教えて下さ...
-
レコードセットのリターンについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DataGridViewの、選択されてい...
-
カレントレコードが無い事を判...
-
レコードが存在しなかった場合
-
差し込み印刷のレコード数について
-
アクセスでレポートの1印刷内...
-
ADO VBA 実行時エラー3021
-
レコードセット(ADO.Recordset)...
-
ACCESSで大量の更新を行うと「...
-
ファイル書込みで一行もしくは...
-
JSPのNULLレコード表示について...
-
ワードの差込印刷で教えて下さ...
-
固有レコード識別子の選択とは
-
データセットのレコード更新が...
-
DataGridViewの内容をDBに反映...
-
Access でレコードセレクタが押...
-
[VBA] ADOの Clone と AddNew
-
サブフォームに新規レコードを...
-
Access を×ボタンで閉じ...
-
ADODBのRecordset.Deleteのエラ...
-
サブレンジ分割されたNDB(富士...
おすすめ情報
マクロを含んだワードは、メイン.docm ですし、 "出力\" & myFileName & ".docx"
のmyFileNameは、まったく別の名前です。"出力\" の中には、myFileName.docxと、myFileName .pdfの2つのファイルが残るのです。
On Error Resume Next をはずすと、やはり止まりました
ファイルが見つかりません とでました。
msgbox でファイルのテキストを確認すると正しく表示されています。
ただ、一点気がついたのですが、止まったとき、削除対象ファイルはオープンになっていました。
Zincer さん
No.1にあるように「作らない=別名で保存しない」という選択が一番なんでしょが、何か不都合があるのでしょう。
→これはやったのですが、そうするとPDF作成時にエラーになります。
一旦ダミーの別名で保存すると、削除対象のファイルは閉じた別物になるはずですので、削除可能になると思います。
→ダミーファイルで別名保存してやってみましたが、
MsgBox "削除対象ファイル=" & myMainDoc.Path & "\" & "出力\" & myFileName & ".docx"
Kill myMainDoc.Path & "\" & "出力\" & myFileName & ".docx"
を設定しましたが、ファイル名は正しいのですが、Killで、やはりファイルがありませんエラーです。