なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

AccessからExcelのセルに書き込む~Access VBA 入門~

f:id:nazuna_0124:20190920212833p:plain

今回はデータベースを使わないAccess VBAです。

フォームが使いやすく思わぬところで利点があるのです。


おつかれさまです。なずなです。



Accessというよりデータベースって結構難しいんです。

フォームだけでも最初に使ってみましょう。



今回の完成品

f:id:nazuna_0124:20190923194201p:plain


Sub 対象ブックのA1に書き込む()
    ' Windows Excel xx.0 Object Libraryの参照設定をしてください。
    Dim xls As Excel.Application
    
    'Excelを開いていないとエラーになります。
    Set xls = GetObject(, "Excel.Application")
    
    Dim bk As Workbook
    
    '対象のブックしか開いていない前提
    Set bk = xls.Workbooks(1)
    
    bk.Worksheets(1).Range("A1").Value = "Accessから入力"

End Sub


注目のポイント

GetObjectというやつ

すでに開いているオブジェクトをクラス名を指定して

取得する命令です。


よくわたしはこれとCreateObjectをあわせて

オブジェクトをつかむって表現してます。


オブジェクトを変数で捉えることで初めて操作ができるのです。


このときのクラス名は覚えるだけです。がんばりましょう。



Access準備の手順

今回は普通に手順をのせてみます。

バージョンが違うと少し違うかも。知ってる人は飛ばしてね。


Accessのファイルを作成して開きます。

f:id:nazuna_0124:20190923194720p:plain


初期画面から作成をクリック f:id:nazuna_0124:20190923194757p:plain


空白のフォームをクリック

f:id:nazuna_0124:20190923194824p:plain


開いたフォームで右クリック。デザインビューをクリック f:id:nazuna_0124:20190923194859p:plain


デザインタブのボタンをクリック f:id:nazuna_0124:20190923194925p:plain


ドラッグでボタンを設置。ウィンドウが表示されるのでキャンセル f:id:nazuna_0124:20190923194957p:plain


ボタンを右クリック。イベントのビルドをクリック f:id:nazuna_0124:20190923195107p:plain


コードビルダーを選択してOKをクリック

f:id:nazuna_0124:20190923195153p:plain


VBEがひらきます。あとで作成するプロシージャ名「サンプル」を呼び出すように入力します。 f:id:nazuna_0124:20190923195214p:plain


挿入>標準モジュールで作成します。 f:id:nazuna_0124:20190923195340p:plain


フォームウィンドウに戻って「Ctrl + S」で保存。フォーム名は任意でOKを押します。

f:id:nazuna_0124:20190923195244p:plain


フォームウィンドウに戻って「Ctrl + S」で保存。フォーム名は任意でOKを押します。 f:id:nazuna_0124:20190923195456p:plain


タブのところで右クリック。フォームビューをクリック。

f:id:nazuna_0124:20190923195531p:plain


ボタンを押すとプロシージャが実行。メッセージボックスが表示されます。

f:id:nazuna_0124:20190923195604p:plain


プロシージャを作成。

Sub 対象ブックのA1に書き込む()
    ' Windows Excel xx.0 Object Libraryの参照設定をしてください。
    Dim xls As Excel.Application
    
    'Excelを開いていないとエラーになります。
    Set xls = GetObject(, "Excel.Application")
    
    Dim bk As Workbook
    
    '対象のブックしか開いていない前提
    Set bk = xls.Workbooks(1)
    
    bk.Worksheets(1).Range("A1").Value = "Accessから入力"
End Sub


Set bk = xls.Workbooks(1)

こいつに慣れてほしいです。

オブジェクトとしてブックをつかんでしまえば、あとは

普段のVBAと一緒です。



作ったプロシージャを呼びだすように変更。

Private Sub コマンド0_Click()
    Call 対象ブックのA1に書き込む
End Sub

VBEの左上。フォームのところをクリックで画面を開きます。

そこを修正。

Private Sub コマンド0_Click()
    Call 対象ブックのA1に書き込む
End Sub


これでボタンを押したらExcel側へ書き込むようになります。


思ったより長かったので今回はここまで。

乗せ換えるのは次回に回しまーす。