ExcelマクロVBA入門
第63回.ブックを開く(Open)

Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
最終更新日:2019-07-17

第63回.ブックを開く(Open)


VBA マクロ ブックを開く Open

他のブックを開く方法です、しかし、これがでは結構いろいろあるのです。
Excelで開くことが出来るファイルはCSV等のテキストファイルもありますが、
ここではエクセルファイル限定で説明します。


テキストファイルやCSVについては、別の記事を参考にして下さい。

CSVの読み込み方法
エクセルのVBAでのCSVの読込方法としては。・テキストファイルとして読み込む ・ワークブックとして読み込む ・クエリーテーブルを使う ・ADOを使う ・PowerQueryを使う 大別するとこのようになります。この記事を書いた当初はエクセルのVBAでCSVの読み込みについてネットで検索したところ


マクロVBAでブックを開くにはOpenメソッドを使用します。
このOpenメソッドには、指定できるオプション指定が非常に沢山用意されています。
通常使うものは限られていますが、一通りOpenメソッドを見てみましょう。


Workbooks.Openメソッド

Workbooks.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)



名前 説明
FileName 開くブックのファイル名。
UpdateLinks ファイル内の外部参照 (リンク) の更新方法を指定します。
ReadOnly ブックを読み取り専用モードで開くには、True を指定します。
Format テキスト ファイルを開く場合は、この引数で区切り文字を指定します。
Password パスワード保護されたブックを開くのに必要なパスワードを指定します。
WriteResPassword 書き込み保護されたブックに書き込みをするために必要なパスワードを指定します。
IgnoreReadOnlyRecommended [読み取り専用を推奨する] チェック ボックスをオンにして保存されたブックを開くときでも、読み取り専用を推奨するメッセージを非表示にするには、True を指定します。
Origin 開こうとしているファイルがテキスト ファイルの場合、それがどのような形式のテキスト ファイルかを指定します。
Delimiter 開こうとしているファイルがテキスト ファイルで、引数 Format が 6 の場合は、この引数で区切り文字を使用します。
Editable 開こうとしているファイルが Excel 4.0 のアドインの場合、この引数に True を指定すると、アドインがウィンドウとして表示されます。
Notify ファイルが読み取り/書き込みモードで開けない場合に、ファイルを通知リストに追加するには、True を指定します。
Converter ファイルを開くときに最初に使用するファイル コンバーターのインデックス番号を指定します。
AddToMru 最近使用したファイルの一覧にブックを追加するには、True を指定します。既定値は False です。
Local Excel の言語設定 に合わせてファイルを保存するには、True を指定します。
CorruptLoad 開くモードを、XlCorruptLoad列挙で指定します。
抽出(xlExtractData)、正常(xlnormalload)、修復(xlRepairFile)から指定します。
既定の動作はxlNormalLoadになり、回復は行われません。

上表は、名前付き引数です。

戻り値
Openメソッドには戻り値があります。
戻り値は、
開いたブックのWorkbookオブジェクトになります。

太字の引数のみ説明します。
それ以外について必要な場合は、上記表の説明またはヘルプ等を参考にして下さい。

FileName
通常は、エクセルファイルをフルパスで指定します。
FileName:="C:\User\sample.xls"
このように指定します。
パスが指定されていないと、カレントディレクトリーからになりますが、
そのよう使い方をせず、フルパスで指定するようにして下さい。

マクロを書いているブックと同一フォルダなら、
FileName:=Thisworkbook.Path & "\sample.xls"
このように指定します。
Thisworkbook.Path、これで自身のブックのパスが取得できます

UpdateLinks
外部参照 (リンク) のあるブックを開こうとすると、
リンクの更新方法を確認するメッセージがユーザーに表示されます。
0 : 外部参照 (リンク) は更新されません。
3 : 外部参照 (リンク) が更新されます。

(1,2の指定もありますが、特に使う事はないでしょう)
UpdateLinks:=0
これで、リンクが更新されずに、ブックが開かれます。
0Falseと記す事もできます、VBAでは、False=0です。


ReadOnly

ReadOnly:=True
これで、読み取り専用で開かれます。

Password、WriteResPassword
パスワード保護されているブックを開く場合には、
Password:="読取りパスワード"
WriteResPassword:="書込みパスワード"
このようにすることで、パスワード入力が出なくなります。

CorruptLoad
開くモードを、XlCorruptLoad列挙で指定します。
エラーのあるエクセルファイルを開くと、

マクロVBA openメソッド

このように、「'○○'の一部の内容に問題が見つかりました。・・・」とメッセージが出ます。
「はい」をクリックすると、

マクロVBA openメソッド

