Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : Access 2013)
大量データのインポートマクロがRunMacroで実行できない
投稿日時: 24/09/01 16:06:14
投稿者: HT

EXCEL VBAにて「DoCmd.RunMacro ("テストインポート")」を行うと「別のOLE・・・」のエラー
が出ます。インポートするのはEXCELのBOOKで40万行近くの大量データです。
因みにACCESS内にある「テストインポート」を手動で実行するとできます。
DoCmd.RunMacroだとタイムアウトの制限があるのでしょうか?

回答
投稿日時: 24/09/01 16:59:27
投稿者: Suzu

HT さんの引用:
EXCEL VBAにて「DoCmd.RunMacro ("テストインポート")」を行うと「別のOLE・・・」のエラー
が出ます。インポートするのはEXCELのBOOKで40万行近くの大量データです。
因みにACCESS内にある「テストインポート」を手動で実行するとできます。
DoCmd.RunMacroだとタイムアウトの制限があるのでしょうか?

 
 
1. 対象のアプリケーションが違う
 DoCmd.RunMacro は、Access のメソッドで
 Excel の VBA には DoCmd.RunMacro というメソッドはありません。
 
 Access の VBAの命令 Docmd〜 を Excel で実行しようとしているので
 OLE〜〜 とエラーとなります。
 
 
2. Excelでは、「"テストインポート"」を認識できない
  実行しようとしているAccessのマクロ "テストインポート"は、
  Accessの、accdb(またはmdb)に保存されているマクロであり、
  Excel からでは参照できません。
 
 
1・2 共に、Excel から でも、オートメーションとして、
 Accessを起動させ 当該 accdb/mdb を開けば 実行させる事ができますが、ちょっと高度です。
 
 
それよりは、Excel から、Accessへエクスポートを行う方が簡単かと。
『エクセルからアクセスへエクスポート』あたりをキーワードにWEB検索すれば
 
【Excel から Access にデータを移動する】
https://support.microsoft.com/ja-jp/office/excel-%E3%81%8B%E3%82%89-access-%E3%81%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E7%A7%BB%E5%8B%95%E3%81%99%E3%82%8B-90c35a40-bcc3-46d9-aa7f-4106f78850b4
 
【vba を使用して excel から access へエクスポートが簡単にできます!】
http://vba-excel-access.seesaa.net/article/160897912.html
 
辺りが参考になるかと。
 
 
でも、一番手軽なのは、
 Access の 操作にて、Excel データを インポート するのが簡単。
 
あくまでExcel から実施したいなら
 
Access の ファイルを指定して実行した際に、
 同時に コマンドラインスイッチを指定、そこに、Accessのマクロ名を指定します。
 
https://support.microsoft.com/ja-jp/office/microsoft-office-%E8%A3%BD%E5%93%81%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89-%E3%83%A9%E3%82%A4%E3%83%B3-%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81-079164cd-4ef5-4178-b235-441737deb3a6#Category=Access
 
Excel VBA
Sub TEST
  Shell "MSACCESS.EXE ""C:\TEST.AACDB"" /x ""テストインポート"""
End If
 
の様に、
Shell を使い、
 Access 起動、 指定ファイルを開く、マクロ 指定
の様になるかと。

投稿日時: 24/09/04 15:45:54
投稿者: HT

ありがとうございます。ご教授の件で質問があります。
【vba を使用して excel から access へエクスポートが簡単にできます!】
のところで、excelシートはVBAが書かれているのと同じBOOKかと思いますが
pathを指定してexcelファイルを指定できますか?
 
Shell "MSACCESS.EXE ""C:\TEST.AACDB"" /x ""テストインポート"""
を引用して実行しましたが「ファイルが見つかりません」とでます
ACCESS2007なのですがMSACCESS.EXEでよろしいでしょうか?

回答
投稿日時: 24/09/04 19:06:09
投稿者: Suzu

2007?? 2013だったのでは?
 
 
質問者さんは、コードをコピペして動くような事をなさろうとはしていません。
少なくとも、WEB上で見つかるコードをコピペで使用し、希望の動作とはなりません。
 
 

