• ベストアンサー

エクセル VBA マクロを動かしたときに元々開いているファイルを閉じる・・・

いつも皆様には大変お世話になっております。 早速質問ですが、 「もしこのマクロが動く時点で他のExcelファイルが開いていたら、警告の上 自ファイルを閉じる、開いていなければ~実行」 という処理をかませたいと思っております。 ここの判定の方法がわかりません。(既にExcelが起動されていたら、でもいいのでしょうか。。。?) 下記のようなマクロを組んでいるので 他のファイルが開いていると厳しい状況です。 bname = "C:\" & Format(Range("q1").Value, "yyyymmdd") & "サンプル" & ".xls" ActiveWorkbook.SaveAs bname Workbooks.Open "C:\サンプル.xls" Workbooks(1).Close 本当は"yyyymmdd"&"サンプル"&".xls"ファイルだけ閉じられればいいのですが、自分の知識では上記のような形でしか動かせません;; もしご存知の方、ご教示ください。よろしくお願いします

  • nanny
  • お礼率55% (72/129)

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

  • ベストアンサー
  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.1

かなりVBAを勉強されているようですので、ヒントだけ。 要するにWorkbookを順にアクティブにし、アクティブなWorkbookの 名前が該当すれば閉じてしまえばいいんです。 IF ActiveWorkbook.name ="なんたら" then ActiveWorkBook.close こんな感じですかね。ステートメントは合ってるかどうか分かりませんが、 発想はコレでいけるはず。

nanny
質問者

お礼

早速のお返事ありがとうございます! 言われると なるほど!!って感じなのですがなかなか頭に思い浮かばないものですね;; 早速試してみます ありがとうございました

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

開いているブックの数は下記で判別可能です。 Workbooks.Count 自分だけなら1です。

nanny
質問者

お礼

なるほど~後はcount とifで何とかなりそうです。 ありがとうございました。

