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

戻る