シェルコマンドを実行してデータの出力を確認する際に問題が発生しています。 DBの現在のリモートユーザがアクティブである場合、vbaを使用してチェックしたいと思います。vbaシェルコマンドが実行されていますが、出力がありません
コマンドプロンプトで=
for /f "tokens=1-8" %a in ('quser') do @if "%d"== "Active" echo %COMPUTERNAME% %a %d
は、ユーザーが、私はそれらのどれもが(「ディスク」)が切断されていないことを確認したいログオンし、それらの状態を返します。私はシェルをチェックし、
Public Function ShellRun(sCmd As String) As String
'Run a shell command, returning the output as a string'
Dim oShell As Object
Set oShell = CreateObject("WScript.Shell")
'run command'
Dim oExec As Object
Dim oOutput As Object
Set oExec = oShell.Exec(sCmd)
Set oOutput = oExec.StdOut
Debug.Print sCmd
'handle the results as they are written to and read from the StdOut object'
Dim s As String
Dim sLine As String
While Not oOutput.AtEndOfStream
sLine = oOutput.ReadLine
If sLine <> "" Then s = s & sLine & vbCrLf
Wend
ShellRun = s
'example MsgBox ShellRun("cmd.exe /c" & "dir c:\")
End Function
CALLコマンド
Dim CMDLineCommand As String
CMDLineCommand = "for /f ""tokens=1-8"" %a in ('quser') do @if ""%d""== ""Active"" echo %COMPUTERNAME% %a %d"
'(CMDLineCommand = "dir c:\")<------ THIS WORKS FINE
MsgBox ShellRun("cmd.exe /c " & CMDLineCommand)
これは、コマンドラインの負荷Iコマンドのため正常に動作クリックイベントに使用されるメッセージボックスに文字列としてパイプ値を戻すには、この機能を使用しましたそれをテストしていますが、クエリを実行していないため、ユーザに問い合わせていません。 query userコマンドはコマンドラインから正常に動作しますが、VBAシェルコマンドで発行された場合は何も返しません。
どのような考えにも感謝します。
私はフォーラムの書式設定で間違いを犯したに違いありません。ありがとうございます。 – Animal811
私はWhileを挿入した後にVBA構文エラーが発生しなかった理由を頭に傷つけてしまいました。そして、「前の行」がコメントであることに気付きましただから、それはすべての余分な声明を無視したばかりだった - ええ、私はひざまずいていない。 – YowE3K
@ YowE3K私はそれがうまくいかない理由と解決策を見つけ出すことができました。シェルはquery.exe(quesr)のパスを知らないので、コマンドプロンプトでシステム変数を使用してexeファイルを見つけることができます。解決策は、query.exeを見つけ、それを作業ディレクトリにコピーし、シェルコマンドを実行します。私はC:\ Windows \ WinSxS内のハッシュされたフォルダにありました。ここでは64ビット版と32ビットですので注意してください。 – Animal811