• ベストアンサー
  • 暇なときにでも

EXCELのマクロ記録でMSアクセス操作は可能?

  • 質問No.8465014
  • 閲覧数289
  • ありがとう数13
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 50% (1/2)

EXCEL2003のDATA(SHEET1全体)をアクセス2003の指定されたテーブルに取り込む操作を
マクロの記録で行いたいのですが可能でしょうか?。
VBA等難しく思えるので、マクロの記録だけでできるといいのですが....。

下記のような操作はVBAで簡単に組めますでしょうか?。

(1)アクセスのBBB.MDBのTTTというテーブル内のDATAを全削除してテーブル閉じる
(2)AAA.XLSのsheet1全体をTTTのテーブルにインポート。
(3)データーベースの最適化を行い保存して閉じる。

以上初歩的かもしれませんが、どなたかお願いします。

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 70% (288/408)

前提条件として、
ExcelではAccessのフィールド名に相当するタイトル行があること。
各列の値がAccessのフィールドのデータ型に沿ったものである事。
(でないとエクスポートエラーになります)
で、VBA では下記のようになります。
(他にも方法がありますが、多分これが分かりやすいかと思います)
Excel で、Alt + F11 キーでVBEの画面にして
挿入→標準モジュール を選択し、下記コードを貼り付けます。
緑色になっているコメント行を読んで指示に従ってください。
>マクロの記録で行いたい
さすがのMS社さんもそこまで面倒は見てくれません。
>初歩的かも
難しい範疇に入ります。

Sub AccessMDB()
'ツール→参照設定 から
'Microsoft Access xx.x Object Library に
'チェックが必要です。
'xx.x は環境によって変わります
Dim AC As Access.Application
Set AC = CreateObject("Access.Application")
Stop
'ここで確認のため一旦止めています
'以降は、F8 を押して一行ずつ進めていって(ステップ実行)
'テーブルの中身の変化を確認していってください
'
AC.OpenCurrentDatabase "D:\Office\BBB.mdb", True
'実際のmdbファイルのフルパスに書き換えてください
AC.CurrentDb.Execute "delete * from TTT"
'テーブルのレコード削除
AC.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "TTT", ThisWorkbook.FullName, True, "Sheet1!"
'テーブルに出力
'ワークシートの1行目をテーブルのフィールド名とするように、True としています
AC.DoCmd.RunCommand acCmdCompactDatabase
'最適化実行
AC.CloseCurrentDatabase
'ファイルを閉じます
AC.Quit
'Access終了
End Sub
お礼コメント
matsutake4018

お礼率 50% (1/2)

大変わかりやすく説明して頂きありがとうございます。
早速トライしてみます。
お礼遅れてすみませんでした。
投稿日時:2014/02/22 13:53

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 24% (1595/6502)

EXCELのマクロはEXCEL内だけのものです。ですのでACCESSは記録されません。ただし、取得だけは外部データーへの参照で出来ます。
ご質問の内容はVBAを書かなければ不可能です。書けば出来ます。
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