• ベストアンサー

エクセルマクロでファイルを保存するとき

エクセル(2000)のマクロで、csvファイルを集計して、そのファイルをエクセル形式で保存しようとしています。 このとき、「カレンダー用データファイル」という名前で保存するように指定していますが、もし、同名のファイルが開いていたりすると エラーが出てしまいます。 マクロの中で、「カレンダー用データファイル」という名前のファイルが、現在開いていないか調べることが出来るのではと、いろいろ探してみたのですが、どうしても判りません。 どなたか 教えていただけませんか? また、同様のことを何度も繰り返すので上書き保存をしたいのですが、いちいち「同名のファイルがありますが上書きしますか?」というアラートを出さなくて住む方法もありましたら教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

こんにちは。 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)
回答No.3

読みこんだブックに同名ブックが存在の判別のところだけです。 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)
回答No.1

アラーとを出さない方法はわかりませんが 現在開いていないかはもっと良い方法があるかとは思いますが こんな感じでも調べることが出来るかと思います。 Sub test() Dim i 'カウンタ For i = 1 To Workbooks.Count '※ ワークブックの数だけ繰り返す If ("カレンダー用データファイル.xls" = Workbooks(i).Name) Then MsgBox "ファイルを開いています" End If Next End Sub