Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows XP Professional : Excel 2013)
別なプロセスで開いているブックを閉じる
投稿日時: 20/07/23 17:43:49
投稿者: 天使めぐ

いつもありがとうございます。
今回もよろしくお願いします。
 
手動で開いたブックを バッチファイルから起動したブックから自動で閉じようとしましたがうまくいきません。
どうやら 別々のプロセスで開かれていることが原因みたいです。
 
別なプロセスで開いているブックを閉じることは可能でしょうか?
可能であればその方法をご教授いただきたいと思っています。
 
もしくは バッチファイルで開くときに先に開いたプロセスを指定して開く方法でも結構です。
 
よろしくお願いします。
 
 
 
VBAでは次の様な方法でブックを閉じようとしています。
 
 Dim FNAME As String
    
    FNAME = Range("E5")
    
   For Each file_name In Windows
        If file_name.Caption = FNAME Then
             Windows(FNAME).Activate
                 ActiveWorkbook.Save
                    ActiveWorkbook.Close
      End If
  Next
 
 
 
バッチファイルでは儀の様な方法でブックを開こうとしています。
 
@echo off
 
c:
cd \Program Files\Microsoft Office\Office
start Excel.exe "D:\加工指示書\作成ツール.xls"

回答
投稿日時: 20/07/23 18:32:35
投稿者: WinArrow
投稿者のウェブサイトに移動

GetObjectを使ったらいかがでしょう?
  

    Set book = GetObject("D:\加工指示書\作成ツール.xls")
 

投稿日時: 20/07/24 09:52:50
投稿者: 天使めぐ

WinArrow様
迅速な回答ありがとうございます。
 
課題が残りましたが閉じることが出来ました。
EXCELのプロセス(枠だけ)が残ってしまいます。
 
こんな風にやってみました。
何が足りないのでしょうか?
 
    If Dir(Range("B5"), 0) <> "" Then
        Set book = GetObject(Range("B5"))
            book.Close SaveChanges:=True
                 
    End If
     
Range("B5")には フルパス.xls
 
 

回答
投稿日時: 20/07/24 10:10:34
投稿者: WinArrow
投稿者のウェブサイトに移動

掲示のコードをこちらでもテストしてみましたが
 
もしかしたら
Range("E5")に入っているデータに問題があるかもしれません。
(If file_name.Caption = FNAME Thenが成立しえいない)
 
 
実際にどのようなデータが入っているか?
ステップ実行で、または、Debug.Pint で
確認してみるとよいでしょう。
 
 
もっと簡単な方法は
GetObjectを使う方法です。
 
 
 

投稿日時: 20/07/24 10:16:03
投稿者: 天使めぐ

WinArrow様
 
GetObject を使ったらできました。
 
でも 空のEXCELが残ってしまうのです。
 
 
 
    If Dir(Range("B5"), 0) <> "" Then
        Set book = GetObject(Range("B5"))
            book.Close SaveChanges:=True
                  
    End If
      
Range("B5")には フルパス.xls

回答
投稿日時: 20/07/24 10:40:45
投稿者: simple

    Dim app As Application
と宣言して置いて、
Bookを取得したあとで、
    Set app = book.Parent
    book.Close SaveChanges:=True
    app.Quit
などとしてみては?

投稿日時: 20/07/24 10:52:16
投稿者: 天使めぐ

WinArrow様
 
完璧です!
 
Dim app As Application
 
    If Dir(Range("B5"), 0) <> "" Then
        Set book = GetObject(Range("B5"))
      Set app = book.Parent
              book.Close SaveChanges:=True
              app.Quit
    End If
       
Range("B5")には フルパス.xls
 
 
で〜 ばっちりでした〜
ありがとうございます。