🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら

Q&A

解決済

2回答

7477閲覧

Excel VBAを利用してACCESSアプリを起動し、ACCESS操作の自動化を行いたい

ari0627

総合スコア1

0グッド

0クリップ

投稿2021/02/12 12:44

前提・実現したいこと

デスクトップ上に、Accesseで作成されたデータ取得ツール"DMCBillXls.accdb" の
ショートカットを作って、手動で起動し必要なデータを取得しています。
"DMCBillXls.accdb"はソフト会社より提供されたものです。
販売管理システムのデータベースにアクセスして必要な情報を取得することができます。
処理メニューから必要なボタンを押下して、データ取得用の条件を入力すれば、
該当するデータが得られるというアプリです。
今は、手動で起動し必要なデータを取得しています。
それをExcelのVBAを使用して自動化しようと思っています。
そこで、ExcelのVbaにて下記のソースを作成し、データ取得ツールを起動しようとしてるのですがうまくいきません。
VBA初心者で他のアプリの起動方法がよくわかっていません。
どうかご教授をお願い致します。

発生している問題・エラーメッセージ

「実行時エラー'5'  プロシージャの呼び出し、または引数が不正です。」

該当のソースコード

sub Public StrTtl As String Public intRET As Integer StrTtl = Path8 & "DMCBillXls.accdb" '"データ出力ツール" intRET = Shell(StrTtl, 1) If intRET = 0 Then MsgBox "CSV出力ツールの起動に失敗しました": End Sub

試したこと

補足情報(FW/ツールのバージョンなど)

osはwindows10です。
excelは2016です。

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2021/02/12 13:08

> sub サブルーチン名がないけど質問記載時のミス?
ari0627

2021/02/12 13:23

すみません。 サブルーティン名は付けています。表記をしていないだけです。 また、path8も実際は”C:\Users\XXXX\Documents\”となっています。 それから、End subも付けています。 記載したソースコードに漏れがあり申し訳ありません。
Y.H.

2021/02/12 13:25

> Integer 'r'が全角になってるのも?
Y.H.

2021/02/12 13:27

ソースはそのままコピペして、隠したいところだけtestとか***とかに置換えた方が良いよ。 こういった不要なやり取りが経るので。
ari0627

2021/02/12 13:31

すみません。日本語以外はすべて半角です。 ソースコードは文法上は問題なく動いています。 記載が悪く誤解を与えるようなソースになり申し訳ありません。 ソースはコピペではなく質問時に再度入力したものです。
ari0627

2021/02/12 13:33

初めての投稿で要領が悪く申し訳ありません。 以後注意します。
Y.H.

2021/02/12 13:35 編集

質問を編集しコードを修正された方が回答つきやすいと思います。 編集時に初心者マークを付けることができるので、 初心者マークを付けることをお薦めします。
ari0627

2021/02/12 14:05

ソースコードが会社のパソコンにあり、コピペができない状況です。
Y.H.

2021/02/12 14:15 編集

今分っている分の修正くらいはできないですか? まぁきちんとした質問ができてないなら的確な回答ができないだけなので構いませんが。
ari0627

2021/02/12 14:51

