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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Vba ユーザ定義関数について教えてください
Visual Basic(VBA)
-
VB.NETでVBスクリプトを作るにはどうしたらいいですか?
Visual Basic(VBA)
-
自動VBAマクロって会社の中で禁止なんですか?
Visual Basic(VBA)
-
-
4
xmlドキュメントから別拡張子で保存したい
Visual Basic(VBA)
-
5
VBA 同じ名前のオブジェクトを選択したいのですが
Visual Basic(VBA)
-
6
一つのフォルダーに50個のエクセルファイルがあります。 各ファイルにはAとBのシートがあります。 5
Visual Basic(VBA)
-
7
Windows 11 Pro での、VBAのCode書き換えで、1点お教え願います。
Visual Basic(VBA)
-
8
VBEを開くのにコマンド名が「Visual Basic」な理由はなぜ?
Visual Basic(VBA)
-
9
Vba Cells.Findについて教えてください
Visual Basic(VBA)
-
10
select case について
Visual Basic(VBA)
-
11
【VBA】マクロの入ったファイルと同じフォルダに,出力したファイルを保存するコードについて
Visual Basic(VBA)
-
12
xlookup関数の引数を利用して検索元に移動するVBAコードについて
Visual Basic(VBA)
-
13
Excelで、改行がある場合の条件式(関数)の書き方を教えてください
Excel(エクセル)
-
14
Excelマクロで空白セルの大小比較処理について
Visual Basic(VBA)
-
15
VisualStudio2022をマクロみたいに自動プログラムを作成する方法を教えてください。
Visual Basic(VBA)
-
16
環境依存文字?をEnumで定義したい
Visual Basic(VBA)
-
17
(実行時エラー5852)ExcelデータをWordに差し込んだ後、Wordファイルを分割するマクロ
Word(ワード)
-
18
ノートPCでExcelを一部見せない状態で外部モニターに出力したい
Excel(エクセル)
-
19
Excel:文字との間に数字の組合せ、次のセルの数字を1ずつ増やすには?
Excel(エクセル)
-
20
エクセルのツールバーのプルダウンメニューの順番を変えたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル書込みで一行もしくは...
-
Access を×ボタンで閉じ...
-
データセットのレコード更新が...
-
COBOLでのランダムアクセス
-
JSPのNULLレコード表示について...
-
レコードセット(ADO.Recordset)...
-
VB.netの戻り値が返ってこない
-
カレントレコードが無い事を判...
-
DataGridViewにてセル以外をク...
-
ADODBのRecordset.Deleteのエラ...
-
Access のフォームで新しい行...
-
固有レコード識別子の選択とは
-
ヘッダレコードとトレーラレコ...
-
[VB6]プログレスバーコントロー...
-
Line Inputで文字化け(助けて...
-
DAO エクセルvbaからアクセ...
-
BASP21 で CGIとの通信
-
Accessで別テーブルの値をフォ...
-
select句副問い合わせ 値の個...
-
GROUP BYを行った後に結合した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードが存在しなかった場合
-
ADO VBA 実行時エラー3021
-
ファイル書込みで一行もしくは...
-
アクセスでレポートの1印刷内...
-
カレントレコードが無い事を判...
-
差し込み印刷のレコード数について
-
レコードセット(ADO.Recordset)...
-
ワードの差込印刷で教えて下さ...
-
DataGridViewの内容をDBに反映...
-
Access でレコードセレクタが押...
-
DataGridViewの、選択されてい...
-
JSPのNULLレコード表示について...
-
ACCESSで大量の更新を行うと「...
-
[VBA] ADOの Clone と AddNew
-
Access を×ボタンで閉じ...
-
サブレンジ分割されたNDB(富士...
-
ヘッダレコードとトレーラレコ...
-
データセットのレコード更新が...
-
DataGridViewにてセル以外をク...
-
Line Inputで文字化け(助けて...
おすすめ情報
マクロを含んだワードは、メイン.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で、やはりファイルがありませんエラーです。