ブック

Workbookオブジェクトという概念がある。
これを変数に入れるとすれば
Dim WrkBk as Workbook
となる。
変数の型としてはObjectではなく、Workbookという名称のオブジェクトであると明示する。

特定のワークブックを指し示す方法を提示していく。

○ブックの名前で指し示す
Set WrkBk = Workbooks("foo.xls")
ブックの名前=ファイル名なのでそれを使えば良い

○“このプログラム”のあるブック
Set WrkBk = ThisWorkbook
今動かしているプログラムのあるブックを知ることができる。
他のブックを切り替える前に取得しておいて終わったら元に戻す、ような用途で有効だろう。
(アドインとして“このプログラム”を実行している場合はアドインブックを返す、らしいがとりあえずは考えなくてもよろしかろう。)
また開いたワークブックのフォルダ名(ファイルパス)を知るには
ThisWorkbook.Path
で知ることができる。
ワークブックと同じフォルダのファイルを読み込んだり同じフォルダに書き出したり、そこからの相対パスを指定するために使える。

○現在作業中のブック
Set WrkBk = ActiveWorkbook
作業対象(シートやセルを操作する等)をプログラムを記述したブック以外に変えることもできる。
インデックス番号でブックを切り替えておいて、その名前を取得することもできる。
Workbooks(1).Activate
name = ActiveWorkbook.Name

○ブックの(インデックス)番号
Set WrkBk = Workbooks(1)
番号と言われても困るが、最初に作成(開かれた)ブックが1で順番に番号が振られていく。
こういうのは曖昧でよろしくないと思うのだが使い道がないわけでもない。
Workbooks.Countで開いているブックの数が判るので1からこの数までループすることで色々できるだろう。
例えば「特定の名前を持ったワークブックを開いているか」ということさえ関数は無く自前で用意する必要があるのだ。

Example 1
インデックス番号ではなくて、構成メンバを1つずつ取り出すのにはFor Eachを使うと素直だ。
Dim wkbk As Workbook
For Each wkbk In Workbooks
Debug.Print wkbk.Name
Next
ワークブック全体(Workbooks)からワークブックオブジェクトを1つずつ取り出してwkbkというWorkbook型オブジェクト変数にいれている。
WorkbookオブジェクトのメンバとしてNameがあり、これはブックの名前(ファイル名)である。
ブック(エクセルファイル)を1つだけ開いている場合は当然1つしか表示されないが、複数のブックを開いている状態で実行すると開いているブックの名前が全部表示される。

Example 2
ワークブックコレクションにAddすると新しくワークブックが追加される。
Dim wkbk As Workbook
Set wkbk = Workkbooks.Add
Debug.Print wkbk.Name
名前は適当につけられる(おそらくbook1と表示されるだろう)
一時的に利用するならこのwkbkを使用していけばよい。
保存したければ
wkbk.SaveAs ("foo.xlsx")
のようにSaveAsメソッドでファイル名を指定してやればいい。
comments (0)

コメント

Comment Form