• ベストアンサー
  • 暇なときにでも

VBA Workbooks.open

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

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数234
  • ありがとう数11

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

  • ベストアンサー
  • 回答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メソッドがあると。

関連するQ&A

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

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

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

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

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

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

その他の回答 (2)

  • 回答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)が別物なのです。 以上、補足として追記しておきます。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.2
  • anmochi
  • ベストアンサー率65% (1332/2045)

> × 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" みたいにするのしか知らない・・・・。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • エクセル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にファイル名を入れて、開きたいのですが、どうしても開くことができません。いろいろ調べて試しましたが、無理でした。 基本的にマクロで記録で作っている初心者です。 回答よろしくお願いします。

  • 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

  • Excel VBAについて

    Excelのシートにコマンドボタンを配置して、そのコマンドボタンをクリックすると「ファイルを開く」のダイアログボックスを表示したいと思っています。 そのとき、デフォルトでファイルの場所は「D:\Test」にしたいのですが、どうしたらよいのでしょうか。 ユーザは、ファイルの場所を探さずに、コマンドボタンをクリックしたら開きたいファイル名を指定するだけでいいようにしたいのですが。 下記では、ファイルを開くダイアログは表示されるのですが、ファイルの場所を毎回探さなくてはいけません。 どなたかご教授下さい。 Private Sub Cmd_ファイル選択_Click() Dim FileName As Variant FileName=Application.GetOpenFileName("Microsoft Excelブック,*.xls") Workbooks.Open OpenFileName End Sub

  • EXcelのマクロで相対パスでファイルを開く

    Excelでマクロを使って他のブックを開こうとしています。 同じフォルダ内のブックを開くには Workbooks.Open Filename:=ThisWorkbook.Path & "\ブック名.xls" で開く事が出来たのですが、一つ上の階層にあるブックを開きたいときはどのようなコマンドを使えば良いのでしょうか?? お教え下さい。

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

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

  • Open Filenameで変わるファイル名を開く

    スマホアプリで作成したデータをパソコンのExcelから開きたいです。 vbaで操作したいのですが、アプリでエクスポートされたファイル名は日々名前が変わります。 Open Filenameで操作したいです。 Sub Sample1は開きますが、毎日ファイル名をて入力しなければなりません。 Sub Sample1() Workbooks.Open Filename:="C:\Users\closeinlove\Dropbox\アプリ\ExcelCalendarLite\cal-excel-160906.xls" '←「yymmdd.xls(年年月月日日).xlsの数値が入っています」 End Sub Sub Sample2に日々変わるファイル名の数値の部分を*に置き換えましたが、駄目でした。実行エラー1004 Sub Sample2() Workbooks.Open Filename:="C:\Users\closeinlove\Dropbox\アプリ\ExcelCalendarLite\cal-excel*.xls" End Sub Sub Sample3に日々変わるファイル名の数値の部分を??????に置き換えましたが、駄目でした。実行エラー1004 Sub Sample3() Workbooks.Open Filename:="C:\Users\closeinlove\Dropbox\アプリ\ExcelCalendarLite\cal-excel-??????.xls" End Sub ファイル名の変わる部分の指定方法を教えて下さい。

  • エクセルVBAで、PDFファイルを開きたい

    セルに入力した値のブック(xls)を開く場合、 以下となりますが、↓ Sub セルに入力したブック名のブックを開く() ブック名 = Cells(1, 2) 'B1セルの値を取り出す Workbooks.Open Filename:=ブック名 & ".xls" '指定されたブックを開く End Sub これでPDFファイルを開きたいです。 記述をどうしたらよいでしょうか。 目的はPDFファイルの検索/照会をxlsにてしたいのです。 お手数ですがお願いいたします。

  • Excel VBA

    Excel VBAを勉強中の者です。 複数のワークブックを開いているため、ワークブックから指定していってセルを選択したいと思い下記のようなコードにしてみたのですができませんでした。 Workbooks(“C:\フォルダ\ワークブック.xls”).Worksheets(“C”).Range(“A1”).Select このようなコードは有り得ないのでしょうか? または、ワークブックを開いて、ワークシートをアクティブにして、セルを選択するというように、ひとつひとつ選択していくのではなく、一文でワークブックからセルまで指定する他の方法はありますでしょうか? 教えてください。よろしくお願いします。

  • Workbooks.openについて

    超初心者です。 Workbooks.Openを使って他の任意のxslファイルを開きたいのですが、 Sub Test_FileOpen() Workbooks.Open Filename = "c:\MyDocuments\data.xls" End Sub のように書いても 「実行時エラー'1004': 'False.xls'が見つかりません。ファイル名およびファイルの保存場所が正しいかどうか確認してください」 と言うアラートが出て上手くいきません。 ファイルのパスは何度も確認したので間違いはないです。 ちなみに同じフォルダに置いて、 Sub Test_FileOpen() Workbooks.Open Filename = ThisWorkbook.Path & "\data.xls" End Sub とやっても同じアラートが出ます。 どこがおかしいのでしょうか? 原因が推測できる方、どうかご教授願います。

  • ブックの保護(シート構成) でシートのコピー

    エクセルで外部データを参照させるために, 別のブックを開きシートをコピーし元のブックに貼り付け別のブックは閉じるというマクロを作成しました。 Workbooks.Open Filename:=a Sheets("データ").Select Sheets("データ").Copy After:=Workbooks("ファイル.xls").Sheets("メニュー") Workbooks(a).Close SaveChanges:=False a(変数)というファイルを開く シートのデータを選択 データをコピーし ファイル.xls のメニューシートの後に貼り付け a(変数)のエクセルファイルを保存せずに閉じる 動作としては正常に動きました。 しかし、この ファイル.xls には ID とパスワードで管理しています。 その管理したシートがあるんですが、それを表示させないために シートを非表示→ブックの保護→シート構成 を行いました。 マクロを動かすと、シート構成をしているので Sheets("データ").Copy After:=Workbooks("ファイル.xls").Sheets("メニュー")  が動かないことに気が付きました。 何かいい方法があればご教授お願いします。