外部アプリを起動させためのプログラムをテスト的に作りましたので 以下のような簡単なソースとなっています。 Sub DB操作テスト() '----------------------------------------------------------- On Error GoTo ErrorR '----------------------------------------------------------- Public intRET As Integer Public StrTtl As String Public Path8 As String Path8 ="C:\Users\XXX\Documents\" StrTtl = Path8 & "DMCBillXls.accdb" '"データ出力ツール" intRET = Shell(StrTtl, 1) If intRET = 0 Then MsgBox "CSV出力ツールの起動に失敗しました": step99: Exit Sub '----------------------------------------------------------- ErrorR: Call エラー処理 End Sub 拡張子が”exe”の外部プログラムは下記のソースコードで起動し、操作できています。稼働している下記のプログラムを参考に作成しました。 同様に作ったのですが、拡張子が"accdb"であるためか、 エラーが発生しうまくいきません。 Sub 処理_取得_従業員情報() '外部プログラム起動() ' MsgBox "CSV出力ツールを起動を起動します" StrTtl = "C:\SvDMC\tools\CSV出力ツール\CSV出力ツール\CsvOutPutTool.exe" '"データ出力ツール" intRET = Shell(StrTtl, 1) If intRET = 0 Then MsgBox "CSV出力ツールの起動に失敗しました": Exit Sub ' AppActivate RetVal, False Application.Wait Now + TimeSerial(0, 0, 1) SendKeys "{right 5}"   ' 顧客情報取得 Tab Ent キー" SendKeys "{tab 3}" ' 顧客情報取得 Tab Ent キー" SendKeys "{ENTER 1}" Application.Wait Now + TimeSerial(0, 0, 2) SendKeys "{tab 1}" ' 出力ファイルOpen キャンセルキー" SendKeys "{ENTER 1}" Application.Wait Now + TimeSerial(0, 0, 0.5) SendKeys "{tab 1}" ' 終了 エンタキー" SendKeys "{ENTER 1}" Application.Wait Now + TimeSerial(0, 0, 0.5) SendKeys "{ENTER 1}" ' 終了確認 エンタキー" MsgBox "社員情報の出力は終了しました" End Sub 起動部分だけ抜き出してテスト的に作ったものです。 お手数をお掛けしますがよろしくお願い致します。
guest

回答2

0

この様な形でも起動できると思います。
以下は、ThisWorkbook.Pathを使っての、ExcelファイルをAccessファイルと同じフォルダに置いた場合のコードです。

VBA

1Sub Test_Sample_Miniature() 2 '定義 3 Dim acApp As Access.Application '参照設定必要 4 'Dim acApp As Object '参照設定必要なし 5 Dim Access_FullPath As String 6 '起動 7 Access_FullPath = ThisWorkbook.Path & "\" & "DMCBillXls.accdb" 8 Set acApp = CreateObject("Access.Application") 9 acApp.OpenCurrentDatabase Access_FullPath 10 acApp.Visible = True 11 '確認 12 MsgBox acApp.Name & vbLf & vbLf & acApp.CurrentDb.Name 13 '終了 14 acApp.Quit 15End Sub

こちらでも出来そうです。

VBA

1Sub Test_Sample_Miniature() 2 '定義 3 Dim acApp As Access.Application '参照設定必要 4 'Dim acApp As Object '参照設定必要なし 5 Dim Access_FullPath As String 6 '起動 7 Access_FullPath = ThisWorkbook.Path & "\" & "DMCBillXls.accdb" 8 Set acApp = GetObject(Access_FullPath) 9 acApp.Visible = True 10 '確認 11 MsgBox acApp.Name & vbLf & vbLf & acApp.CurrentDb.Name 12 '終了 13 acApp.Quit 14End Sub 15

投稿2021/02/17 02:15

編集2021/02/17 06:17
tosi

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ari0627

2021/02/18 02:57 編集

tosiさん、ご回答ありがとうございます。 今後、accessの起動方法として参考にさせていただきます。 まだテストしていませんが、来週にも実行してみます。 ありがとうございました。
guest

0

ベストアンサー

実行ファイルのパスも指定しないと起動できないのでは?

Sub DB操作テスト() exepath = "C:\Program Files*******\MSACCESS.EXE" Path8 = "****" StrTtl = exepath & " " & Path8 & "********.accdb" intRET = Shell(StrTtl, 1) End Sub

投稿2021/02/13 06:00

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ari0627

2021/02/14 01:01 編集

qnoirさん、ご回答ありがとうございます。 そうですよね。 実行ファイル(exe)を指定していないのでおかしいとは思いつつ、 拡張子(.accdb)でaccessが自動的に行うのではないかと妄想つつ 作成していました。 たぶん、ご指摘の通りだと思います。 数日間、いろいろと悩んでいましたが,今はスッキリした気持ちです。 ありがとうございます。 実行環境が別のところに有り、2/17までテストできません。 17日にテストしてみます。 テスト結果は、後日、報告させていただきます。 ご指摘、本当にありがとうございました。
ari0627

2021/02/18 02:52

qnoirさん、昨日(17日)ご指摘の方法で実行してみました。 無事、目的を達成することができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問