- ベストアンサー
なぜ「Workbook」ではなく「Workbook
なぜ「Workbook」ではなく「Workbooks」なのでしょうか? エクセルVBAについて教えてください。 ファイルのタイトルバーのところに、文字を入れたくてVBAコードを調べていたら Workbooks.Application.Caption = "タイトル" と言うコードが出てきました。 このコードでやりたいことが行えるので問題ないのですが、 なぜファイル(ブック)は一つしか開いてないのに、「Workbooks」なのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
■Application クラス ・EXCEL本体の親ウインドウ側のクラス ・主なプロパティとして Caption EXCEL本体のタイトルバーの文字列 Visible EXCEL本体を表示/非表示 TOP,LEFT,WIDTH,HEIGHT EXCEL本体の位置や大きさを変更する Workbooks EXCEL 本体で開いている ブック(複数)のリスト ■Workbooks クラス ・Workbook クラスのコレクションクラス ・EXCEL を親ウインドウとして ブック(workbook)を複数開く事が出来るためそのリストクラス ・主なプロパティ、メソッドとして Add 新たなブックを表示する Open ブックを開く Item Workbook を選択する Application 親元の EXCEL ■Workbook クラス ・Workbook ブックのクラス ・主なプロパティ、メソッドとして Save ブックを保存する Application 親元の EXCEL WorkSheets ブック内にあるシート(複数)のリスト ■WorkSheets クラス ・WorkSheet クラスのコレクションクラス ・主なプロパティ、メソッドとして Add 新たなシートを作成する Item WorkSheet を選択する Application 親元の EXCEL ■WorkSheet クラス ・WorkSheet シートのクラス ・主なプロパティ、メソッドとして Range 各セル単位のクラス Application 親元の EXCEL だいたいのEXCELクラスの位置づけ(雰囲気)はこんな感じ
その他の回答 (2)
- temtecomai2
- ベストアンサー率61% (656/1071)
Workbooks.Application.Caption の流れがわからないので割愛。 > なぜファイル(ブック)は一つしか開いてないのに、「Workbooks」なのでしょうか? 一つしか開いていないのは、たまたま今この瞬間がそうだってだけで、潜在的には複数のブックを開くこともある。("ある" というか "複数のブックを開くことができる" ようになっている) それが Excel の機能。 だから Excel という Application は WorkBooks という入れ物を持っている。 この Workbooks という入れ物は、Workbook をいくつも格納して管理することができる入れ物。 こういうのを "コレクション" という。名前のルール的には複数形になっている。 だから Workbook を VBA の中で参照する場合、 Workbooks("hogehoge") ← Workbooks コレクションで管理されているブックのうち、hogehoge という名前の Workbook を指し示す。 という書き方が一般的になっている。 名前指定のほかにも特殊なルートを使えば直接とある Workbook を参照することができる。 ThisWorkbook ← VBA コードを実行している Workbook を指し示す。つまり実行中の VBA からすれば自分自身になるのでこういう指定の仕方もできる。 ActiveWorkbook ← 対象 Excel の中でアクティブになっている Workbook を参照することができる。Excel にとってアクティブなブックというのは常に一つなのでこういう指定の仕方もできる。 単数形で用意されているオブジェクトを複数格納して管理できる複数形のコレクション。 これは Workbook だけに限らずたくさん用意されている。 たとえばブックの中にあるワークシート、セル、ウインドウなどなど
お礼
参考になりました。ありがとうございます。
- end-u
- ベストアンサー率79% (496/625)
>Workbooks.Application.Caption = "タイトル" ここだけの抜粋では、これがどういうコードの流れの中で出てきたものか、不明なところもありますが、 Application.Caption = "タイトル" で良いはずです。 >なぜ「Workbook」ではなく「Workbooks」なのでしょうか? Workbooks.Application.Caption = "タイトル" の『Workbooks』プロパティは 親オブジェクトが省略されたものです。 親オブジェクトApplicationの『Workbooks』プロパティです。 だから Workbooks.Application.Caption は Application.Workbooks.Application.Caption です。 (正式にはExcel.Global.Workbooks..なんですが解りにくいでしょうから便宜的に。) 『>なぜ「Workbook」ではなく「Workbooks」』ここだけに焦点を当てると ApplicationにはWorkbooksプロパティはあってもWorkbookプロパティはないからです。 前述、 Application.Workbooks.Application.Caption これは Applicationオブジェクト の Workbooksプロパティ の Applicationプロパティ の Captionプロパティ ..という記述になっているので、 少し素直に Applicationプロパティ の Captionプロパティ、つまり Application.Caption = "タイトル" という記述のほうが解り易いかと思います。 >なぜファイル(ブック)は一つしか開いてないのに、「Workbooks」なのでしょうか? 「Workbooks」は「Workbook」の複数形 という文法的なものではなく、 ExcelVBAの「Workbooks」プロパティ(属性)として規定されたものです。 1つのBookを操作する時でも Workbooks(1).Activate Workbooks("Book1.xls").Activate と書いて、Workbook("Book1.xls")..とは書きませんよね。 「Workbooks」プロパティ は 開かれているすべてのブックを表す「Workbooksコレクション」を返します。 開いているBookが1つでも複数でも、この「Workbooksコレクション」の中にWorkbookオブジェクトがあり、 そのWorkbookオブジェクトを呼び出す時に「Workbooksコレクション」の中のxxというアイテム、という指定をします。 Workbooks("Book1.xls") は Workbooks.Item("Book1.xls") を省略した書き方です。 (省略した書き方のほうが認知されています) VisualBasicEditorのヘルプは状況依存型で、コード内の調査語句にマウスキャレットをあてて[F1]キーを押せば 目的のトピックにクイックアクセスできますので、色々調べてみてください。 また、[F2]キーで「オブジェクトブラウザ」が開きます。 各オブジェクトがどんなプロパティやメソッド持っているかが確認できます。 VBAを理解するのに役立ちますから、活用していってください。
お礼
参考になりました。ありがとうございます。
お礼
参考になりました。ありがとうございます。