関連するQ&A

  • ExcelのマクロでCSVファイルを開くと遅いのですが

    ExcelのマクロでCSVファイルを開くと遅いのですが速く開く方法はありますか? 普通にファイル-開くに比べてかなり遅いです。 下記のVBAで記述してあります。 Workbooks.Open Filename:=fname ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=xlCSV, _ CreateBackup:=False ActiveWorkbook.Close savechanges:=False

  • ■ エクセルマクロについてです。初級?

    エクセルのマクロでデスクトップにあるエクセルファイルを開くにはどうしたらいいのでしょうか? 現在は、エクセルファイルA.xls B.xlsという2つを開いていて、マクロを実行することができるのですが、これをA.xlsだけ開いている上体で、実行したいのです。 なので、デスクトップに置いてあるB.xlsファイルを開くコマンド?というか、関数が知りたいのですが、どうしたらいいのでしょうか? 現在はこのような感じになっております。 Sub Macro2() ' ' Macro2 Macro ' マクロ記録日 : 2008/9/10 ユーザー名 : ' ' ActiveCell.FormulaR1C1 = "12345" Range("G17").Select ActiveCell.FormulaR1C1 = "129876" Range("G18").Select Windows("B.xls").Activate Range("N16").Select ActiveCell.FormulaR1C1 = "8/4/2008" Range("N17").Select ActiveWorkbook.Save Range("O16").Select ActiveWorkbook.Save ActiveWindow.Close End Sub

  • VBA 新規にエクセルを開き既存のファイルを開く

    VBAで新規にエクセルのアプリケーションを起動し、 その中に既存のファイルを起動する方法は有りますか? Sub Sample() Dim appExcel As Excel.Application Dim WSH As Variant Dim strPath As String Set appExcel = New Excel.Application Set WSH = CreateObject("Wscript.Shell") strPath = ActiveWorkbook.Path With appExcel .Visible = True .Workbooks.Add .ActiveWorkbook.SaveAs (strPath & "\ test.xls") End With Set WSH = Nothing End Sub このコードは、ネットから拾ったサンプルコードなのですが 新しいアプリケーションでエクセルを立ち上げることはできたのですが 新規のブックが開いてしまい、 更に、開きたいファイルに上書き保存してしまいそうです。 新規のブックが開く原因は .Workbooks.Addで、 上書き保存する原因は .ActiveWorkbook.SaveAs だとわかってるのですが、 この部分を同変更すればいいのかがわかりません。 Workbooks.Open?Filename:="C:\Users\test.xlsx" だと、現在実行しているvbaファイルを同じ枠内で 該当のファイルが開いてしまいます。

  • ExcelのVBAでブックの保存

    ExcelのVBAでブックを追加し保存を行っています。 その際、保存は、どこに行うのがよいのですか bookですか。sheetですか。 両方で、SaveAsができまが、使い分けがあるのでしょうか。 どのように使い分けするのでしょうか。 Workbooks.Add ActiveSheet.Name = "サンプル" ActiveSheet.SaveAs OutFileName ActiveWorkbook.SaveAs OutFileName ActiveWorkbook.Close

  • Excelマクロでyyyymmddの変数

    Excelのマクロで他のファイルを呼び出す際、当日や前日(ファイル名:yyyymmdd.xls)のファイルを指定したいのですが、変数を指定する方法を教えてください。 Workbooks.Open Filename:="C:\WINDOWS\デスクトップ\20040215.xls"←これを変数にしたい

  • 【Excel VBA】エクセルファイルを新規作成し、それを画面に表示せずに内容を変更するには?

    いつもお世話になっております。 今回はExcelのVBAについて質問があります。 例えば、以下のようにVBAを書くと、C:\test\1.xlsが作成され、その内容が変更されます。 Workbooks.Add.SaveAs dirName + "C:\test\1.xls" Workbooks("1.xls").Worksheets("Sheet1").Cells(1, 2).Value = 777 Workbooks("1.xls").Save Workbooks("1.xls").Close しかし、Workbooks.Add.SaveAsしてWorkbooks("1.xls").Closeするので、C:\test\1.xlsが一瞬画面に現れます。 それに、ちょっと動作が遅い感じがします(わざわざ画面に表示しているから?)。 C:\test\1.xlsを画面に表示させずに、その内容を変更する方法はありませんでしょうか? 実は、一つのExcelファイルの内容から、1000件程度のExcelファイルを作成する必要があります。 毎回、画面を表示していると大変遅くなってしまう恐れがあるのです。 上記の解決方法、又は参考になるWebサイトをご教示いただけると助かります。 以上、よろしくお願いします。

  • アクティブのファイルを閉じるマクロについて

    Excelについて質問ですが、 今2つファイルを開いておりまして、 ActiveWorkbook.Closeでアクティブのほうを閉じたんですが、 Windows("sample.xls").ActivateでExcelをアクティブの 状態にしたいのですが、なぜかデスクトップの画面のままに なってしまいます。 これは仕様でしょうか。 その他方法があるようでしたら教えてください。

  • EXCEL VBA セルからファイル名を読み込む

    EXCEL VBAについての質問です 同じ処理を名前の違う複数のファイルで行いたいと思っています そこで、セルA2へファイル名の『○○.xls』○○部分だけをそれぞれのファイルに書き込んでおき、マクロは共通にしてファイル名をそれぞれのファイルから読み込んで実行したいと思っています。 良い方法を教えてください。 Workbooks("200809.csv").Activate Sheets("200809").Select Range("C3:C33").Copy Windows("○○.xls").Activate'←ここをファイルにあわせて変更できる形にしたい Sheets("報告書").Select Range("G5:G35").Select ActiveSheet.Paste Windows("200809.csv").Activate Range("K3:K33").Copy Windows("○○.xls").Activate’←ここ Sheets("報告書").Select Range("I5:I35").Select ActiveSheet.Paste Workbooks("200809.csv").Close SaveChanges:=False よろしくお願いします。

  • 【マクロ】エクセル 複数のsheet ファイル分け

    いつもお世話になります。 エクセル2003で、下記記述のマクロにて、 一つのファイルにまとまった3つのsheetを個別の ファイルにするよう、使用してました。 エクセル2013でもこのマクロは利用できるのですが、 xlsでなく、xlsxで作成されてしまうため、 どのようにこのマクロを書き変えると、xlsで実行される ようになりますでしょうか。 この記述以外でも問題ございません。 どうか、どなたかお知恵を拝借できると幸いです。 マクロ----------------------- sub macro1() dim s as worksheet for each s in worksheets s.copy activeworkbook.saveas s.name activeworkbook.close false next end sub --------------------------

  • エクセル マクロの記述(フォルダーの移動、削除)

    現在開いているエクセルのファイルにマクロを記述し、 1 「処理済」というフォルダーに、開いているエクセルファイルを移動して、同じ名前でエクセルを保存する。 2 「CSV」というフォルダーに、開いているエクセルファイルをCSVファイルに変換して名前を「処理.csv」とし保存する。 3 現在開いているエクセルファイルは削除する。 以上の三つの処理をさせようと、以下のようにしましたが、1,2の処理は出来ましたが、3の開いているエクセルファイルが残ってしまいます。 以上三つの処理が一度に出来るマクロの記述を教えて下さい。 よろしくお願いします Sub マクロ() ActiveWorkbook.SaveAs Filename:="C:\処理済\" & ActiveWorkbook.Name ChDir"C:\CSV" ActiveWorkbook.SaveAs Filename:= "C:\CSV\処理.csv" _ , FileFormat:=xlCSV, CreateBackup:=False Application.DisplayAlerts = False If Workbooks.Count = 1 Then Application.Quit Else ActiveWorkbook.Close End If Application.DisplayAlerts = False End Sub

専門家に質問してみよう