NO.16 アクセスからエクセルを起動する

アクセスのデータからグラフ作成はフォームやレポートから作成することができますが、実際のシステム開発の現場ではエクセルを使用してグラフ作成することも多い。 つまりアクセスよりエクセルを起動して、アクセスの中でエクセルのVBAを実行することにより実現するかたちになります。 結果、アクセスのVBAではありますがエクセルのVBAを使用することになりますので詳しい内容はExcelVBAを参照してください。

エクセルを使用する準備

まず、どのフォームでも良いですからデザイン画面で開きます。 アクセスの画面から表示(V)-コード(C)でVBA画面を開き、ツール(T)-参照設定(R)...で参照設定画面を開きます。

参照設定

上に示すように参照設定画面より"Microsoft Excel 9.0 Object Library"にチェックを入れてOKボタンをクリックします。 この参照設定は一度だけ実行すれば良いですが、アクセスに設定されるわけではなくmdbに対して設定されますので、 別のmdbでもエクセルを使用する場合も同じように設定する必要があります。

作成するVBA

フォームに付けられたボタンをクリックするとエクセルで新しいワークブックを開く処理のVBA作成例を以下に示します。

作成するVBA
Dim WithEvents objExcel As Excel.Application
        ・
        ・
        ・
        ・
Private Sub cmdExcel_Click()
    Set objExcel = Excel.Application
    objExcel.Workbooks.Add '新しいワークブックを開く
        ・
        ・
    この間にエクセルへの処理を記述する
        ・
        ・
    objExcel.Visible = True 'Excelを表示する
    objExcel.ScreenUpdating = True 'Excelの画面を更新する
    Set objExcel = Nothing
End Sub

VBAの詳細説明

上記に作成したVBAの詳細を以下に説明します。

VBAの説明
Dim WithEvents objExcel As Excel.Application
アクセスの中で使用するエクセルの名前を定義します。
WithEvents:エクセルが起動された後はユーザーがウィンドウ上で操作することが出来ますが、その操作をアクセス上で知ることが出来るようにしますが、この定義はフォームのVBAでしか設定することが出来ません。
モジュール上で実行したい場合は、Dim objExcel As Excel.Application というように定義します。
objExcel:VBA上で使用する起動されたエクセルの名前です。
Excel.Application:エクセルそのものを意味します。
Set objExcel = Excel.Application
定義されたobjExcelExcel.applicationを設定することによりエクセルが起動されます。
objExcel.Workbooks.Add
objExcelは起動されたエクセルを示します。 よってWorkbooks.AddはエクセルのVBAで新しいワークブックを開きます。
objExcel.Visible = True
エクセルを起動した場合に画面へは非表示となっていますので、その非表示を表示に変えます。 なお、非表示の場合にはVBAの実行速度が向上します。
Excel.ScreenUpdating = True
エクセル起動した場合にVBAで実行中のエクセルの状態を画面で見られるようにします。 よってVBAの実行を始めるときにFalseとし、全ての処理が終わったときにTrueとすると実行速度が速くなります。
Set objExcel = Nothing
エクセルを開放します。といってもエクセルへの操作が出来なくなるだけでエクセル自体は終了されません。

注意事項

難しい説明は省きますが、ユーザーがすでにエクセルを実行している場合でも、これとは別に起動されますので混乱は避けられます。 逆に何回もこのボタンをクリックしても起動されているエクセルは一つだけです。

その逆にアクセスでエクセルが実行されている場合は、エクセルブックをエクスプローラからダブルクリックしたときは実行中のエクセルが使用されます。

エクセルをエクスプローラからダブルクリックして起動した場合に、対象のエクセルブックが非表示となる場合があります。 そのときは、アクセスを終了してから再度エクセルを起動すればよいですが、そうも行かない場合は表示(V)-全画面表示(U)すれば表示されます。 全画面表示している場合でも表示(V)-全画面表示(U)で元に戻しても表示されます。

作成日:2003/05/28 更新日:2003/11/07

| HOME | INDEX | | |