1.調用DOS命令:net user 獲取系統用戶到txtfile
2.打開txtfile把內容處理(空格全替換爲換行;已換行分列)後賦值到A
3.把A列不爲空的值且不到特殊用戶表的值寫到臨時表
4.與EXCEL用戶表進行對比 使用函數COUNTIF
(1)臨時表有,用戶表沒有——編寫刪除用戶命令: "net user " & Range("a" & i) & " /DELETE"
(2)臨時表沒有,用戶表有——編寫新增用戶命令:"net user " & Range("a" & i) & " " & Range("B" & i) & " /add /fullname:" & Chr(34) & Range("D" & i) & Chr(34) & " /comment:" & Chr(34) & Range("E" & i) & Range("F" & i) & Chr(34)
寫到batfile文件;
5.執行batfile腳本,實現windows用戶與EXCEL用戶同步;
視頻教程製作中:https://edu.51cto.com/lecturer/6969164.html
VBA代碼如下:
Option Explicit
Dim a, K%, i%, z%, ii%
Public Const batfile As String = "D:\TOOLS\smbr.BAT"
Public Const txtfile As String = "D:\TOOLS\windowssmb.txt"
Sub UPDATEUSERS()
Shell "cmd.exe /c " & " net user >" & txtfile, vbHide
t = Timer + 0.3
Do Until Timer > t
DoEvents
Loop
Sheets("SMB").Select
Columns("A:A").Select
Selection.ClearContents
Range("A1") = "SMBUSERS"
Open txtfile For Input As #1
a = Split(Replace(StrConv(InputB(LOF(1), 1), vbUnicode), " ", vbCrLf), vbCrLf)
Close #1
K = UBound(a)
z = 2
For i = 5 To K
If a(i) <> "" And Application.WorksheetFunction.CountIf(Sheets("SPUSERS").Range("A:A"), a(i)) = 0 And a(i) <> "命令成功完成。" Then
Cells(z, 1) = a(i)
z = z + 1
End If
Next
Sheets("SMB").Select
Open batfile For Append As #1
h = Range("A65535").End(xlUp).Row
For i = 2 To h
If Application.WorksheetFunction.CountIf(Sheets("DATA").Range("A:A"), Range("A" & i)) = 0 Then
Print #1, "net user " & Range("a" & i) & " /DELETE"
End If
Next
Sheets("DATA").Select
h = Range("A65535").End(xlUp).Row
For i = 2 To h
If Application.WorksheetFunction.CountIf(Sheets("SMB").Range("A:A"), Range("A" & i)) = 0 Then
Print #1, "net user " & Range("a" & i) & " " & Range("B" & i) & " /add /fullname:" & Chr(34) & Range("D" & i) & Chr(34) & " /comment:" & Chr(34) & Range("E" & i) & Range("F" & i) & Chr(34)
Print #1, "NET LOCALGROUP Users " & Range("a" & i) & " /Delete"
End If
Next
Close #1
End Sub