マクロ実行後にエクセルを閉じる方法

このQ&Aのポイント
  • マクロ実行後にエクセルを閉じる方法についてまとめました。エクセルを閉じるには、以下の命令を使用します。ThisWorkbook.Save、ThisWorkbook.Saved = True、If Workbooks.Count <= 1 Then Application.Quit、ThisWorkbook.Close Falseです。
  • しかし、これらの命令を実行しても、マクロ付きのエクセルが一旦閉じられた後に、別の白紙のブックが開かれてしまうことがあります。
  • この問題を解決するためには、マクロに適切な命令を追加する必要があります。具体的な方法については、以下の要点を参考にしてください。
回答を見る
  • ベストアンサー

マクロ実行後エクセルを閉じたい

2つの別々のファイルを開いて片方からもう片方にコピーして 保存して終了する。(両方とも閉じる) というマクロを作ったのですが コピー終了後に実行したマクロ付きのエクセルも閉じてデスクトップ上には何も開いていない状態にしたいのですがworkbookのところに 下記の命令を記述してもうまくいきません。 Application.Run "XXXXXX" ThisWorkbook.Save ThisWorkbook.Saved = True If Workbooks.Count <= 1 Then Application.Quit ThisWorkbook.Close False マクロ付きのエクセルも一旦は閉じるのですがその後に 別の白紙のブックが開いてしまうのです。 続けて他のマクロをスケジュールで実行したいのですが実行時に 「既にエクセルが開いています」みたいな警告が表示され 実行できません。 エクセルを完全に閉じるようにするにはどうしたらいいのでしょうか?

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

  • ベストアンサー
  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

こんなかんじでいけると思います。 ThisWorkbook.Save 'ThisWorkbook.Saved = True If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close End If ただ、別インスタンスで開いているブックは 感知していません。

weballergy
質問者

お礼

ご回答有難うございます。 早速複数のPCで試してみたところ、うまくいったPCもあれば 同じように別の白紙のブックが開くPCもありました。 PC毎に違う現象が起きるということはエクセルの設定が 何か問題になっているのでしょうか?

その他の回答 (1)

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.2

見落としてました。 ↓はどのようなマクロを走らせてるのでしょう? これが不具合の原因かもしれません。 >Application.Run "XXXXXX"

weballergy
質問者

お礼

xxxxxxは別シートのデータを貼り付けるマクロです。 マクロ自体は問題ないと思うのですが・・・ もう少し勉強してみます。 ご回答どうも有難うございます。

