本記事のコードはAccess 2013で記述しています。
Accessとは
Microsoftが提供するデータベース管理ソフトです。データベースとは、大量のデータを整理して蓄積し、必要なときにすぐに取り出せるように管理しているシステムのことを言います。データを表(テーブル)として管理する「リレーショナルデータベース」方式のひとつです。SQL
の知識がなくてもテーブル操作ができるのが大きな特徴といえます。
Accessに関して詳しく知りたい方は、以下リンクをご覧ください。
Microsoft Access
AccessからExcelを操作しようと思った理由
私の部署では業務管理システムにAccessが採用されています。
報告書作成から担当情報の閲覧等までPC業務の大半はこのシステムを介して行われます。
故に、このシステムからなんでも操作できた方がユーザー的にはありがたい。
Accessは先ほど記述した通り、Microsoft製のアプリケーションなので、
先日記事で投稿した、「Excel VBAと出会ったきっかけ」のExcelVBAプログラムもコードコピペするだけで、Accessにそのまま組み込めるのではないかと天才的に閃いた。
さっそくやってみた
UIにコマンドボタンをテキトーに一つ置いてクリックイベントでコードをコピペして実行、、、
が、全然ダメ! 圧倒的エラー!!!
当たり前だが、**"ExcelVBA = AccessVBA"
**とはいかないらしい、、、
本題(操作方法)
茶番はここまでにしておこう(笑)
AccessからExcelを操作する場合、まずExcelアプリケーションを起動させオブジェクト変数に格納する必要がある。
Dim objExcel As Object, objWb As Object, objWs As Object
Set objExcel = CreateObject("Excel.Application")
Set objWb = objExcel.Workbooks.Open("ブックのパス")
Set objWs = objWb.Worksheets("シート名")
変数に格納するのはobjExcel
だけでもいいが、
上記のようにブックやシートも変数に格納した方がスマートだろう。
オブジェクト変数を格納したらまずやるべきことがある。
objExcel.Visible = True 'エクセル可視(True)/不可視設(False)
Excelの可視化設定をTrueに返すことだ。
"Accessではデフォルトの設定でExcel起動時の可視化設定がFalseになっている。"
つまり、タスクバーにもどこにもExcelが表示されず、目視ではExcelが起動しているかどうかもわからない。
プログラムを実行してエラーが起きた場合、プログラムで作成したブックを削除しようとしても、PC上ではブックが開いた状態なので削除できないみたいなことが起こりうる。
プログラムが狙い通り動くまでは可視化にしておくのが無難だろう。
本線に戻ろう。
objWs.cells(1, 1).Select 'A1セルを選択
objWb.Save 'ブックを閉じる
シートを操作する場合はobjWs
、ブックを操作する場合はobjWb
を先頭につける。
一連の処理が終了したら、
Set objWs = Nothing
Set objWb = Nothing
objExcel.Quit 'Excelを終了
オブジェクト変数を解除し、Excelを終了する。
注意点
本題の部分を押さえていれば基本的に問題はない。
しかし、Access VBA
では、Excel VBA
でデフォルトで使えるメソッド等が使えないことも少なくない。一つ例を挙げると、表の最終行を取得するのによく使われる.End(xlDown)
の**xlDown
**は、Accessではサポートされていない。
<対処法>どちらか一方をすればOK
・ツール⇒参照設定で **Excel "" Object Library
を追加する
・xlDown
**に代替する数字を入れる(以下リンク参照)
https://docs.microsoft.com/ja-jp/office/vba/api/excel.xldirection