引用:
Shell "MSACCESS.EXE ""C:\TEST.AACDB"" /x ""テストインポート"""

このコードの意味は分かりますか?
 
 
Shell "MSACCESS.EXE ""C:\TEST.AACDB"" /x ""テストインポート"""
   〜〜〜〜〜〜〜
   Accessを実行しなさい
          〜〜〜〜〜〜〜〜〜
          実行するときに
           「C:\TEST.AACDB」を開きなさい
 
                   〜〜〜〜〜〜〜〜〜〜〜〜〜
                    マクロ テストインポートを実行しなさい
 
1. Shell "MSACCESS.EXE ""C:\TEST.AACDB"" /x ""テストインポート"""
2. Shell "MSACCESS.EXE ""C:\TEST.AACDB"""
3. Shell "MSACCESS.EXE"
 
問題が発生するなら、発生しないとこはドコだろう
  → 正常に動作する直前の部分に問題がある可能性が高い 
  として、原因を突き止めてゆきます。
 
そういう事を繰り返し、希望通りの動作になる様にし、その手順の中で経験して勉強していく事になります。
 
それをやってください。
 
 
 
引用:
excelシートはVBAが書かれているのと同じBOOKかと思いますがpathを指定してexcelファイルを指定できますか?

 
できます。
それは、オートメーションになります。
 
https://www.moug.net/tech/exvba/0060010.html
https://www.moug.net/tech/exvba/0060007.html
 
辺りを組み合わせれば、他のブックへの命令を行う事が可能である事が分かると思います。
 
マクロ専用Excel を開いて
 そこから、あるExcelファイルを指定し、
  Accessのファイルへデータを書き込む事ができます。

投稿日時: 24/09/11 14:56:30
投稿者: HT

Suzuさん ありがとうございます
Shell "MSACCESS.EXE "・・・ にて解決しそうです
上記Shellにて起動されたACCESSを、VBAの中で終了させるにはどうしたらよいですか?

回答
投稿日時: 24/09/11 18:28:27
投稿者: Suzu

引用:
上記Shellにて起動されたACCESSを、VBAの中で終了させるにはどうしたらよいですか?

 
それは、オートメーションを使い 実行する必要があります。
 
VBA ではなく
Access側で、終了する様に設定すれば良いのでは?
 
 
Accessのマクロ 「テストインポート」 をコピーし
その マクロの最後に 【終了】を入れ保存。
 
コマンドスイッチ /x に、そのマクロを指定すれば良いでしょう。

投稿日時: 24/09/13 10:36:06
投稿者: HT

ご指導により解決しました。ありがとうございます
因みに1つ教えてください
EXCEL VBA内で、CreateObject("Access.Application")によりACCESSモジュールを作り
そのモジュールのDoCmd.RunMacroでインポートマクロを実行すると実行できませんでしたが
Shell "MSACCESS.EXE "・・・ では実行できました
ACCESSモジュールによる方法では何か制限などあるのでしょうか?

回答
投稿日時: 24/09/13 11:30:53
投稿者: hatena
投稿者のウェブサイトに移動

HT さんの引用:
EXCEL VBA内で、CreateObject("Access.Application")によりACCESSモジュールを作り
そのモジュールのDoCmd.RunMacroでインポートマクロを実行すると実行できませんでしたが

できますよ。
 
ちなみにCreateObject("Access.Application")でできるのはAccessオブジェクトです。ACCESSモジュールは別の意味になります。
 
すでに出てますが DoCmd.RunMacro はAccess VBA のメソッドですので、Excel VBA 内でそのまま記述しても実行できません。作成したAccessオブジェクトのメソッドとして実行することができます。
 
コード例
    Dim appAC As Object
    'Accessオブジェクトを作成
    Set objAcc = CreateObject("Access.Application")

    'データベースファイルを開く
    objAcc.OpenCurrentDatabase "C:\TEST.ACCDB"

    'マクロを実行
    objAcc.DoCmd.RunMacro "マクロ名"
  
    'Accessを終了する
    objAcc.Quit
    Set objAcc= Nothing

投稿日時: 24/09/17 16:22:15
投稿者: HT

ありがとうございます。いろいろ勉強になりました