こんにちは、三流プログラマー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のサンプルコード]/
広告-[通販人気商品の足跡]