修復されたメッセージが表示され、「閉じる」でブックを開くことができます。
しかし、
このファイルをVBAでopenすると、

マクロVBA openメソッド

このようにマクロがエラー停止してしまいます。
先の手動で開く時と同様に、回復して開く場合は、
CorruptLoadにxlRepairFileを指定します。
さらに、修復されたメッセージを止めるために、
Application.DisplayAlerts = False
これも同時に指定してください。
CorruptLoadは引数の最後なので、名前付き引数を使い、
Application.DisplayAlerts = False
Workbooks.Open Filename:=ファイルパス, CorruptLoad:=xlRepairFile
このように指定してください。
XlCorruptLoad.はXlCorruptLoad列挙になります。

※注意
そもそもエラーファイルは、その原因やデータ破損が無いか等の確認が必要になります。
マクロで開けたとしても、そのファイルを放置しておいて良いかは別問題になります。

Openメソッドの使用例

Workbooks.Open "C:\User\sample.xls"
このように、ファイルのみ指定する場合は、名前付き引数を使用するまでもないでしょう。

Application.DisplayAlerts = False
Workbooks.Open Filename:="C:\Test\sample.xls", UpdateLinks:=0, ReadOnly:=True, CorruptLoad:=xlRepairFile
・外部参照 (リンク) は更新しない
・読み取り専用
・修復モード
このように、引数が複数になる場合は、名前付き引数を使用した方が良いでしょう。

Openメソッドの戻り値の使い方

SetステートメントでOpwnメソッドの引数を使う
Dim wb As Workbook
Set wb = Workbooks.Open(Filename:="C:\User\sample.xls")

メソッドの戻り値を使用する場合は、引数を()で囲みます。
戻り値が、Workbookオブジェクトなので、
同時に、Setステートメントで、オブジェクト変数に入れています。
これにより、オブジェクト変数で開いたブックを扱う事ができるようになります。
これは、
Workbooks.Open(Filename:="C:\User\sample.xls")

Set wb = Activeworkbook
または、
Set wb = Workbooks("sample.xls")
これらを1行で指定している事と同じ意味になります。

Withステートメント


With Workbooks.Open(Filename:=str)
  '・・・
.  Close SaveChanges:=False
End With

このように、Withで戻り値のブックオブジェクトを受け取るようにします。
開いたブックをVBA無いで使用する場所が限定されている場合は、
変数も必要ないので記述が簡単になります。
Withの中では、先頭の.(ピリオド)の付け忘れに注意しましょう。
参考
第51回.Withステートメント
Withステートメントを使う事で、Withに指定したオブジェクトに対してオブジェクト名を再度記述することなく、プロパティやメソッドを記述することができます。文章で例えて言えば、主語を一度書いたら、その後は主語を省略するような書き方になります。

Openメソッドの関連記事

ブックを安全確実に開く方法(Open)
マクロVBAの中で、他のブックを開く事はよくあります、ブックを開く時、ブックが存在しているか、既に開いてないか これらのチェックをせずに開いてしまうと、マクロがエラー停止してしまいます。ここでは、これらのチェック方法についての具体的なVBAコードを紹介します。



同じテーマ「マクロVBA入門」の記事

第60回.エラー処理(On Error)
第61回.「On Error GoTo」と「Exit Sub」
第62回.「On Error Resume Next」とErrオブジェクト
第63回.ブックを開く(Open)
第64回.ブックを閉じる・保存(Close,Save,SaveAs)
第65回.シートの挿入、名前の変更(Add,Name)
第66回.シートのコピー・移動・削除(Copy,Move,Delete)
第67回.総合練習問題7
第68回.シートの保護、ブックの保護(Protect)
第69回.シートの非表示(Visible)
第70回.ウィンド枠の固定(FreezePanes)


新着記事NEW ・・・新着記事一覧を見る

Byte配列と文字コード関数について|VBA技術解説(8月20日)
PowerQueryの強力な機能をVBAから利用する方法|VBA技術解説(8月4日)
練習問題31(セル結合を解除して値を埋める)|VBA練習問題(7月30日)
練習問題30(マトリックス→リスト形式)|VBA練習問題(7月25日)
Applicationを省略できるApplicationのメソッド・プロパティ一覧|VBA技術解説(7月22日)
コレクション(Collection)の並べ替え(Sort)に対応するクラス|VBA技術解説(7月20日)
CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)
オートフィルタを退避回復するVBAクラス|VBA技術解説(7月6日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.ひらがな⇔カタカナの変換|エクセル基本操作
10.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説



  • >
  • >
  • >
  • ブックを開く(Open)

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
    本文下部へ