質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

22283閲覧

Access2010マクロでバッチファイルを起動について

syu_2016

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/02/19 00:49

アクセスにてshell関数を実行し、フォルダ内のbatファイルを実行させることはできるのですが、処理ができません。
またフォルダ内にてバッチファイルをダブルクリックで実行した場合には、うまく処理ができています。以下にshell関数とバッチファイルの内容を記載しました。

【ACCESS/VBA】

Sub Shellbat01()
Dim strPath As String
Dim RetVal As Variant

strPath = "C:\Users\A\Desktop\A\rename.bat"

'タスクID取得及び実行
RetVal = Shell(strPath, 6) 'vbMinimizedNoFocus

If RetVal <> 0 Then
MsgBox strPath & vbCr & "実行されました。", vbInformation, "[タスクID]" & RetVal
Else
MsgBox strPath & vbCr & "実行出来ません。", vbCritical, "[ERROR]"
End If

End Sub

【バッチファイル】

@echo off
for %%f in ( * ) do call :sub "%%f"
exit /b

:sub
set fname=%1
set fname=%fname:.txt=.bat%
ren %1 %fname%
goto :EOF

どなたかお力を貸していただけると助かります。
初心者のため、簡単に教えていただけないでしょうか??
宜しくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/02/19 02:14

処理ができません、と(判断したの)は具体的にどういう状態でしょうか。出力されるメッセージとか、差し支えない範囲で示していただけると回答がつきやすいと思います。
guest

回答2

0

ベストアンサー

coco_bauerさんが指摘されている通り、作業フォルダの問題と思われます。

batファイル側の処理で特にパス指定なく記述されている、つまり作業フォルダを対象に処理されています。
このため、
・bat単体で起動する場合、batが置かれているフォルダを作業フォルダとして実行する。
・VBAからShell起動する場合はVBAの作業フォルダがBatの作業フォルダとなる。
というように起動方法により動作の違いが発生しています。

つまり「動作していない」のではなく、期待する動作をしていないだけで、VBAの作業フォルダ(おそらくユーザーのドキュメントあたり)を対象に.txt⇒.batへのリネームを行ってしまっているものと思われます。

対応方法は2つ考えられます。

①VBA側でShell起動する前に作業フォルダを変更する

strPath = "C:\Users\A\Desktop\A\rename.bat" '▽▽▽ここから追加 'ドライブ変更 ChDrive "C" 'ディレクトリ変更 ChDir "C:\Users\A\Desktop\A\" '△△△ここまで追加 'タスクID取得及び実行 RetVal = Shell(strPath, 6) 'vbMinimizedNoFocus ・・・

②Bat側でバッチファイルの置かれているフォルダを作業フォルダとするよう変更する。

@echo off REM ▽▽▽ここから追加 cd /d %~dp0 REM △△△ここまで追加 for %%f in ( * ) do call :sub "%%f" ・・・

投稿2016/02/19 06:42

jawa

総合スコア3013

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

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

0

マクロから実行されたシェルのデフォールトのフォルダーが、バッチファイルがあるフォルダーと異なっているのが原因だと思われます。
バッチプログラムの1行目と2行目の間に、cdコマンドを挿入して、バッチファイルのあるフォルダ C:\Users\A\Desktop\A\ に移動するようにすれば、解決すると思います。

以下は、上記の変更をしたバッチプログラムの最初の3行分です。

Batch

1@echo off 2cd C:\Users\A\Desktop\A\ 3for %%f in ( * ) do call :sub "%%f"

投稿2016/02/19 02:13

coco_bauer

総合スコア6915

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問