VBAサンプル集
ブックを安全確実に開く方法(Open)

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
最終更新日:2019-05-31

ブックを安全確実に開く方法(Open)


マクロVBAの中で、他のブックを開く事はよくあります、


ブックを開く時、
ブックが存在しているか、
既に開いてないか
これらのチェックをせずに開いてしまうと、マクロがエラー停止してしまいます。

ここでは、これらのチェック方法についての具体的なVBAコードを紹介します。

Openメソッドの詳細については、ブックを開く(Open) こちらを参照してください。
他のブックを開く方法です、しかし、これが結構いろいろあるのです。Excelで開くことが出来るファイルはCSV等のテキストファイルもありますが、ここではエクセルファイル限定で説明します。テキストファイルやCSVについては、別の記事を参考にして下さい。

Sub Bookを開く()
  Dim wb As Workbook
  Dim buf As String
  Dim BookPath As String
  BookPath = "C:\Book1.xls"
  'ブックの存在チェック
  buf = Dir(BookPath)
  If buf = "" Then
    MsgBox BookPath & vbCrLf & "は存在しません。"
    Exit Sub
  End If
  '同名ブックのチェック
  For Each wb In Application.Workbooks
    If wb.Name = buf Then
      wb.Activate'指定ブックに移動
      MsgBox buf & vbCrLf & "は既に開いています"
      Exit Sub
    End If
  Next

  'イベントを停止

  Application.EnableEvents = False 
  'ブックを開く
  Workbooks.Open BookPath

  Application.EnableEvents = True 
End Sub




要点は、


・ブックの存在チェック
・同名ブックのチェック

この2点です。

特に、
エクセルでは、別ファイルでも、同一名称のブックは2重に開くことが出来ません。

この間違いは、マクロのテスト中は良くやってしまいます。

このようにしておけば安心です。

また、
Application.EnableEvents = False 
これは、開いたブックにWorkbook_Openマクロがあった場合で、それを起動したくない場合の指定です。



同じテーマ「VBAサンプル集」の記事

シートの複数選択(Select)

複数のシートの選択方法です。シート名は、「Sheet1」「Sheet2」「Sheet3」とします。まずは、マクロの記録と同じように。シート名がわかっていれば、これで良いですが、シート名が不明な場合は困ります。
複数シートの印刷(PrintOut)
複数シートの印刷方法です。シートは、ワークシートが「Sheet1」「Sheet2」「Sheet3」があり、その他で、グラフシートもあるとします。ワークシートのみ印刷する場合です。シート名がわかっていれば、これで良いですが、シート名が不明な場合は困ります。
重複削除してコピー(AdvancedFilter)
重複データを排除して、別シートにコピーする場合です。以下の表で説明します。フィルターオプションを使います。このマクロは、この指定と同じになりります。似たような方法ですが、コピー部分を自分で記述する場合です。
ブックを安全確実に開く方法(Open)
ブックを閉じる(Close)
ブックを閉じる時の処理方法です。まずは、保存して閉じる場合。これは、次のように書くこともできます。Subsample2()ThisWorkbook.CloseSaveChanges:=TrueEnd Sub では、保存しないで閉じる場合。
他ブックを開いて閉じる(Open,Close)
他のブックを開いて、何らかの処理(転記等)をして、閉じる。よくあるパターンですね。簡単にサンプルのみ掲載します。Subsample2()DimwbAsWorkbookSetwb= Workbooks.Open("ブックのフルパス")…処理wb.CloseSaveChanges:=FalseEnd Sub 保存が必要な時は、
ブックを開かずにセル値を取得(ExecuteExcel4Macro,Excel.Application)
「ブックを開かずにセル値を取得」に関する検索が非常に多いようです。おそらく、ExecuteExcel4Macroに関連しているとか、もしくは、大量のファイルがある為、VBAの処理時間がかかってしまうと言うものでしょう。ExecuteExcel4Macroについての簡単な解説は、「ExecuteExcel4Macroについて」サンプルを通して、
罫線を簡単に引く(Borders,BorderAround)
エクセルでは、罫線を引く事が多いです。この罫線は、以外に処理時間もかかりますし、やり方によっては、VBAの行数も多くなります。とにかく、簡単に罫線を引く方法です。以下の表を作成する場合です。罫線を引く順番等、いろいろありますが、とにかく短いコードにしてみます。
マクロVBAの開始時と終了時に指定しておくべきApplicationのプロパティ
マクロVBAの開始時および終了時に指定した方が良いApplicationのプロパティの開設です。特に重要なもの、マクロVBAの処理速度に関係するものを紹介します。Applicationのプロパティの詳細については以下をご覧ください。
オートフィルター(AutoFilter)
エクセルでは、定番機能のフィルターです。「Sheet1」のA列でフィルターし、「Sheet2」へコピーします。ごく基本的なフィルターです。フィルターのセル範囲指定は、いろいろな指定が可能です。「連続セル範囲の選択 」も参考にして下さい。
日付のオートフィルタ(AutoFilter)
とても便利なオートフィルターですが、日付となると、結構大変です。以下の表で説明します。普通は、こんなように指定します。Operator:=xlFilterValues は2007以降で追加された機能です。


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

ツイッターで出されたVBAのお題をやってみた|エクセル雑感(1月13日)
イベントプロシージャーの共通化(Enter,Exit)|ユーザーフォーム入門(1月13日)
Rangeオブジェクトの論理演算(差集合と排他的論理和)|VBA技術解説(1月10日)
イベントプロシージャーの共通化|ユーザーフォーム入門(1月7日)
コントロールの動的作成|ユーザーフォーム入門(1月6日)
Evaluateメソッド(文字列の数式を実行します)|VBA技術解説(1月5日)
エクスポート(PDF/XPS)|VBA入門(1月2日)
分析関数(OVER句,WINDOW句)|SQL入門(12月25日)
取得行数を限定するLIMIT句|SQL入門(12月21日)
外部ライブラリ(ActiveXオブジェクト)|VBA入門(12月21日)


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

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



  • >
  • >
  • >
  • ブックを安全確実に開く方法(Open)

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


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



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