目次
ACCESSから、閉じているExcelへデータ転送
こんにちは。伊川(@naonaoke)です。
ブログで紹介した事例
ACCESSからExcelへ転送する
Excelから、閉じているExcelへ転送
このよな技を紹介しました。
まだまだ、たくさんあるのですが、今回は、ACCESSから、閉じているExcelへデータを転送します。
問題提起
(株)IKAWAの阿久 世子男(アク セスオ)は上司から下記のような依頼を受けました。
ACCESSで登録した内容をリアルタイムでExcelで確認したい。
こんなことができるのだろうか?
解決策
・OLEオートメーション機能を利用するとACCESSから、Excelへ連携ができます。
Object Linking and Embedding
Object Linking and Embedding (OLE、オブジェクトのリンクと埋め込み)は、マイクロソフトが開発した、オブジェクトをやり取りするための仕組み・規約である。 開発者に対しては、OLEコントロール拡張(OLE Control Extension, OCX)のような、カスタムユーザーインターフェイス要素の開発と利用をもたらす。 技術詳細的には、OLEオブジェクトは、IOleObjectインターフェイス[1]を実装した何らかのオブジェクトである(オブジェクトの要求仕様によっては、他のインターフェイスをともに実装していることもある)。
なんかよくわからないですが、要するに、ことなるアプリケーション同士でも、操作できますということを言っています。
ACCESSからExcelへデータ転送 作成手順その1 データベース確認
今回は試験運用なので、データベースはありません。
「レコード検索」のボタンを押すとExcelにデータ転送が開始します。
ACCESSからExcelへデータ転送 作成手順その2 ボタンにVBAのコードを仕込む
上の図がコードの説明になります。
Private Sub コマンド0_Click() Dim AppObj As Object 'Excel.Applicationオブジェクトの宣言 Dim WBObj As Object 'Excel.Workbookオブジェクトの宣言 Dim WsObj As Object 'Excel.WorkSheetオブジェクトの宣言 Dim FilePath As String FilePath = Application.CurrentProject.Path & "\本日の売上.xlsx" Set AppObj = CreateObject("Excel.Application") '実行時バインディング Set WBObj = AppObj.WorkBooks.Open(FilePath) 'ワークブックを開く Set WsObj = WBObj.Worksheets("Sheet1") AppObj.Visible = True WsObj.Range("A1").Value = "Access" AppObj.DisplayAlerts = False WBObj.Save 'ワークブックを保存する WBObj.Close 'ワークブックを閉じる AppObj.Quit AppObj.DisplayAlerts = True End Sub
ACCESSからExcelへデータ転送 作成手順その3 コードを実行する
処理が実行されました。
実務では、通常このような処理はしません。
フォームに入力したものを、さらにExcelへ転送すると思います。
フォームに入力した値を、Excelへ転送する場合は、また、次の機会に紹介します。
ここがポイント
しかし、実務ではマレでも、どの用に実現するかということは、VBAの思考回路を鍛えるのにとても重要です。
まとめ
もっと貪欲にスキルを身につけようと思った阿久 世子男(アク セスオ)なのでした。
今回のサンプルファイルは、ありません。完成のファイルを用意しますので、おまちください。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。