No.1ベストアンサー
- 回答日時:
こんにちは。
> ブックを開くコマンド
> × 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 メソッドもないですよね。
解り難い説明になってしまっていたらすみません。
結構な長文を用意したのですが、クドクなったので要約を上げました。
以上です。
ありがとうございます。
まだ開いて無いファイルだからコレクションには入ってないという事ですね。
だからこそworksheetにはないopenやcloseメソッドがあると。
No.2
- 回答日時:
> × Workbooks("filename.xls").open
Workbooksコレクションオブジェクトは「現在このExcelアプリケーションの中で開かれているブックたち」が入っている。
で、filename.xlsはまだ開かれていない。今から開くんだから。
だから、Workbooks("filename.xls")ではアクセスできない。
なので、
> ○ Workbooks.open filename:="filename.xls"
で開く。そこではじめてWorkbooksコレクションに追加されるわけだ。
開かれたので
> Workbooks("filename.xls").close
でアクセスでき、閉じる事もできる。開かれているからだ。
シートではWorksheets("newsheet1").Addみたいなのが使えるの?
Set sht = Worksheets.Add
sht.Name = "newsheet1"
みたいにするのしか知らない・・・・。
ありがとうございます。
最後の部分、まだ作成されてないシートなのでコレクションに入ってない為、この表現は使えない、でいいですよね。
No.3
- 回答日時:
#1、cjです。
お礼欄拝見しました。> まだ開いて無いファイルだからコレクションには入ってないという事ですね。
はい、その認識で合っています。
一般的なコレクション(コレクションオブジェクト)の扱いとしては、
一段階めで、新しいオブジェクトのインスタンス(実体)を生成してから
次の段階で
collection.Add Key:="name", Item:=newobject
のような書式でコレクションに追加します。
Workbooks.Open Filename:="filename.xls"
の場合は、オブジェクトの実体を生成すると同時に、
コレクションへの追加をしています。
> だからこそworksheetにはないopenやcloseメソッドがあると。
誤解のないように補足しておきますが、
Workbooks.Open Filename:="filename.xls"
これは、Workbooks コレクションのOpen メソッドです。
Workbooks("filename.xls").Close
これは、Workbook オブジェクトのClose メソッドです。
(Workbooks コレクションには、すべてのブックを閉じるClose メソッドがありますが、
これは、現在ではほぼ使われることのないもの、いわばレガシーです。)
Workbooks("filename.xls")
は、
Workbooks.Item("filename.xls")
の省略形ですが、
例外なくWorkbook オブジェクトを参照します。
「Workbooks」だけならWorkbooks コレクション、
「Workbooks()」と括弧が付いた部分を含めて、それは
(Workbooks コレクションのItemとしての)Workbook オブジェクトであって、
必然的に、Workbooks コレクションのメソッドは使用できません。
Open メソッド、と、Close メソッドとでは、処理対象(Parent)が別物なのです。
以上、補足として追記しておきます。
再回答ありがとうございます。
括弧ツキとなしではオブジェクトかコレクションかの違いがあるのですね。実は頭の中で不鮮明な理解だった部分です。スッキリしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ワイルドカード「*」を使うとうまくいかないマクロの添削をお願いします 3 2022/03/26 09:39
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) VBAの参照先のファイル名をセルに書いて代入したい 2 2022/04/04 13:42
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/26 12:00
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 画像を貼り付ける...
-
Excel VBA 定数にオブジェクト...
-
サーブレットコンテキストの意...
-
オブジェクト指向プログラミン...
-
生成したインスタンスを削除す...
-
エクセルVBAで、条件に一致する...
-
A・B・Cクラスとは?
-
Excelでクラス分け表を作成した...
-
同じクラスにならない確率を教...
-
「ラッパークラス」の存在意義...
-
SQLです教えてくださいお願いし...
-
複数の変数を宣言する時、同時...
-
「タイプ初期化子が例外をスロ...
-
private static という変数の修飾
-
変数名の付け方
-
Visual Studioでのbmpファイル...
-
Java初心者です、エラーの意味...
-
インスタンス参照でアクセスで...
-
数学の計算問題。 3年間同じク...
-
同一パッケージにあるクラスが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでの[]
-
エクセルVBA 画像を貼り付ける...
-
サーブレットコンテキストの意...
-
C#のクラスで値渡しをする
-
Vba ListViewの行挿入に関して...
-
Excel VBA 定数にオブジェクト...
-
VB.netでメソッドからコントロ...
-
servletからjspへオブジェクト...
-
javaで、、、
-
VB.NETでのnothing の意義について
-
Dispose()は、どんな時に使うの...
-
ピクチャーボックスに点を打つ...
-
VBスクリプトでテキストファイ...
-
String型からlong型への変換は...
-
JSPでのArrayListの表示につい...
-
C#で親にイベントを投げる方法
-
MessageBox.Show(Me,…の「Me」...
-
エクセルVBA/SpecialCellsで特...
-
getParameter()について
-
VBS でのソート処理Excel2003
おすすめ情報