- ベストアンサー
エクセルマクロでファイルを保存するとき
エクセル(2000)のマクロで、csvファイルを集計して、そのファイルをエクセル形式で保存しようとしています。 このとき、「カレンダー用データファイル」という名前で保存するように指定していますが、もし、同名のファイルが開いていたりすると エラーが出てしまいます。 マクロの中で、「カレンダー用データファイル」という名前のファイルが、現在開いていないか調べることが出来るのではと、いろいろ探してみたのですが、どうしても判りません。 どなたか 教えていただけませんか? また、同様のことを何度も繰り返すので上書き保存をしたいのですが、いちいち「同名のファイルがありますが上書きしますか?」というアラートを出さなくて住む方法もありましたら教えていただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 Application.DisplayAlerts = False でアラート表示が出なくなります。 使い終わったら必ず True に戻します。 例は、新規ブックに貼りつけて、一度保存してから実行します。 このマクロを含むブックと同じパスに、このブックのコピーを「ほげ.xls」という名前で作ります。ほげ.xlsが開いている時はメッセージを表示し、 On Error Resume Next で、万一コピーに失敗しても Application.DisplayAlerts = True を通過するようにしています。 Sub Test() Dim saveName As String, wb As Workbook saveName = ThisWorkbook.Path & "\ほげ.xls" For Each wb In Workbooks If wb.FullName = saveName Then MsgBox wb.FullName & "を閉じてからね。" Exit Sub End If Next wb Application.DisplayAlerts = False On Error Resume Next ActiveWorkbook.SaveCopyAs saveName Application.DisplayAlerts = True End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
読みこんだブックに同名ブックが存在の判別のところだけです。 Module1に挿入して実行。2-3で実効済み。 新規分はBook1.xlsで無く、Book1で聞くこと。 Sub test02() Dim a As Workbook Dim bn as String ' bn = "bb1.xls" ' bn = "abc28.xls" bn = "Book1" For Each a In Application.Workbooks If a.Name = bn Then MsgBox bn & "があります" GoTo p01 Else End If Next MsgBox bn & "がありません" Exit Sub p01: End Sub
- Fat01ton
- ベストアンサー率46% (122/264)
アラーとを出さない方法はわかりませんが 現在開いていないかはもっと良い方法があるかとは思いますが こんな感じでも調べることが出来るかと思います。 Sub test() Dim i 'カウンタ For i = 1 To Workbooks.Count '※ ワークブックの数だけ繰り返す If ("カレンダー用データファイル.xls" = Workbooks(i).Name) Then MsgBox "ファイルを開いています" End If Next End Sub