VBA作為一種被用在Microsoft Office產(chǎn)品中的腳本語言,功能實(shí)際上是很強(qiáng)大的,這要?dú)w功于它繼承 了Visual Basic的很多優(yōu)良傳統(tǒng),如我們可以在VBA工程中像VB 6一樣引入類庫或ActiveX控件。當(dāng)然,你 在VB 6中使用的組件或控件也完成可以在VBA中使用,例如日期輸入組件?! BA支持ADO,這也意味著我們可以在VBA中操作數(shù)據(jù)庫,包括SQL Server、Access等。正因?yàn)槿绱?,?可以嘗試著在Excel中編寫一個VBA程序來將Excel作為一個用于數(shù)據(jù)同步的中間件,該中間件可以用來同 步應(yīng)用程序與后臺數(shù)據(jù)庫中的數(shù)據(jù),并在其中做一些處理。這是完全可以做到的!我在之前的一個項(xiàng)目中 就曾做過這樣的例子,我們甚至通過Excel同步了SQL Server和Sharepoint List之間的數(shù)據(jù)(這個我會在 隨后的一些中再做介紹)?! DO的功能也很強(qiáng)大,我們可以在其中執(zhí)行Windows腳本,經(jīng)常使用的就是通過它來管理Windows Server的AD,如遍歷AD中的賬戶,批量修改AD中的賬戶等,這已經(jīng)沒有什么好奇怪的了,你完全可以在 Windows上使用記事本編寫一個vbs腳本,然后直接使用它來管理你服務(wù)器上的AD,當(dāng)然,基于安全考慮, 這些都是需要適當(dāng)?shù)膱?zhí)行權(quán)限的。這些工作通過VBA也可以完成,并且在Excel中你會發(fā)覺有的時候很方便 ,如借用Excel現(xiàn)有的UI來展現(xiàn)所操作的數(shù)據(jù);基于所查詢的數(shù)據(jù)來生成圖表;使用Excel提供的功能修改 數(shù)據(jù);遍歷和組織數(shù)據(jù)的方便性等等... 下面我給出一個示例。在新的Sheet中添加一個ActiveX Button,然后添加下面的代碼?! rivate Sub CommandButton1_Click() On Error Resume Next Const ADS_SCOPE_SUBTREE = 2 Set objConnection = CreateObject ("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCommand.ActiveConnection = objConnection objCommand.Properties("Page Size") = 1000 objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE objCommand.CommandText = _ "SELECT Name FROM 'LDAP://dc=XXX,dc=com' WHERE objectCategory='user'" 'search all users from the domn XXX Set objRecordSet = objCommand.Execute objRecordSet.MoveFirst Dim currCell As Range Set currCell = Range("A1") Do Until objRecordSet.EOF currCell.Value = objRecordSet.fields("Name").Value Set currCell = currCell.Offset(1, 0) objRecordSet.MoveNext Loop End Sub 代碼中我使用了一個假象的域名稱XXX,讀者如果想要測試可將其改成真實(shí)的域名稱。我們使用ADO對 所指定的域進(jìn)行了用戶查詢,并將域中所有用戶的Name依次輸出到Excel當(dāng)前Sheet的第一列中,下面是輸 出結(jié)果的部分截圖?! ∮嘘P(guān)如何通過腳本操作AD,讀者可以參考一下Microsoft的官方文檔 如果權(quán)限允許,稍微修改一下上面的代碼,完全可以實(shí)現(xiàn)批量修改AD中的賬戶的功能,鑒于公司網(wǎng)絡(luò) 環(huán)境,這里不方便進(jìn)行測試了,讀者如果有條件可以自己嘗試。