|

|
|
 |
3.5 ワークブックを閉じる |
 |
|
|
|
|
|
ワークブックを閉じる方法です。???.Closeというメソッドを使います。
???の部分は、自分自身や他のワークブックならThisWorkbookやWorkbooks(n)やActiveWorkbookなどのワークブックを表すオブジェクト、全てのワークブックを閉じたい場合はWorkbooksを指定します。詳しくは、2.1 直接指定する方法や2.2 間接的に指定する方法をどうぞ。
なお、閉じるときについでに保存も出来ますが、できるだけ保存は???.Saveや???.SaveAsで行い、閉じる(???.Close)は純粋に閉じるだけにしましょう。
|
|
|
|
|
|
|
|
|
|
???.Closeの基本的な使い方色々です。自分自身を閉じるとき、他のワークブックを選択して別な名前で閉じるとき、開いているワークブックを全部いっぺんに閉じるの3つの方法があります。
まずは、自分自身を閉じる場合ですが、ThisWorkbookを付け、次のようにします。
しかし、ワークブックは更新されているかもしれません。更新されている場合は、自動で上書き保存した後閉じる場合はSaveChanges:=にTrueを指定し、保存しないでムリヤリ閉じる場合はFalseを指定します。以下は、更新有無にかかわらずムリヤリ閉じる場合の例です。
ThisWorkbook.Close SaveChanges:=True
|
なお、この引数を付けない場合はワークブックが更新されていると「変更を保存しますか?」というメッセージが表示されますが、別な方法でメッセージを非表示にすることが可能です。詳しくは、8.2 警告メッセージのON・OFFをどうぞ。
次に、開いている他のワークブックを上書き保存したい場合ですが、まずは対象のワークブックをWorkbooks(n).Activateで選択した後、ActiveWorkbook.Closeで保存する間接指定の方法と、
Workbooks(n).Activate
ActiveWorkbook.Close
|
Workbooks(n).Closeで直接ワークブックを指定する方法があります。どちらも同じ動作でどっちを使うかは好みの問題ですが、いちおう後者を推奨しておきます。もちろん、どちらもSaveChanges:=が使えます。
ところで、ワークブックは既存の物を開いているとは限りません。Workbooks.Addで新しいワークブックを作り、そこへ編集を加えて閉じる…なんてときは、上書きではなく新しく保存するなので、ファイル名やパスを指定する必要があります。ファイル名の指定はFilename:=で行います。
Workbooks(??).Activate
ActiveWorkbook.Close SaveChanges:=True, Filename:="ファイルのパスとファイル名"
|
ただし注意が必要で、この方法で指定したファイルには変更があったときだけ保存されます。ワークブックに変更が無かったときは、Filename:=で指定したファイルは変更されません。
最初に、「できるだけ保存は???.Saveや???.SaveAsで行い、閉じる(???.Close)は純粋に閉じるだけにしましょう」と言ったのも、こういったまぎらわしい動作があるからです。
最後に、開いている全てのワークブックを全て閉じる方法です。Workbooks.Closeを使います。
ただし、変更されているワークブックがあると「変更を保存しますか?」のダイアログが表示されてしまいます。これを表示したくないときは、Application.DisplayAlertsで回避しましょう。以下が、その例です。
Application.DisplayAlerts = True
Workbooks.Close
Application.DisplayAlerts = False
|
詳しくは、8.2 警告メッセージのON・OFFをどうぞ。
|
|
|
|
|
|
|
|
|
|
ThisWorkbook.Closeの使用例です。ワークシートをゴソゴソ編集した後、自分自身を保存しないで閉じ(@)ます。ちなみに、ゴソゴソ…の部分は「5 書式の設定をする」に書いてあるのでここでは省略します…手抜きではありません(汗)
ワークブックは保存しないので、ThisWorkbook.Closeの引数へSaveChanges:=Trueを指定します。
Sub prcThisWorkbookSaveAs()
'編集範囲を選択します
Range("B2:D10").Select
'選択した範囲内のセルを塗りつぶします
With Selection.Interior
.ColorIndex = 10
.Pattern = xlSolid
End With
'@ワークブックを保存しないで閉じます
ThisWorkbook.Close SaveChanges:=False
End Sub
|
※このエクセルマクロはワークシート内へ記述するマクロです
|
|
|
|
|
|
|
|
|
|
ActiveWorkbook.Closeの使用例です。c:\happyに保存してあるエクセル2002.xlsというワークブックを開き、そのワークブックのワークシートをゴソゴソ編集した後、ActiveWorkbook.Closeで開いたワークブックを上書き保存して閉じ(@)ます。
ワークブックを選択する場合には番号や名前などの識別子を指定する必要があります。例では、開いたワークブックの「名前」を取得し、その名前で選択するようにしています。ちなみに名前の取得ですが、開いた直後は開いたワークブックが選択されている状態なので、この隙にActiveWorkbook.Nameで名前を取得しました。ワークブックの名前取得については、7.3 ワークブックの名前を知る方法もどうぞ。
Sub prcActiveWorkbookSave()
Dim strWorkBookName As String
Workbooks.Open Filename:="c:\happy\エクセル2002.xls"
strWorkBookName = ActiveWorkbook.Name
'コピー元範囲(自分自身)の指定
ThisWorkbook.Activate
Range("B2:D10").Copy
'開いたワークブックの1つ目のワークシートへ
'コピーした部分を貼り付けます
Workbooks(strWorkBookName).Worksheets(1).Range("B2:D10").PasteSpecial
'閉じるワークブックを選択します
Workbooks(strWorkBookName).Activate
'@選択したワークブックを上書き保存し閉じます
ActiveWorkbook.Close SaveChanges:=True
End Sub
|
※このエクセルマクロはワークシート内へ記述するマクロです
|
|
|
|
|
|
|
|
|
|
ActiveWorkbook.Closeの使用例その2です。Workbooks.Addで新しいワークブックを作り、そのワークブックのワークシートをゴソゴソ編集した後、ActiveWorkbook.Closeでワークブックを閉じるときに、ついでに保存(@)します。
ワークブックを閉じるときついでに保存する場合は、Filename:=オプションにファイルのパスとファイル名を指定します。
なお、ワークブックの選択については、「使用例2/他のワークブックを上書き保存して閉じる」と同じです。
Sub prcActiveWorkbookSave2()
Dim strWorkBookName As String
'まっさらのワークブックを開きます
Workbooks.Add
'そのワークブックの名前を取得します
strWorkBookName = ActiveWorkbook.Name
'コピー元範囲(自分自身)の指定
ThisWorkbook.Activate
Range("B2:D10").Copy
'開いたワークブックの1つ目のワークシートへ
'コピーした部分を貼り付けます
Workbooks(strWorkBookName).Worksheets(1).Range("B2:D10").PasteSpecial
'閉じるワークブックを選択します
Workbooks(strWorkBookName).Activate
'@選択したワークブックを上書き保存し閉じます
ActiveWorkbook.Close SaveChanges:=True, Filename:="c:\happy\エクセル2002v.xls"
End Sub
|
※このエクセルマクロはワークシート内へ記述するマクロです
|
|
|
|
|