• ベストアンサー

VBA Workbooks.open

ブックを開くコマンド × Workbooks("filename.xls").open ○ Workbooks.open filename:="filename.xls" 何故下なのですか?ワークブックコレクションの中から特定のブックを指定し開くなら、上の構文にした方がワークシートコレクション等と構文表現を統一出来ます。 現にブックを閉じるコマンドは Workbooks("filename.xls").close です。何故ブックを開くコマンドだけ別表現なのですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答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 メソッドもないですよね。 解り難い説明になってしまっていたらすみません。 結構な長文を用意したのですが、クドクなったので要約を上げました。 以上です。

High_Score
質問者

お礼

ありがとうございます。 まだ開いて無いファイルだからコレクションには入ってないという事ですね。 だからこそworksheetにはないopenやcloseメソッドがあると。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答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)が別物なのです。 以上、補足として追記しておきます。

High_Score
質問者

お礼

再回答ありがとうございます。 括弧ツキとなしではオブジェクトかコレクションかの違いがあるのですね。実は頭の中で不鮮明な理解だった部分です。スッキリしました。

全文を見る
すると、全ての回答が全文表示されます。
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答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" みたいにするのしか知らない・・・・。

High_Score
質問者

お礼

ありがとうございます。 最後の部分、まだ作成されてないシートなのでコレクションに入ってない為、この表現は使えない、でいいですよね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】

    よろしくお願いします。 今あるブックにあるシートを別のブックにコピーしたいのですが、今考えているのは ここから//////// 'ブックを開く Workbooks.Open コピー元のブックのパス 'シートをコピー Worksheets.Item(コピーするシート名).Copy _ after:=Workbooks(コピー先のブック名).Sheets(1) 'ブックを閉じる Application.DisplayAlerts = False Workbooks.Item(コピー元のブック名)Close True Application.DisplayAlerts = True ここまで//// なのですが、コピーものとのブックが複数ある時、画面がチラチラしてしまいます。ブックをオープンさせずにシートを他ブックにコピーさせる方法ってないでしょうか。 ご存知の方がいらっしゃいましたら、ご教授お願いします。

  • エクセルVBAでFileNameを使用してブックを開き又は保存する方法

    現在の構文は以下の通り作成し使用しています。 Dim FileName1 FileName1="\\C\台帳.xls" Workbooks.Open FileName1 で目的のブックを開きます。  更新等の作業をした後ブックを保存する場合 Workbooks("台帳.xls").Close Savechanges:=true  で保存していますが、 (1)「FileName1」を使用して保存する方法を教えて頂きたいのですが可能でしょうか。 (2)同時に「FileName1」を使用してブックをアクティブにしたりセレクトする方法も教えて頂きたいのです。 ブックをセーブ・アクティブ・セレクトするたびにブックの名前をいちいち入力していますが、「FileName1」を使用してブック名の入力手間を減らしたいのです。

  • VBA-Workbook_Open()イベントで

    再度、お世話になります。 手順1.book1よりボタンをクリックしてbook2を開く 手順2.あるフォルダの.xlsファイル名をボタン名に貼り付ける 手順3.book2の戻るボタンでbook2を閉じ、book1を開く 手順4.手順1を実行する という流れを行ったところ1回目のbook2の表示の際にはうまくファイル名を表示できるのですが、戻った後の2回目のbook2の表示ではファイル名が1回目のときのままになってしまいます。 一部 [book2での処理] ***Module1*** Public strPath as String ***ThisWorkbook*** Public Sub Workbook_Open() strPath = "C:\" & Worksheets("Sheet1").Range("A1") myName = Dir(strPath & "\*.xls", vbDirectory) If myName <> "" Then FCnt = FCnt + 1 Worksheets("Sheet1").OLEObjects("btn" & FCnt).Object.Caption = myName Do ・・・(略) Loop End If End Sub ***Sheet1*** Private Sub btnBack_Click() Workbooks.Open Filename:="C:\book1.xls" Workbooks("book2.xls").Close saveChanges:=False End Sub のようにしています。 お手数をおかけしますが、どなたかご教授お願いいたします。

  • Excel VBAの実行中に実行を中断して通常のエクセル作業を入れたい。

    Excel VBAの実行中に実行を中断して通常のエクセル作業を入れる方法を教えてください。 1.Application.GetOpenFilenameで選択してワークブックを開く。 2.そのワークブックのシートの中から目的とするシートを選択する。 3.選択したシートを新しいワークブックにコピーする。 4.開いたワークブックを閉じる。 という一連の作業の中で、2.については通常のエクセルの作業のようにシートを一枚ずつ確認して選択する必要があります。 現在、stopを使って強引に中断させているのですが、何か良い方法はありますでしょうか? よろしくお願いします。 ちなみに、今、私が作っているのプロシージャーは下記のようなものです。 Private QUOTfile As String Private filename As String Sub QUOTfileOpen() QUOTfile = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If QUOTfile <> "False" Then Workbooks.Open QUOTfile End If filename = ActiveWorkbook.Name Stop ActiveSheet.Copy With Application .Dialogs(xlDialogSaveWorkbook).Show End With Workbooks(filename).Close saveChanges:=False End Sub

  • エクセルVBAでブックを開きたいのですが、

    エクセルVBAでブックを開きたいのですが、 アクティブシートを別のブックに移動させたいのですが、 まず、目的のブックを開く → 移動させたいシート名を右クリック → 移動またはコピー を選択 → 移動先ブック を選択  というふうにしようと思っていますが、 Workbooks.Open Filename:= _ "C:\Documents and Settings\YUMIKO\My Documents\YYYY.xls" のようにファイル名を入れると開くことができました。 が、   Workbooks.Open Filename:= _ "C:\Documents and Settings\YUUKORON\My Documents\Range("F1").Value.xls" のように、アクティブシートの セルF1にファイル名を入れて、開きたいのですが、どうしても開くことができません。いろいろ調べて試しましたが、無理でした。 基本的にマクロで記録で作っている初心者です。 回答よろしくお願いします。

  • Sub Auto_Open() 実行されない

    Excel2003VBAについて教えてください。 あるBookから、VBAの”Workbooks.Open”で別のブックを開くように作ってあるのですが、開かれるBookのほうに”Sub Auto_Open()”で特定のシートをアクティブにするように作っています。 普通にBookを開くとSub Auto_Open()は実行されますが、”Workbooks.Open”では実行されません。 ”Workbooks.Open”で開いたときに、特定のシートがアクティブになればそれでよいのですが。 よろしくお願いします。

  • エクセル2000VBAでファイルを操作したい

    いつもお世話になっています。 エクセルVBAで別のワークブックを参照したいので workbooks.open Filename:="C:my documents\***.xls" とすると、そのオープンするワークブックのTisWorkbookのWorkbook_Open()で実行している(.show)メニュー(ユーザーフォーム)が開いてしまいます。 このとき、Workbook_Open()を実行させないでワークブックを開く方法って、 なにかありますか? Shiftを押しながらファイルを開くとき、実行されませんよね?それをVBAでできるのですか? よろしくお願いします。

  • WorkbookのCopyについて

    Workbookのコピーについて教えてください。 下記のマクロにセル内の数式もコピーしたいのですが、出来ないで困ってます。 値と数式をコピーする、マクロを入れると指定した範囲にコピーされません。 Sub CopyWorkbookToWorkbook() Windows("sheet2.xls").Activate Workbooks.Open Filename:="D:\book1.xls" Workbooks("book1.xls").Worksheets("sheet1").Range("A6:k1000").Copy Workbooks("book2.xls").Worksheets("sheet1").Range("A6").PasteSpecial    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False,Transpose:=False          Workbooks("book1.xls").Close End Sub よろしくお願いします。

  • Excel2003 マクロ(VBA) どこにあるか分からないフォルダAのワークブックAを開く

    いつもお世話になっております。 新しいマクロの記録でフォルダAのワークブックAを開きました。 ChDir "C:\フォルダA" Workbooks.Open Filename:= _ "C:\フォルダA\ワークシートA.xls" しかし、今はフォルダAがCドライブにありますが、 明日はデスクトップ上にあったり、フォルダBの中に入っていたりするかもしれません。 このような時、上記のようなVBAでは開けません。 どこにあるか分からないフォルダAのワークブックAを開くには どこをどのように直せばよろしいのでしょうか? 以上、よろしくお願いいたします。

  • Excel VBAで他のワークブックからのコピぺの仕方について

    Excel VBAで開いている全てのワークブックから決められたセルの中身とそのシート名をそれぞれ決められた一つのワークブックにコピぺする マクロを作りたいのですが、どうやって作って良いのかが分かりません。 例えば、 Sub Mac() For i = 1 To 100 Workbooks("Book1.xls").Worksheets("sheet1").Range(Cells(2108, 2), Cells(3108, 2)).Cut Destination:=Workbooks("Book1.xls").Worksheets("sheet1").Cells(13, 2) End Sub みたいにすれば良いと思うのですが、開いている全てのファイルからのコピぺってどうやって記述するのでしょうか? 何卒よろしくお願い致します。

このQ&Aのポイント
  • Bluetooth機能が突然認識しなくなり、他のBluetooth機器も認識しなくなった。NINE DIGITAL N1を接続した後に問題が発生。
  • スマホとパソコンを再起動し、パソコンはシステムの復元も試したが問題解決せず。
  • ウイルスの可能性も考えられ、不安を感じている。パソコンのOSはWindows 10 Home、スマホはRakuten Hand。
回答を見る

専門家に質問してみよう