[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ファイルを開くダイアログでキャンセルするとき』(noro)
連続して開くファイルを選択するために次のVBAを使っていますが、終了で開く必要がなくなったときキャンセルするとそのBookはそのまま残ってしまいます。
実行しているBook(または開いているBookすべて)を閉じたい場合、どのようにするのでしょうか。
book.Closeをを入れてもうまくゆきません。
Sub yobidasi() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Excelブック,*.xlsx") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If End Sub
< 使用 Excel:Excel2013、使用 OS:Windows7 >
全体像が見えないので何ともですけれど、マクロのブック以外全部閉じても良ければ そういう処理もかけますし、前回開いたファイルだけを閉じたければ、ファイルを覚えて おく必要があります。
現在のコードは開いたファイルを覚えていないので、このままだと何を閉じていいか わからなくなってしまいます。
ご参考までに前者のコードです。
For Each wb In Workbooks If wb.Name <> ThisWorkbook.Name Then wb.Close False Next
(Mook) 2014/06/08(日) 16:02
Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.ClearContents orgName = ThisWorkbook.FullName Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("A1").Value Workbooks(Abook).Close SaveChanges:=False Workbooks.Open Filename:=orgName '基本book Application.Dialogs(xlDialogOpen).Show "*.xlsx"
(noro) 2014/06/09(月) 07:04
Abook の中身は何になるでしょう? ファイルパスではなく、開いたときにタイトルバーに表示されるファイル名を指定します。
通常は開くときにブックオブジェクトに Set WB = Workbooks.Open(ファイルパス) 処理 WB.Close 等としますが、WB 変数は処理する部分でも見えるように管理する必要があります。
アプリケーションを閉じても良いということであれば、その方が手っ取り早いかもしれません。 http://www.nurs.or.jp/~ppoy/access/excel/xlA022.html (Mook) 2014/06/09(月) 08:01
の「ファイルパス」というのは、よく参照でみかけていて疑問に思っていたのですが、これは、この文字のところに例えばD:\とか書くという意味ですか?それとも「ファイルパス」というのはVBA用語なのでしょうか
なお、参考のサイトから、それを記述してみたらアプリケーション終了とともにうまく閉じることができましたのでこれを使っていきたいと思っています。
ありがとうございました。
(noro) 2014/06/09(月) 08:53
実際に行ったのは作業VBAのEnd Subの直前に
Application.Dialogs(xlDialogOpen).Show "H:\DATA\*.xlsm"
が入っていて
'以下をサイトのとおり追加
'保存したことにする (保存はしない)
ThisWorkbook.Saved = True 'Excel を終了する Application.Quit 'Book を閉じる ThisWorkbook.Close False
を入れました。
(noro) 2014/06/09(月) 09:07
わからないこともあると思いますが、都度確認して理解をしていってはと思います。 ファイルパスなどは VBA に限らず PC では良く使うものですし、今回の「中身」とは 変数に設定されている値、という意味で使っています。
>ファイル名(Book名)はダイアログで開く度に変わってゆきますので固定ができないように感じますが というために、そのときの内容を代入して保持するのが「変数」です(Dim で宣言するもの)。 Abook とは変数ではなかったでしょうか。
マクロのことはある程度わかっている前提で回答しましたが、そうでない場合は、 yobidasi がどこにあって、どのように呼び出して使っているか。 コードだけでなく、全体でどのような処理をしたいのか。 を端折らないで説明したほうが良いと思います。 (Mook) 2014/06/09(月) 09:42
yobidasiについては標準的なサンプルを探して最初試していたので単独なVBAになります。
これでうまくいけば既存のVBAに追記しようと思っていました。
したがって例題にさせていただきました。
Abookについてはおっしゃるとおり変数で型宣言していました。うっかりしてました。
前段でふたつのVBAを表示してしまいましたが、テスト用だったので、
実際には直前の記述にもあるように、各種VBA(色々使っています)の最後に
Application.Dialogs(xlDialogOpen).Show "H:\DATA\*.xlsm"
ThisWorkbook.Close False
を追記して現在動作させ、ひとつの作業(集計、書き出し等)を終わる毎に次のファイルを呼び出して次の作業に入るようにしています。
その作業の最後がキャンセルなのですが、bookは閉じられているようですが、exellが起動状態(?)なので(無地状態)そこを追記で処理できればと相談させていただきました。
(手動で閉じれば済むことなのでこのままでも支障はないのですが)
(noro) 2014/06/09(月) 10:45
やりたい作業内容がわからないので、マクロと処理ファイルを分けたらよいのでは というのはありそうですが、今回の質問から外れるのでファイル終了に絞って回答します。
ファイルを選択しなかったときに閉じるというのが、望ましい仕様かどうかは別にして、
If OpenFileName <> "False" Then 開く処理 Else EXCEL を終了する処理 End If という形がご希望のものでしょうか。 (Mook) 2014/06/09(月) 11:48
If OpenFileName <> "False" Then
'開く処理 ThisWorkbook.Close False
Else 'EXCEL を終了する処理
ThisWorkbook.Saved = True 'Excel を終了する Application.Quit 'Book を閉じる ThisWorkbook.Close False
End If
としてはみたのですが、Elseの方がどうしてもうまくゆきませんでした。
(noro) 2014/06/09(月) 12:44
If OpenFileName <> "False" Then '開く処理 ThisWorkbook.Close False
これだと、選択したときもファイルを閉じていますよ? (Mook) 2014/06/09(月) 12:49
(noro) 2014/06/09(月) 16:00
いやいや、マクロを実行しているファイルを閉じてしまったら、 次のファイルは誰が開くのでしょうか?
マクロを実行したファイル(ThisWorkbook)を閉じた段階で、マクロも終了します。 (Mook) 2014/06/09(月) 16:35
まだマクロを使い始めたばかりなので、いろいろと試してみると良いと思いますが、
>開くファイルには同じマクロがすべて入っていますのでそれが利用できるのです。 というような運用だと、「マクロを一部変更したい」というようなときに、全部のファイル を変更しなければならなくなりますよね。 そのような運用を含めて、どのような利用形態が良いか考えてみると良いと思います。
とりあえず、目的が達成できているのであれば、今回は良いと思いますが、変更や新しい ことを考えるときに、そのようなことも考えてみてはどうでしょう。 (Mook) 2014/06/09(月) 17:40
(noro) 2014/06/09(月) 19:16
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.