関連するQ&A

  • VBA 起動時にエクセルの画面が表示されてしまう

    VBA 起動時にエクセルの画面が表示されてしまう こんにちは、VBA初めて1週間ぐらいの初心者です よろしくお願いします 動作環境として、OS:XP excel:excel2007 を使用しています まずはじめに、エクセルを開いて内容変更セーブして終了するというマクロを組んだのですが 別のプログラムから、 そのエクセルファイルに起動をかけて マクロを実行し終了するよう作りました。  /*** コード ***/ ThisWorkbook 0  Private Sub Workbook_Open() 1   Application.Visible = False          //エクセル画面を消す 2    3   call 内容変更し保存する関数()        // 標準モジュール内 SUB 関数 4    5   ThisWorkbook.Saved = True           // セーブしたことにする 6   If Workbooks.Count <= 1 Then Application.Quit // 他のエクセルが開いてない場合のみ終了する 7   ThisWorkbook.Close False            // エクセル終了 8  End Sub  /*** コード ***/ 質問1 ・1行目にエクセルの画面を消す関数を、プログラムの先頭に来ると思われる部分に入れて実行してみたのですが、 どうしても、起動してから画面を消す処理が始まるまでに、一瞬だけexcelのファイルが表示されてしまうのですが これを回避する方法はありますでしょうか? VBAを使ってマクロの処理をするのですが、 使う方にエクセルを使っているという事を悟られたくないのです 質問2 ・6行目、開いてるエクセルが自分だけの場合のみエクセルを終了すると組んだつもりなのですが、 処理を流すとエクセルで開いているファイルがすべて閉じてしまいます。 記述を間違えていたりしますか? 以上 ご教授お願いいたします <<検索ワード>> VBA VBA 起動画面表示 起動画面非表示 起動画面を出さない 起動画面を消す

  • エクセルのブックを閉じるマクロについて

    エクセルのブックAとブックBが開いている状態で、 ブックAのボタンに登録して実行すると、ブックAのみ閉じる、 というマクロを作りました。(下部にコードを記載します) このマクロは、2つのブックが開いていると正常に稼働するのですが、 ブックが1つしかない場合、実行時エラーが出てしまいます。 (ブックAのみ開いた状態でこのボタンを押してもエラーなく閉じたい) 実行時エラーが出ないようにするにはどうすれば良いか、 おわかりの方がいらっしゃいましたら教えて下さい。 どうぞよろしくお願い致します。 Sub このブックのみ閉じる() Dim wa As String wa = "ほかに無い" Dim wb As Workbook For Each wb In Workbooks If wb.Name <> ThisWorkbook.Name Then wa = "ほかにあるよ" End If Next If wa = "ほかに無い" Then Application.DisplayAlerts = False Application.Quit '終了予定 End If Range("D2").Select Selection.ClearContents ThisWorkbook.Close SaveChanges:=False End Sub

  • Excelのマクロが実行されない

    Excelを立ち上げ、VBEでThisWorkbookに以下のマクロを記述します。 Dim WithEvents a As Workbook, WithEvents b As Workbook, WithEvents c As Workbook, WithEvents d As Workbook Private Sub Workbook_Open() Stop End Sub ファイルを保存してから起動し、マクロを有効にすると Stop で停止します。 ここで一旦 Stop を削除してから再度 Stop を挿入してから保存します。 再びこのファイルを起動し、マクロを有効にしても Stop で停止しません。 今回は簡単のため Stop にしていますが、実際には起動時の処理が実行されないため困っています。 OSはWindows7,Excelは2007です。

  • 【Excel VBA】マクロでExcel自体を終了させたい

    環境:WindowsXP、Excel2003 マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。 ThisWorkbook.Close ExcObj.Quit Application.Quit どこか悪いところはありますでしょうか? よろしくお願いします。

  • エクセル マクロ 簡素化

    マクロ初心者です。 下記のデータのコピペする、マクロを使用しています。 下記にはAAAとBBBの2つのエクセルへのコピペのみしか記述していませんが、 その下に50ファイル分のファイル名、コピー元、コピー先だけが違うマクロが並んでいます。 メンテナンスや更新に手作業で行っているので、非常に時間がかかります。 例えば、別のシートにファイル名、コピー元、コピー先の一覧を作成し、 そのシートでファイル名、コピー元、コピー先を修正し、コピペができるようになるなど、 どうにかして簡素化したいのですが、どのように実現すればいいか、教えてくださると助かります。 ---------------------------------------------------------------------- Private Sub CommandButton1_Click()   Dim wb As Workbook Application.ScreenUpdating = False Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\AAA.xls", UpdateLinks:=0) ThisWorkbook.Sheets("BBB").Range("A1:B1").Copy wb.Sheets("CCC").Range("A1:B1").PasteSpecial (xlPasteValues) Application.CutCopyMode = False Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\BBB.xls", UpdateLinks:=0) ThisWorkbook.Sheets("BBB").Range("A2:B2").Copy wb.Sheets("CCC").Range("A2:B2").PasteSpecial (xlPasteValues) Application.CutCopyMode = False Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True 'アイテム名、コピー元、コピー先、だけがちがう、同じようなマクロが50ファイル分ある。 End Sub

  • VBA=一定時間エクセルの入力操作がない場合、自動的にそのブックを閉じたい

    共通でエクセルを使用していますが、時々エクセルを開いたまま外出したり、休憩したり する方がおり、別な方がエクセルを開いて作業をしたいと思っても、どこかで開きぱなしのことが時々あります。 そんな時のために、エクセルに何も入力等がない一定時間経過したら、自動で保存して閉じる機能を持たせたいと考えています。例えば入力が5分以上なければ自動的に閉じるように・・・・ 上書き保存は下記のVBAで機能するのは確認済みですが、これに「5分後」等のタイムの設定をしたいのですが可能でしょうか? 可能の場合、どのようなVBAになりますか?? よろしくお願いします。 ⇒ 'ブックの上書き保存 ActiveWorkbook.Save ' 保存確認を避けるため、保存済みにする ThisWorkbook.Saved = True ' 他にブックが開いていなければ、Excelを終了する If Workbooks.Count <= 1 Then Application.Quit ' 本ブックをClose ThisWorkbook.Close False

  • エクセル2000ではOKなのに2003でエラーになるマクロについて

    下記のVBAコードにつきご教示ください。 終了時にワークシート上に配置したCloseButtonを押すと、ダイアログシート上に配置したフォームのDropDownsやEditBoxesを初期化して保存する単純なマクロです。 エクセル2000では問題なく、2003以降で使用すると実行時エラー424「オブジェクトが必要です」となります。 ただし、いろいろ試したところ以下のことがわかりました。 1.エラーが出るのはCloseButtonを押した場合のみで、エクセル画面右上の×で終了する場合はエラーになりません。 2.終了時以外にSub 初期化()を単独で実行してもエラーになりません。 3.このBOOKの他にもBOOKを開いている場合、(Workbooks.Count= 1でない場合)エラーになりません。 なぜこうなるのか不思議です。 ご教示いただければ幸いです。 Sub CloseButton() ans = MsgBox("終了しますか?", vbYesNo + vbQuestion, " おしまい?") Select Case ans Case vbYes Call Auto_Close Case vbNo Exit Sub End Select End Sub Sub Auto_Close() Call 初期化 ThisWorkbook.Save If Workbooks.Count = 1 Then Application.DisplayAlerts = False Application.Quit Else ActiveWorkbook.Close (False) End If End Sub Sub 初期化() With DialogSheets("Dialog1") .DropDowns.ListIndex = 1 'ここでエラー(「オブジェクトが必要です」) .EditBoxes.Text = "" End With End Sub

  • EXCELマクロ実行後、読み込み専用になってしまう

    EXCELマクロ実行後に読み取り専用になってしまう。 <内容>  1つのファイル(A)に他の複数のファイル(B,C・・・)内のシートを取り込んだ後、更新せずに終了させています。 <困ったこと>  そのマクロを実行したあと上記のファイルB,C・・・が読み取り専用になってしまいます。PCを再起動すると解除されます。  読み取り専用にならないようにする方法はありますでしょうか。  ご指導のほど、よろしくお願いいたします。 <参考> For Each fName In FSO.GetFolder(MyFolder).Files If FSO.GetExtensionName(fName) = "xls" And _  FSO.GetBaseName(fName) <> "ファイルA" Then  Set wBook = Workbooks.Open(fName)   For 番号 = 1 To Worksheets.Count  wBook.Worksheets(番号).Copy _  after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)   Next 番号    wBook.Close True   End If Next

  • エクセル マクロ 

    以下のマクロを作成し Fnameを開き、そのファイルで特定の文字列を探し、Offsetしたセルの値のコピー&ペーストをしようとしています。 しかし、ファイルは開くのですが、コピー&ペーストをいません。 どのようにすれば、実行できるのでしょうか? 変数やOffsetの使い方が違うと思うのですが、教えてください。  Dim Wbk As Workbook Dim Fname As String Dim f As Integer For f = 1 To 100 ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path Fname = Cells(f, 1).Value & ".xls" Application.ScreenUpdating = False Workbooks.Open (Fname), UpdateLinks:=0 Set Obj = Worksheets(Cells(f, 2).Value).Cells.Find(Cells(f, 3).Value) Obj.Offset(24, 0).Copy Obj.Offset(36, 0).PasteSpecial (xlPasteValues) Application.CutCopyMode = False Application.DisplayAlerts = False Workbooks(Fname).Close SaveChanges:=True Application.DisplayAlerts = True Application.ScreenUpdating = True Next f

  • excelファイルが意図せず起動

    下記を参考にして、起動時にタイマーを設定してexcelファイルを5分後に自動的に 保存・終了するようにしています。 http://okwave.jp/qa/q2911086.html しかし実際5分を待たず、手動でそのexcelファイルを終了した場合、 後でそのexcelファイルが自動で起動して、そのまま終了しているようです。 この症状をなくしたい場合どのように、記述を加えればよいか教えていただけないでしょうか? 記述は下記です。 '標準プロシージャ Public Operated As Boolean Sub SetTimer() Application.OnTime Now + TimeValue("00:05:00"), "CloseMe" End Sub Sub CloseMe() If Operated Then Operated = False SetTimer Exit Sub End If 'ブックの上書き保存 ActiveWorkbook.Save ' 保存確認を避けるため、保存済みにする ThisWorkbook.Saved = True ' 他にブックが開いていなければ、Excelを終了する If Workbooks.Count <= 1 Then Application.Quit ' 本ブックをClose ThisWorkbook.Close False End Sub 'ワークブックプロシージャ Private Sub Workbook_Open() Operated = False SetTimer End Sub Private Sub Workbook_BeforePrint(Cancel As Boolean) Operated = True End Sub Private Sub Workbook_Deactivate() Operated = True End Sub Private Sub Workbook_Activate() Operated = True End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) Operated = True End Sub

専門家に質問してみよう