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 = ADsConnectionDSOConnectionobjCommand =ADODB.Command) objConnection.Provider = ADsConnectionSOConnectionSOConnectionobje.OobjConnection。 objCommand.Properties(Page Size) = 1000 objCommand.Properties(Searchscope) = ADS_SCOPE_SUBTREE objCommand.CommandText = _ SELECT Name FROM 'LDAP://dc=XXX,dc=com' WHERE objectCategory='ssearch'search search 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(1Re.程式碼中我使用了一個假象的網域名稱XXX,讀者如果想要測試可將其改成真實的網域名稱。我們使用ADO對所指定的網域進行了使用者查詢,並將網域中所有使用者的Name依序輸出到Excel目前Sheet的第一列中,以下是輸出結果的部分截圖。 有關如何透過腳本操作AD,讀者可以參考一下Microsoft的官方文件如果權限允許,稍微修改一下上面的程式碼,完全可以實現批量修改AD中的帳戶的功能,鑑於公司網路環境,這裡不方便進行測試了,讀者如果有條件可以自己嘗試。