質問: vba workbooks.open ブックを開くコマンド × workbooks("filename.xls").open ○ workbooks.open filename:="filename.xls" 何故下なのですか?ワークブックコレクションの中から特定のブックを指定し開くなら、上の構文にした方がワークシートコレクション等と構文表現を統一出来ます。 現にブックを閉じるコマンドは workbooks("filename.xls").close です。何故ブックを開くコマンドだけ別表現なのですか?
回答: こんにちは。 > ブックを開くコマンド > × workbooks("filename.xls").open > ○ workbooks.open filename:="filename.xls" > 何故下なのですか? > ワークブックコレクションの中から特定のブックを指定し開くなら、 > 上の構文にした方がワークシートコレクション等と構文表現を統一出来ます。 > 現にブックを閉じるコマンドは > workbooks("filename.xls").close > です。何故ブックを開くコマンドだけ別表現なのですか? <以上、改行は筆者。> まず、ヘルプの引用ですが、 その前に、parentを省略せずに書くと、 excel.application.workbooks.open filename:="filename.xls" だという点を確認しておいてください。 |application.workbooks プロパティ |開かれているすべてのブックを表す workbooks コレクションを返します。値の取得のみ可能です。 <以上、vbaのヘルプより。> 一般論として、コレクションというのは、実体を持ったオブジェクトの集合体です。 "filename.xls"はworkbookの設計図を収めたファイルとしてのみ存在している訳ですから、 開いてこそ実体を持ったworkbook オブジェクトとなり得ます。 つまりブックとして開くまではworkbooks コレクションに加えることは出来ません。 また、 開いていないブック=workbooks コレクションに存在しないブック を、workbooks("filename.xls"). ...のように参照しようとしても当然実行時エラーになります。 worksheets("sheetname"). ...のように存在しないワークシートを参照しようとしても同様です。 > 上の構文にした方がワークシートコレクション等と構文表現を統一出来ます。< 再掲 違いは、ブックを開いた時に連動して配下のシートは実体を持つ、ということです。 worksheets には.open メソッドはあり得ませんし、.close メソッドもないですよね。 解り難い説明になってしまっていたらすみません。 結構な長文を用意したのですが、クドクなったので要約を上げました。 以上です。