[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.054 AccessからExcel開いて、処理終了後に閉じたい

AccessからExcel開いて、処理終了後に閉じたい

こんにちは、三流プログラマーKen3です。

今回は、
AccessからExcel開いて、処理終了後に閉じたい
を軽く書きたいと思います。

へぇ〜、そうなんだぁ程度に、気楽に読んでください。

サンプルファイルは、
http://www.ken3.org/vba/lzh/vba054.lzh
に
db054-97.mdb, test054-book.xlsが保存されています。

Access側のdb054-97.mdbから、test054-book.xlsを開いて、閉じてます。
遊んでみてください。

/*
 * 1.今回のキッカケ
*/

掲示板 : http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi
に下記の書き込みがありました。

In message "[BBS :52] アクセスからエクセル",
 >BBS に以下の投稿がありました。
 >
 >投稿時間:2003/02/05(Wed) 23:15
 >
 >おなまえ:fox1972
 >タイトル:アクセスからエクセル
 >コメント:
 >
 >AccessからExcelの「とある」ブックを立ち上げて、そのブックでは
 >"Workbook_Open()"を用いてとある処理をさせる。その処理が終われ
 >ばブックを閉じてAccessに戻る...といった、わがままな処理は出来ますか?
----

わがまま?とは思わないけど、最近過保護が増えたのかなぁ?
じゃなくって、ありそうな処理ですよね。

/*
 * 2.簡単に書いたけど、あれ?関数走らない、、、なぜ?
*/
Access97側で、ブックを開きます。
その後、ブックを閉じて、Excelも終了させます。
    '頭にCreateObjectで作成した変数を追加しただけ
    oApp.Workbooks.Open FileName:=strXLSFILE
    '^^^^

    'AUTO_OPENのモジュールが勝手に走る

    '終わったら、閉じたいんだけど、、、
    oApp.ActiveWorkBook.Close SaveChanges:=False
    oApp.Quit
がポイントです。

Access97側サンプルのボタン
Option Compare Database
Option Explicit

Private Sub btnTEST_Click()

    Dim strXLSFILE As String   'Excelのファイル名格納場所
    Dim oApp       As Object   'Excelを操作するオブジェクト変数
    Dim strMDBPATH As String
    Dim strWORK    As String
    Dim i          As Integer  'カウンター変数


    'Accessの起動位置を取得 CurrentDb.NameにD:\xxxx\yyyy\zzz.mdbが入っている
    strWORK = CurrentDb.Name
        '後ろから1文字単位で¥を探す
    For i = Len(strWORK) To 1 Step -1
        If Mid(strWORK, i, 1) = "\" Then Exit For  '¥だったら抜ける
    Next i
        'D:\xxxx\yyyy\zzz.mdb --> D:\xxxx\yyyy\ にする
    strMDBPATH = Mid(strWORK, 1, i)

    'Excelの元ファイルの名前を作成 D:\xxxx\yyyy\ + TYPE.xls
    strXLSFILE = strMDBPATH & "Test054-Book.xls"
    
    'ファイルの存在をチェックする
    If Dir(strXLSFILE) = "" Then
        MsgBox strXLSFILE & " を 確認して下さい"
        Exit Sub  '途中で抜ける
    End If

    Set oApp = CreateObject("Excel.Application")
    oApp.Visible = True
    'Only XL 97 supports UserControl Property
    oApp.UserControl = True

    '頭にCreateObjectで作成した変数を追加しただけ
    oApp.Workbooks.Open FileName:=strXLSFILE
    '^^^^

    'AUTO_OPENのモジュールが勝手に走る

    '終わったら、閉じたいんだけど、、、
    oApp.ActiveWorkBook.Close SaveChanges:=False
    oApp.Quit

End Sub

Excel97側では、
Workbook_Openにメッセージボックスと、ユーザー関数を呼んでみました。
*ユーザー関数は、自由に書いてくださいね。

Private Sub Workbook_Open()
    MsgBox "ブックを開きました"
    Call PUT_DATA  '関数を呼ぶ
End Sub

Sub PUT_DATA()
    
    Sheets("Sheet1").Select
    Range("B4").Select
    
    Range("B4").Value = "XXさん大好き"

    Dim i As Integer
    
    For i = 10 To 126
        Range("B4").Font.Size = i
    Next i
    
    For i = 126 To 12 Step -1
        Range("B4").Font.Size = i
    Next i

End Sub

テスト実行、、、
あれ?PUT_DATAの関数が走らない、、、なぜ?

単体でExcelブックを開くと走るのに、、、う〜ん。。。。

/*
 * 3.小細工で、RUNメソッドに変更
*/

Workbook_Openで走らないので、
Excelのユーザー関数を、.RUNメソッドで呼んでみた。

AUTO_OPEN辞めて、自分で関数呼ぶ

Option Compare Database
Option Explicit

Private Sub btnTEST_Click()

    Dim strXLSFILE As String   'Excelのファイル名格納場所
    Dim oApp       As Object   'Excelを操作するオブジェクト変数
    Dim strMDBPATH As String
    Dim strWORK    As String
    Dim i          As Integer  'カウンター変数


    'Accessの起動位置を取得 CurrentDb.NameにD:\xxxx\yyyy\zzz.mdbが入っている
    strWORK = CurrentDb.Name
        '後ろから1文字単位で¥を探す
    For i = Len(strWORK) To 1 Step -1
        If Mid(strWORK, i, 1) = "\" Then Exit For  '¥だったら抜ける
    Next i
        'D:\xxxx\yyyy\zzz.mdb --> D:\xxxx\yyyy\ にする
    strMDBPATH = Mid(strWORK, 1, i)

    'Excelの元ファイルの名前を作成 D:\xxxx\yyyy\ + TYPE.xls
    strXLSFILE = strMDBPATH & "Test054-Book.xls"
    
    'ファイルの存在をチェックする
    If Dir(strXLSFILE) = "" Then
        MsgBox strXLSFILE & " を 確認して下さい"
        Exit Sub  '途中で抜ける
    End If

    Set oApp = CreateObject("Excel.Application")
    oApp.Visible = True
    'Only XL 97 supports UserControl Property
    oApp.UserControl = True

    '頭にCreateObjectで作成した変数を追加しただけ
    oApp.Workbooks.Open FileName:=strXLSFILE
    '^^^^

    'AUTO_OPENのモジュールが勝手に走る

    '関数を自分で呼ぶ
    oApp.Run "PUT_DATA"

    '終わったら、閉じたいんだけど、、、
    oApp.ActiveWorkBook.Close SaveChanges:=False
    oApp.Quit

End Sub


oApp.Run "PUT_DATA"で関数呼ばれて、Excel側の処理は終了。

終わったら、閉じたいから、
    oApp.ActiveWorkBook.Close SaveChanges:=False
とブックを強制クローズしてから、
    oApp.Quit
でExcelアプリをサヨナラする。

逃げ手だけど動いたと思います。。。。。

/*
 * 4.おわりの挨拶
*/

今回は、AccessからExcelアプリの操作で、
・.Run "モジュール名"でExcelのユーザー関数実行
・.ActiveWorkBook.Close SaveChanges:=False でブックを強制的に閉じる
・.Quit でアプリケーションを終了
でした。

サンプルファイルは、
http://www.ken3.org/vba/lzh/vba054.lzh
に
db054-97.mdb, test054-book.xlsが保存されています。

Access側のdb054-97.mdbから、test054-book.xlsを開いて、
処理後に閉じてます。
遊んでみてください。

何か素朴な疑問などあったら、メール、掲示板に気軽に書いてください。

拾い読みして、
1つでも何かの参考となれば幸いです。

Excel/Access大好き、三流プログラマーKen3でした。

----------------------------------
関連項目(ただのバックナンバー紹介)
----------------------------------
[No.7 MDBと同フォルダのExcelファイルを開く]
( http://www.ken3.org/backno/backno_vba02.html#7 を参照)
では、MDBと同フォルダのExcelファイルを開きました。

[No.48 AccessからExcelブックを開き、書式設定を行う]
( http://www.ken3.org/backno/backno_vba10.html#48 を参照)
では、AccessからExcelブックを開いて、書式の設定を行いました。

時間があったら、あわせてみて下さい。

In message "outlookを開いてメールを送ることはできますか?",
onikoさん wrote...
 > IEを開いてHPを見るというのがありましたが、
 >OUTLOOKを開いてメールを送るにはどうしたら
 >よろしいでしょうか?
 >
 > 宛先はエクセルのどこかのセルに入れておいても
 >構いません。
 >
 > マガジンで紹介してください。
 >急ぎませんのでよろしくお願いいたします。
----

急がないって言われると、変わり者だから急ぎたくなるんだよなぁ、、、
OUTLOOKかぁ、久しぶりにイタズラしてみようかなぁ。。。。


ページフッター

ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、

種類別のリンク や 広告など

気になったジャンル↓を選択してください。

人気記事(来場者が多いTOP3):
[VBAでIE,WebBrowserを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[Access から Excel 連携 CreateObject("Excel.Application")]・・・AccessからExcelを操作したりデータの書き出しなどです
[VBAでOutlookの操作 CreateObject("Outlook.Application" )]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。

Excel関係:
[Excel UserFormを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です

Access関係:
[Access UserForm/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[Access レポート操作]・・・レポートを操作してみました
[Access クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

その他:VBAの共通関数やテキストファイルの操作など
[VBAでテキストファイル(TextFile)の操作]・・・普通のテキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます

開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う]

仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力]

※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。
※※読んで、気分を悪くされたらスミマセン。

Blogとリンク:[三流君の作業日記]/ [VBAやASPのサンプルコード]/ 広告-[通販人気商品の足跡]



[三流君(TOP ken3.org へ戻る)] / [VBA系TOPへ] / [VBA系バックナンバー目次へ移動]