VBA作為一種被用在Microsoft Office產品中的腳本語言,功能實際上是很強大的,這要歸功於它繼承 了Visual Basic的很多優良傳統,如我們可以在VBA工程中像VB 6一樣引入類庫或ActiveX控件。當然,你 在VB 6中使用的組件或控件也完成可以在VBA中使用,例如日期輸入組件。
VBA支持ADO,這也意味著我們可以在VBA中操作數據庫,包括SQL Server、Access等。正因為如此,你 可以嘗試著在Excel中編寫一個VBA程序來將Excel作為一個用於數據同步的中間件,該中間件可以用來同 步應用程序與後台數據庫中的數據,並在其中做一些處理。這是完全可以做到的!我在之前的一個項目中 就曾做過這樣的例子,我們甚至通過Excel同步了SQL Server和Sharepoint List之間的數據(這個我會在 隨後的一些中再做介紹)。
ADO的功能也很強大,我們可以在其中執行Windows腳本,經常使用的就是通過它來管理Windows Server的AD,如遍歷AD中的賬戶,批量修改AD中的賬戶等,這已經沒有什麼好奇怪的了,你完全可以在 Windows上使用記事本編寫一個vbs腳本,然後直接使用它來管理你服務器上的AD,當然,基於安全考慮, 這些都是需要適當的執行權限的。這些工作通過VBA也可以完成,並且在Excel中你會發覺有的時候很方便 ,如借用Excel現有的UI來展現所操作的數據;基於所查詢的數據來生成圖表;使用Excel提供的功能修改 數據;遍歷和組織數據的方便性等等...
下面我給出一個示例。在新的Sheet中添加一個ActiveX Button,然後添加下面的代碼。
Private 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