pickup

目次

ACCESSから、閉じているExcelへデータ転送2

こんにちは。伊川(@naonaoke)です。


前回は、上の記事を説明しました。

今回は、実際に、ACCESSのフォームの中身をExcelへ転送します。

問題提起

 

阿久 世子男(アク セスオ)は今考え込んでいます。

前回は、サンプルファイルで、ACCESSから閉じているExcelへ転送することはできました。

しかし、フォームに入力された値を転送するにはどの用にするのだろうか?

 

解決策

 

回答
sesuo2.jpg
・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 追加したコードの解説


ここがポイント

 

ここがポイント
Function8.png

今回は、非常に難しい内容になったとおもうのですが、VBAはパーツごとに組合わせて最後に作動させることができます。
1つ1つのパーツはそれほど難しいものではありませんので、作動しない場合は、イミディエイト ウィンドウ等で確認しながら、進んでいきましょう。

 

まとめ

今回に関しては、サンプルファイルで実行しながら、確認したほうがいいかも知れません。

結構難しい内容になりました。申し訳ありません。

 

今回のサンプルファイルは、No73です。

毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

スポンサーリンク

Twitterでフォローしよう

おすすめの記事