こんにちは、三流プログラマー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): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]