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

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

ただいまの
回答率

88.64%

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 13K+

syu_2016

score 12

アクセスにて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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m6u

    2016/02/19 11:14

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

    キャンセル

回答 2

checkベストアンサー

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" 
  ・・・

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る