VBA
VBA により DOSコマンド を実行する
(1)9x系OSの場合
Call shell(“command.com <コマンド>”)
(2)NT系OSの場合
Call shell(“CMD.exe <コマンド>”)
(3)9x系、NT系OS共用の記述(ウインドウを自動的に閉じる)
Call shell(Environ$(“comspec”) & “ /c <コマンド>”)
例)Call Shell(Environ$("COMSPEC") & " /C COPY " & FileName1 & " " & FileName2 )
Call Shell(Environ$("COMSPEC") & " /C XCOPY E:\図面管理 X:\BACK\図面管理 /D /E /C /I /Y > XCOPY.LOG )
または
taskID = Shell(Environ$("COMSPEC") & " /C XCOPY E:\図面管理 X:\BACK\図面管理 /D /E /C /I /Y > XCOPY.LOG )
パラメータの説明)
' /D 送り側の日付が受け側の日付より新しいファイルだけをコピーします。
' /E サブディレクトリが空であってもコピーします。
' /C エラーが発生してもコピーを続けます。
' /I コピー先のディレクトリが存在しない場合は新規にディレクトリを作成する。
' /Y 受け側の既存のファイルを上書きする前に確認のメッセージを表示しません。
(4)9x系、NT系OS共用の記述(ウインドウを自動的に閉じない)
Call shell(Environ$(“comspec”) & “ /k <コマンド>”)
(5)ドメイン内のユーザー情報取得(net user)
(標準モジュールへ記載内容)
Option Explicit
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
' プロセスオブジェクトのハンドルを返す関数
Declare Function OpenProcess Lib "kernel32.dll" _
(ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
' プロセスの終了状態を取得する関数
Declare Function GetExitCodeProcess Lib "kernel32.dll" _
(ByVal hProcess As Long, _
lpExitCode As Long) As Long
' オブジェクトハンドルをクローズする関数
Declare Function CloseHandle Lib "kernel32.dll" _
(ByVal hObject As Long) As Long
Public Const PROCESS_QUERY_INFORMATION = &H400&
Public Const STILL_ACTIVE = &H103&
(プログラム)
user = "ユーザー名"
lngTaskID = Shell(Environ$("ComSpec") & " /c NET USER " & user & " /DOMAIN > C:\TEMP\DOMAIN.TXT", 2) '2:フォーカスを持ち、最小化表示されるウィンドウ
' 起動したプロセスハンドルを取得
lngProcHandle = OpenProcess(PROCESS_QUERY_INFORMATION, 1, lngTaskID)
' プロセスがアクティブな間、終了状態を監視
Do
' プロセスの終了状態を取得
lngReturnCode = GetExitCodeProcess(lngProcHandle, lngExitCode)
' OSに制御を渡す
DoEvents
Loop While lngExitCode = STILL_ACTIVE
' ハンドルをクローズ
CloseHandle lngProcHandle
Open "C:\TEMP\DOMAIN.TXT" For Input As #1
Do While Not EOF(1) ' ファイルの終端までループを繰り返します。
Line Input #1, textline ' 行を変数に読み込みます。
If Mid(textline, 1, 6) = "フル ネーム" Then
shimei = Mid(textline, 33)
ElseIf Mid(textline, 1, 4) = "コメント" Then
shozoku = Mid(textline, 33)
Exit Do
End If
Loop
Close #1
Msgbox shimei & " " & shozoku, vbInformation + vbOKOnly, "タイトル"
Kill ("C:\TEMP\DOMAIN.TXT"")
戻る