既に開いているエクセルがあります。ファイル名は既知です。
この開いているエクセルを、アクセスから閉じたいのです。以下のようにコードを書いたところ、結局別のエクセルが開いて、それが閉じるだけで、元のエクセルは閉じません。
既に開いているエクセルを終了させる方法を教えてください。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
コンビニでおにぎりを買うときのスタメンはどの具?
コンビニでおにぎりを買うとき、何の具材を選ぶことが多いですか?
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
アクセスvbaでエクセルブックを保存
その他(Microsoft Office)
-
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
6
ACCESSのVBで、エクセルファイルの最終行を取得
Excel(エクセル)
-
7
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
-
8
Access サブフォームでの選択行の取得
その他(データベース)
-
9
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
10
AccessVBAで作成したExcelファイルを削除する方法は?
Visual Basic(VBA)
-
11
Access からオブジェクトとして開いたExcelのプロセスが終了しない
その他(データベース)
-
12
アクセスからエクセルのシートを追加して、名前をつける方法
Excel(エクセル)
-
13
アクセスからエクセルファイルを全て閉じたい
Access(アクセス)
-
14
Access終了時にマクロまたはVBAの実行したい
その他(Microsoft Office)
-
15
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
16
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
17
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
18
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
19
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
20
どこにもフォーカスを当てたくない
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・ことしの初夢、何だった?
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel に貼り付けた図形が、保...
-
アクセスVBAで既に開いているエ...
-
ロータス1-2-3のファイルをエ...
-
エクセルが勝手に開く
-
エクセル関数のHyperLinkでの警告
-
VBA 新規ファイルを元ファイル...
-
エクセルの表示サイズ変更(画...
-
エクセルで「ページレイアウト...
-
至急!教えてください!!「Mic...
-
メールでCADデータが送られまし...
-
Macで作成したファイル(Word)を...
-
Outlookでメールが送信できない。
-
EXCELを起動したとき120%の表...
-
ExcelでVBA実行後×(閉じる)ボタ...
-
jtrim 1.53cが正常な動きをし...
-
windows10にupしたらoutlookが...
-
ACCESS2016でテーマが使用できない
-
Wordで作成したものをUSBに保存...
-
Wordファイルが開けません
-
Wordを起動したときのタイトル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel に貼り付けた図形が、保...
-
アクセスVBAで既に開いているエ...
-
エクセルが勝手に開く
-
ロータス1-2-3のファイルをエ...
-
VBA 新規ファイルを元ファイル...
-
ファイル名の末尾に文字を追加...
-
エクセルの表示サイズ変更(画...
-
[大至急!]ExcelSheetFreeの使...
-
Excelファイルをコピー不可にす...
-
ワードに貼られたエクセルのリ...
-
エクセルはシートに関数が入る...
-
エクセル関数のHyperLinkでの警告
-
EMBEDについて
-
エクセル、編集中でロックされ...
-
エクセルでメールの添付ファイ...
-
EXCELのVBAでやりたいことがあ...
-
お世話になっています. x軸は時...
-
xlsファイルの開き方(excel無...
-
OneDriveでエクセルの表が縦に分断
-
エクセルVBA 他のファイルから...
おすすめ情報