![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
既に開いているエクセルがあります。ファイル名は既知です。
この開いているエクセルを、アクセスから閉じたいのです。以下のようにコードを書いたところ、結局別のエクセルが開いて、それが閉じるだけで、元のエクセルは閉じません。
既に開いているエクセルを終了させる方法を教えてください。
Dim closefilename As String
closefilename = ”閉じたいエクセルのファイル名”
Set AppObj = CreateObject("Excel.Application") '実行時バインディング
Set WBObj = AppObj.Workbooks.Open(closefilename) 'ワークブックを開く
WBObj.Close SaveChanges:=True
AppObj.Visible = True
WBObj.Close
Set WBObj = Nothing '解放
AppObj.Quit 'Excel の終了
Set AppObj = Nothing
End Function
4行目で、ファイルがロードされていないエクセルが開いて、それが閉じるだけで、すでに開いているエクセルは閉じません。
No.2ベストアンサー
- 回答日時:
まず、「実行時バインディング」には「方法が2つ」あって、
「CreateObject関数」を使う方法
と
「GetObject関数」を使う方法
の2つです。
※「そう教えてくれる講師は皆無」、といっていいほど全滅状態で「居ない」(CreateObject関数ばっかり教える)ので、僕もちょっと前までは、「実行時バインディング=CreateObject関数だけ」と誤解していました。以下のサイトもご参考に。(ここでも「方法が2つある」とは書いてはありませんが)
http://www016.upp.so-net.ne.jp/cheetah/xlvba/VBA …
http://www.shoeisha.com/book/hp/pc/office/Word/f …
「CreateObject関数」と「GetObject関数」の、それぞれの利用シーンの違いは次の通りです。
(01)「CreateObject関数」→「新規に」Excelのファイルを作りたい時・かつ・それをリモコン操作したい。
(02)「GetObject関数」→既存のファイルを開きたい時、もしくはフルパスの分かっているファイルがすでに開いていて、それをリモコン操作したい時。
なので、今回のご要望では、「CreateObject関数」ではなくて、「GetObject関数」を使います。
ご質問にあった、「結局別のエクセルが開いて、それが閉じるだけ」という動作は、「CreateObject関数」を使う以上は、どうしてもそうなってしまいます。
あと、「GetObject関数」は、「既存のファイル」を扱えるのですが・・・、
(a):もしまだその目的の「既存ファイル」が開かれていなければ、それを開いて、オブジェクトとして取得し、返してくれる。よってその場合は「×××.Application=Visible」というコードが必要です。
(b):すでに目的の「既存ファイル」が開かれていれば、それを、オブジェクトとして取得し、返してくれる。この場合はすでに目に見えているので「×××.Application=Visible」というコードは不要です。
・・・のいずれかを、自動的にやってくれます。
もちろん、「実行時バインディングをしつつ」、(a):と(b):をしてくれます。
今回は、(b):のほうになりますね。
ご希望の動作は、多分ですが、以降に示したような感じのコードで実現できるのではないかと思います。コメントを多く書いてしまいましたので、邪魔だったら全部消して試してみてください。
(F8キーでのステップ実行をして、ローカルウィンドウでどの変数に何が入っているかなども確認すると、より、動作のイメージが明確になると思います。)
ただし、このコードでは、例えばExcel2010以前のバージョンで、「1つのExcelウィンドウの中に、複数のファイルが子ウィンドウで開いていた場合」は、それらのファイルも道連れに閉じてしまいます。
なので、もしそうしたくない場合は、
「先に1つ以上のファイルが開いていたら、目的のファイルだけ閉じて、
残りのファイルは閉じずに、アプリケーションウィンドウは残す。」
という動作に作り変えてください。
がんばってください。
=======================================
Function ExcelCloseTest01()
Dim App01 As Object '言わば「ガワ」を代入するための変数
Dim WBObj As Object '開いているブックを代入するための変数
Dim closefilename As String
'閉じたいファイルのフルパス
closefilename = "フルパスの内容"
'「実行時バインディング」をすると同時に、
'現在、開いているブックを取得(選択)して
'オブジェクト変数に代入します。
Set WBObj = GetObject(closefilename)
'WBObj.Application.Visible = True '既存ファイルが閉じていた場合だけ使う。
'※実行時バインディングは、
' CreateObject関数だけでなく、
' GetObject関数でもできます。
' そういう説明をしてくれるサイトも本も
' すごく少ないですけど。
'開いているブックのアプリケーションウィンドウ
'(=言わば空っぽの「ガワ」)を
'オブジェクト変数に代入します。
Set App01 = WBObj.Application
' 「Application」オブジェクト(=空っぽの「ガワ」)は
' 「ブック」の1つ上の階層のオブジェクトです。
' イミディエイトウィンドウにて
' ? TypeName(ActiveWorkbook.Parent) とか、
' ? ActiveWorkbook.Parent とやると、
' 多分、上記のコードが何をしているかの意味がわかると思います。
'開いているファイルを保存して閉じる
WBObj.Close SaveChanges:=True
Set WBObj = Nothing '解放
'残ったExcelのアプリケーションウィンドウ(言わばガワ)を閉じる。
App01.Quit
Set App01 = Nothing
End Function
=======================================
ありがとうございました。丁寧なコメント迄つけていただきありがとうございます。無事解決しまし得た。それにしても、いくらGoogl検索しても教えていただいた内容は見つかりませんでした。助かりました。
No.4
- 回答日時:
'--------------
Const CloseFile ="********.xls*" 'フルパスは不要です。
On Error Resume Next
Set AppObj = GetObject(,"Excel.Application") 'カンマに注意
AppObj.Workbooks(CloseFile).Close Ture
AppObj.Quit
On Error Goto 0
'--------------
たぶん、これで行けるでしょう。
AppObj.Quit の後に、AppObj が残っているかは調べていません。
直接、GetObject でファイルを開くと、Excel.Application の終わり方が面倒です。
ありがとうございました。GetObject Google検索してもこのようなものは見つからず質問した次第です、大変助かりました。
No.3
- 回答日時:
補足です。
Excel2013 以降は、
『1つのExcelウィンドウの中に、複数の子ウィンドウで複数のファイルが表示される』、
という仕様ではなく、
『ファイルを開くたびに、常に、Excelウィンドウも個別・独立して開く』
という仕様なので、常に、前回の回答のコードで行けるか、もしかしたら、ブックを閉じるだけで「ガワ」のほうも道連れに消えるかもしれません。
そのあたりは、動きを見ながら必要に応じてコードを変えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
- Visual Basic(VBA) エラー処理 3 2022/04/11 14:58
- Visual Basic(VBA) バックグラウンドのプロセスのエクセルを閉じる方法 4 2022/05/12 15:39
- Visual Basic(VBA) エクセルVBA エクセルを開いた後に編集可能な状態にするには? 2 2023/06/14 11:58
- Excel(エクセル) デスクトップのエクセルで作成したファイルを開くと未記入のエクセルが開く 5 2022/08/17 15:55
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
このQ&Aを見た人はこんなQ&Aも見ています
-
今年はじめたいことは?
今年はこれをはじめたい!ということを教えてください!
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
コンビニでおにぎりを買うときのスタメンはどの具?
コンビニでおにぎりを買うとき、何の具材を選ぶことが多いですか?
-
あなたの人生で一番ピンチに陥った瞬間は?
これまでの人生で今振り返ると「あの時、1番ピンチだったなぁ...」という瞬間はありますか?
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
-
4
アクセスvbaでエクセルブックを保存
その他(Microsoft Office)
-
5
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
6
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
7
Access サブフォームでの選択行の取得
その他(データベース)
-
8
ACCESSのVBで、エクセルファイルの最終行を取得
Excel(エクセル)
-
9
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
-
10
AccessVBAで作成したExcelファイルを削除する方法は?
Visual Basic(VBA)
-
11
Access からオブジェクトとして開いたExcelのプロセスが終了しない
その他(データベース)
-
12
どこにもフォーカスを当てたくない
Access(アクセス)
-
13
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
14
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
15
Access終了時にマクロまたはVBAの実行したい
その他(Microsoft Office)
-
16
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
17
アクセスからエクセルのシートを追加して、名前をつける方法
Excel(エクセル)
-
18
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
19
アクセスからエクセルファイルを全て閉じたい
Access(アクセス)
-
20
レコードを保存するコード アクセスvba
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel に貼り付けた図形が、保...
-
エクセルが勝手に開く
-
ロータス1-2-3のファイルをエ...
-
VBA 新規ファイルを元ファイル...
-
アクセスVBAで既に開いているエ...
-
エクセルの表示サイズ変更(画...
-
エクセル関数のHyperLinkでの警告
-
EMBEDについて
-
ファイル名の末尾に文字を追加...
-
エクセルの列番号(上のA,B,C,D…...
-
エクセルはシートに関数が入る...
-
ワードに貼られたエクセルのリ...
-
エクセルで「ページレイアウト...
-
Macで作成したファイル(Word)を...
-
jtrim 1.53cが正常な動きをし...
-
メールでCADデータが送られまし...
-
至急!教えてください!!「Mic...
-
LANケーブルを挿すとEXCELが重...
-
pcゲームのセットアップが出来...
-
VBによるEXCELの書き込み
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel に貼り付けた図形が、保...
-
アクセスVBAで既に開いているエ...
-
エクセルが勝手に開く
-
ロータス1-2-3のファイルをエ...
-
VBA 新規ファイルを元ファイル...
-
エクセル関数のHyperLinkでの警告
-
エクセルの表示サイズ変更(画...
-
ファイル名の末尾に文字を追加...
-
ワードに貼られたエクセルのリ...
-
Excelファイルをコピー不可にす...
-
EXCELので作成した表をビルダー...
-
エクセルVBAでCSVを読み込んで...
-
お世話になっています. x軸は時...
-
[大至急!]ExcelSheetFreeの使...
-
ファイルを開く際、PERSONALシ...
-
xlsファイルの開き方(excel無...
-
エクセルはシートに関数が入る...
-
エクセル2003をエクセル2013で...
-
エクセル、編集中でロックされ...
-
EXCEL2000のファイル...
おすすめ情報