ヘルプの森~Excel・Access・Office全般ヘルプデスクサイト

No.001

AccessからExcelを操作する 《CreateObject》

2003/2007/2010/2013/2016

AccessとExcelはよく連携してデータのやり取りを行うことがありますね。
そんな中で、AccessからExcelを操作するサンプルをご紹介します。

CreateObject関数を使用し、ActiveX オブジェクトの参照を作成、アプリケーションを操作します。
今回は該当のExcelファイルを開かずににシートを削除します。

Sub Sample()
  Dim exApp As Object
  Dim Wb As Object

  Set exApp = CreateObject("Excel.Application")
  exApp.Visible = False   'エクセル可視/不可視設定
  exApp.DisplayAlerts = False   '警告メッセージをオフ
  Set Wb = ExApp.Workbooks.Open("パス¥ファイル名")

  With Wb
    .Worksheets("Sheet1").Delete
    '任意の操作記述

    .Save
    .Close
  End With

  exApp.DisplayAlerts = True   '警告メッセージをオン
  exApp.Quit   'Excel終了
  Set exApp = Nothing   '参照を解放

  MsgBox "完了しました。"
End Sub

記述で大事なことがありますので、先にご案内します。
CreateObject関数で作成した参照は、終了後解放しなければなりません。
オブジェクトの参照を解放するには、オブジェクト型変数にNothingを代入します。

ところで、今回はシートの削除をしています。
Excelを可視にしていると、データがあるシートを削除する際の警告メッセージが表示されると、そこで動作が一時止まります。
また、Excelを不可視の状態で実行しますと、警告メッセージによってシートが削除されずに残ってしまいます。
したがって、警告メッセージの記述は最初にオフにして実行し、最後はオンに戻してください。

ヘルプmemo

<CreateObject関数>

ActiveX データ オブジェクトへの参照を作成し、返します。
 構文: CreateObject(class [, servername])
 引数:
  class …作成するオブジェクトのアプリケーション名とクラスを指定
  servername …オブジェクトを作成するネットワーク サーバーの名前を指定
 ヒント:
  引数[class]は、appname.objecttype の形式で指定します。
  引数[servername]を省略すると、ローカル コンピュータが使われます。
  記述の最後には、参照を解放する必要があります。

関連ヘルプ

テーブルの複数フィールドのデータ型をまとめて変更する
既存のメモ帳を開く 《Shell》
データベースを開いている状態で自分自身をバックアップする 《FileSystemObject》
twitter hatena line pocket