- 締切済み
ExecuteExcel4Macroでのデータ取得
office365 従来、ドメイン配下のサーバに登録されているファイルをExecuteExcel4Macroでファイルを開かずにセルの値を抽出していました。 今回、サーバがドメイン配下でなくなったので参照ツールを変更しようとしています。 サーバ名が○○○○ IDがID パスワードがPW で Gドライブのinフォルダに登録されてる ファイル名:A001.xslsm シート名 :1_001_01 セルアドレス:A1 の内容を refer.xslmファイルのセルアドレスR1にExecuteExcel4Macroで表示させるマクロをベタで教えていただきたく。 ExecuteExcel4Macroでデータ抽出する構成にしているのは、参照するファイル容量が大きいので、 ファイルを開いてコピペ方式だとレスポンスが悪いからです。 サーバにはリモートディスクトップ接続をバッチファイルで起動したら入れる様にはなってます。 kido.batの中身 @echo off Set SERVER=○○○○ Set USERNAME=ID Set PASSWORD=PW Cmdkey /generic:TERMSRV/%SERVER% /user:%USERNAME% /pass:%PASSWORD% Start mstsc /v:%SERVER% Timeout 3 Cmdkey /delete:TERMSRV/%SERVER% kido.batを起動するマクロは下記 Sub RunBatShell() Dim dProcessId As Double Dim sPath sPath = "C:\Users\ID\Desktop\kido.bat" dProcessId = Shell(sPath) End Sub 上記バッチ内容もマクロに記述出来たら1本化したく。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- HohoPapa
- ベストアンサー率65% (455/693)
batファイルの完了を待って、後続の処理が走るようにしたい。 ということと理解しました。 以下のようなアイディアはいかがでしょうか。 ・チェック用ファイルを削除する ・batファイルを実行する ・その終盤でチェック用ファイルを作成する ・500ms間隔でチェックファイルの有無を確認する ・これを20回繰り返しても見つからなければタイムアウトさせる ・作成されたことが確認出来たら後続に進む これらを組み込んだのが以下のコードです。 詳しくはコードを読んでください。 kido.batの中身 ここから================= @echo off Set SERVER=○○○○ Set USERNAME=ID Set PASSWORD=PW Cmdkey /generic:TERMSRV/%SERVER% /user:%USERNAME% /pass:%PASSWORD% Start mstsc /v:%SERVER% Timeout 3 Cmdkey /delete:TERMSRV/%SERVER% echo ABC > D:\TestDir\VBAandBAT\Check.txt kido.batの中身 ここまで================= vba===================== Option Explicit Sub Sample() Dim fso As FileSystemObject Dim dProcessId As Double Dim sPath Dim i As Long Set fso = New FileSystemObject ' インスタンス化 i = 0 'チェック用ファイルを削除 On Error Resume Next Call fso.DeleteFile("D:\TestDir\VBAandBAT\Check.txt", True) ' 指定したパスのファイルを削除 On Error GoTo 0 'バッチファイルの実行 sPath = "D:\TestDir\VBAandBAT\Kido.bat" dProcessId = Shell(sPath) 'バッチファイルの終了を待つ Do If i > 20 Then MsgBox "タイムアウト" Exit Sub End If MySleep If FileExists("D:\TestDir\VBAandBAT\Check.txt") = True Then Exit Do End If i = i + 1 Loop On Error Resume Next Call fso.DeleteFile("D:\TestDir\VBAandBAT\Check.txt", True) ' 指定したパスのファイルを削除 On Error GoTo 0 '継続処理 MsgBox "後続処理開始" ' 後始末 Set fso = Nothing End Sub '//---------500msの待ち Sub MySleep() Dim time As Long time = 500 Application.Wait [Now()] + time / 86400000 End Sub '//---------ファイル有無判定関数 Function FileExists(ChkFile As String) As Boolean FileExists = True On Error GoTo ErrorHandler ' エラー処理ルーチンを定義 FileDateTime (ChkFile) On Error GoTo 0 ' エラーのトラップを無効にします。 Exit Function ' エラー処理ルーチンが実行されないように Sub を終了 ErrorHandler: ' エラー処理ルーチン FileExists = False Resume Next End Function
- HohoPapa
- ベストアンサー率65% (455/693)
ドメイン所属のユーザを使って認証を通したい ということであれば、 未確認ですし、当てずっぽうですが、 Set USERNAME=ID このIDの部分を ドメイン名と"\"とidの文字列の文字列にすれば いけるんじゃないかと思います。 DomABC\Yamada_Taro といった文字列です。
補足
回答ありがとうございます。 ちょっと説明不足でした。 ドメイン所属のユーザを使って認証を通したい ではなく 現状ドメイン配下で ディスクトップにある参照.xlsmというファイルを実行して ドメイン配下にないg:\inフォルダに登録されてる ファイル名:A001.xslsm シート名 :1_001_01 セルアドレス:A1 を抽出したいのです。 参照.xlsmの中身が sub test() Range("A1") = ExecuteExcel4Macro("'G:\in\[A001.xlsm]1_001_01'!R1C1") end sub だと、この参照.xslmをkido.batで開いたディスクトップにコピーしtestのマクロを起動すると Aにデータ抽出できます。 なので、下記イメージかと思ってるのですが、下記を実行するとkido.batが走る前にドキュメントフォルダでファイルを指定する表示状態になった後にkido.batが走るという?な状況になってます。 sub chushutsu() kido Range("A1") = ExecuteExcel4Macro("'G:\in\[A001.xlsm]1_001_01'!R1C1") end sub