Workbooks について

Excel VBAでやれることを探していると、どうしてもセルや行、列、シートの操作について調べることが多くなりますが、ベースとなるWorkbooksについて、調べてみようと思います

WorkbooksオブジェクトとWorkbookオブジェクトがあるのですが、何が違うのだろうか?

ま、複数形と単数形なので、複数ファイルと単数ファイルを指しているんでしょうけど、今回は、複数形の方です!

■Workbooksオブジェクト

・構文

構文は以下の通りですが、構文と言うほどのことはないですけどねw

広告

Excel.Workbooks

要するに、Excelで開いているWorkbookオブジェクトのコレクションがWorkbooksオブジェクトということです

・メソッド

オブジェクトのメソッドは以下の通りです

  • Add … 新しいWorkbookを作成
  • CanCheckOut … WorkbookがサーバでCheckOut可能か調べる
  • CheckOut … WorkbookをCheckOutしてローカルへコピー
  • Close … 開いているWorkbookを全て閉じる
  • Open … Workbookを開く
  • OpenDatabase … データベースをWorkbookとして開く
  • OpenText … テキストファイルをWorkbookとして開く
  • OpenXML … XMLファイルをWorkbookとして開く

・プロパティ

オブジェクトのプロパティは以下の通りです

  • Application … オブジェクトを作成したアプリケーションのオブジェクト
  • Count … コレクションに含まれるオブジェクトの数
  • Creator … オブジェクトを作成したアプリケーション情報
  • Item … コレクション内の単一オブジェクト
  • Parent … 親オブジェクト

■例

広告

・簡単なサンプル

Sub Sample()
    Dim wb 	As Workbooks
	Dim w   As Workbook
    Dim i   As Long
    ' 現在開いているExcelのWorkbookオブジェクトのコレクションを取得します
    Set wb = Me.Application.Workbooks
    
	' Sample.xlsxファイルを読み取り専用で開きます
    wb.Open Filename:="C:\Sample.xlsx", ReadOnly:=True
	' ワークシートを含む新しいWorkbookを開きます
    wb.Add Template:=xlWBATWorksheet
    
	' プロパティを表示してみます
    Debug.Print wb.Application		' 「Microsoft Excel」当然Excelが返ります
    Debug.Print wb.Count			' 「3」マクロを書いたファイルとOpenしたのとAddした3つ
    Debug.Print wb.Creator			' 「1480803660」何これ?w

	' ファイル数分ループする
    For i = 1 To wb.Count
        Debug.Print wb.Item(i).Name	' 「Book1.xlsm」「Sample.xlsx」「Sheet1」のファイル名が返る
    Next i

    Debug.Print wb.Parent			' 「Microsoft Excel」が返ります
    
	' 全てのExcelファイルを閉じます(Addして編集しなかった場合は何も言われずに閉じますね)
    wb.Close
	
    ' オブジェクトを開放
    Set wb = Nothing

End Sub

・説明

Openメソッドでファイルを読み取り専用で開き、
Addメソッドでシートを指定して新規ファイルを作成して、
Countプロパティで得た数のItemプロパティは、
WorkbookオブジェクトですのでNameプロパティでファイル名を出力させ、
Closeメソッドで全てのファイルを閉じました

・注意点

  1. WorkbooksオブジェクトはWorkbookオブジェクトの集まり
  2. Openメソッドはファイルを開く
  3. Addメソッドはファイルを新規作成する
  4. Closeメソッドは全てのファイルを閉じる
  5. Itemプロパティの要素番号は「1」から

・For Each…Nextステートメント

WorkbooksオブジェクトはWorkbookオブジェクトのコレクションですから、
「For Each…Next」ステートメントを使用して、ItemプロパティをWorkbookオブジェクトとして取得できます

Sub Sample()
    Dim wb 	As Workbooks
 	Dim w 	As Workbook
	
	For Each w In wb
		Debug.Print w.Name
	Next
	
    ' オブジェクトを開放
    Set wb = Nothing

End Sub

・その他

AddメソッドとOpenメソッドの詳細は別途、記事を作成していこうと思います
時間とニーズがあれば、OpenTextメソッドやOpenDatabaseメソッドにも触れたいですけどねー
Workbooksオブジェクトのプロパティは、ま、こんなもんでしょー
後は、Workbookオブジェクトとして、説明を書こうと思います

ではでは

広告

やもす ʕ•͡-•ʔ

のんびり!のほほん!がモットーです!w 蕎麦食いたい ライブ行きたい 暑いの嫌い

シェアする