目次
ACCESSから、閉じているExcelへデータ転送2
こんにちは。伊川(@naonaoke)です。
前回は、上の記事を説明しました。
今回は、実際に、ACCESSのフォームの中身をExcelへ転送します。
問題提起
阿久 世子男(アク セスオ)は今考え込んでいます。
前回は、サンプルファイルで、ACCESSから閉じているExcelへ転送することはできました。
しかし、フォームに入力された値を転送するにはどの用にするのだろうか?
解決策
・GetObject 関数でExcelを起動させせる
・SpecialCells メソッドを利用してExcelへ書き込む。
GetObject 関数
ファイルから ActiveX オブジェクトにアクセスして、そのオブジェクトをオブジェクト変数に割り当てるために使用されます。 GetObject で返されたオブジェクトをオブジェクト変数に割り当てるには、Set ステートメントを使用します。
このようにヘルプには記載されています。
今回の紹介する内容であれば、Excelを起動するたに使用されていると思ってください。
また、ヘルプの中に、ActiveXの記載があります。
ActiveXは、マイクロソフトがオブジェクトのやりとりを行う仕組みである
Object Linking and Embedding (OLE) からインターネットに関する技術を分離させたものです。
カンタンなイメージを作成すると、上の図のようになります。
SpecialCellsメゾット
指定した条件に一致するセルを取得します。
今回の場合は、Excelに転送した際に、追加をしていく状態になります。
つまり、直前のレコードまでという事になります。
最初に、コード全体を確認してください。
前回のコードに付け足した部分を囲んでみます。
Private Sub コマンド0_Click() Dim AppObj As Object 'Excel.Applicationオブジェクトの宣言 Dim WBObj As Object 'Excel.Workbookオブジェクトの宣言 Dim WsObj As Object 'Excel.WorkSheetオブジェクトの宣言 '------------------------------------12/24に追加した内容①--------------------------------------------- Dim strNewCell As String Dim objRange As Range Const xlCellTypeLastCell = 11 '------------------------------------12/24に追加した内容①--------------------------------------------- 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 '------------------------------------12/24に追加した内容②--------------------------------------------- Set AppObj = GetObject _ (, "Excel.Application") Set WsObj = AppObj.Worksheets("Sheet1") Set objRange = WsObj.UsedRange objRange.SpecialCells(xlCellTypeLastCell).Activate strNewCell = "A" & AppObj.ActiveCell.Row + 1 AppObj.Range(strNewCell).Activate With AppObj.Range(strNewCell) .Cells(1, 1) = Me![商品ID] .Cells(1, 2) = Me![商品名] .Cells(1, 3) = Me![単価] .Cells(1, 4) = Me![割引] End With '------------------------------------12/24に追加した内容②--------------------------------------------- AppObj.DisplayAlerts = False WBObj.Save 'ワークブックを保存する WBObj.Close 'ワークブックを閉じる AppObj.Quit AppObj.DisplayAlerts = True DoCmd.RunCommand acCmdSaveRecord DoCmd.GoToRecord , , acNewRec MsgBox "ACCESS Excel データ登録完了 " End Sub
ACCESSから、閉じているExcelへデータ転送2 作成手順その2 追加のデータベースを確認
ACCESSから、閉じているExcelへデータ転送2 作成手順その3 追加したコードの解説
ここがポイント
今回は、非常に難しい内容になったとおもうのですが、VBAはパーツごとに組合わせて最後に作動させることができます。1つ1つのパーツはそれほど難しいものではありませんので、作動しない場合は、イミディエイト ウィンドウ等で確認しながら、進んでいきましょう。
まとめ
今回に関しては、サンプルファイルで実行しながら、確認したほうがいいかも知れません。
結構難しい内容になりました。申し訳ありません。
今回のサンプルファイルは、No73です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。