Set objWord = CreateObject("Word.Application")
objWord.UserName = "Ken Myer"
objWord.UserInitials = "KM"
objWord.Quit
沒錯,只有 4 行程式碼。我們先為 Word.Application 物件建立一個執行個體。您可能會注意到,在這個指令碼中 (它與我們大部份的 Microsoft Office 指令碼不一樣),我們不將 Visible 屬性設為 True。因為我們不在畫面上檢視 Word,只要啟動它並更改使用者資訊之後,就準備關閉它了,不必讓任何人看到處理過程。
啟動 Word 之後,我們就用下面這兩行程式碼來變更 UserName 和 UserInitials 屬性的值:
objWord.UserName = "Ken Myer"
objWord.UserInitials = "KM"
就這樣:只要呼叫 Quit 方法來終止 Word 的執行個體,就大功告成了。下次您再啟動 Word 時 (或是任何 Office 應用程式),使用者名稱就改成 Ken Myer,縮寫也改成 KM 了。
順帶一提,這個指令碼連登入到電腦的使用者名稱也改得了,好用吧!不過萬一您事前不知道使用者名稱,或者電腦有好幾個使用者時,該怎麼辦呢?您要如何判斷使用者名稱,然後見機更改 Office 使用者資訊呢?
為什麼就是要使用這個指令嗎呢:
Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
Set objWord = CreateObject("Word.Application")
objWord.UserName = objUser.givenName & " " & objUser.SN
objWord.UserInitials = Left(objUser.givenName, 1) & Left(objUser.SN, 1)
objWord.Quit
別擔心,我們會一一為您解說。不過我們得先聲明,我們假設這個指令碼是作為登入指令碼使用;因此每當使用者登入電腦時,它就開始執行,並且修改 Office 使用者資訊。這個指令碼不能在遠端執行 (至少不太容易),因為 ADSystemInfo 物件只能在本機建立。
當然,這會產生一個問題;ADSystemInfo 物件到底是什麼?為什麼要用到它?ADSystemInfo 物件可以抓取一些登入使用者的 Active Directory 相關資訊,包括使用者的「辨別名稱」。「辨別名稱」是一種 Active Directory 屬性,可提供一條直接通往使用者帳戶的路徑,如下所示:
CN=kenmyer, OU=Finance, DC=fabrikam, DC=com
如果我們知道使用者帳戶的「辨別名稱」,就可以連結到該帳戶,擷取各種好玩的資訊,包括 givenName (名字) 和 SN (別名或姓氏) 屬性的值。
那麼,要如何連接到使用者帳戶呢?很簡單,只要使用下面這兩行程式碼就行了:
strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
在第一行中,我們把 UserName 屬性的值,儲存在一個名叫 strUser 的變數中;而 UserName 屬性 (衍生自 ADSystemInfo 物件) 就是使用者的「辨別名稱」。而第二行就把該值結合 LDAP:// 提供者,建立一個如下所示的 ADsPath:
LDAP://CN=kenmyer, OU=Finance, DC=fabrikam, DC=com
我們可以在 GetObject 方法代入 ADsPath,連接到登入使用者的 Active Directory 使用者帳戶。只要到了那裡,就差不多到達目的地了。
其實剩下的指令碼,只是我們在本日專欄開頭所示範的硬式編碼指令碼的變體罷了。我們先建立一個 Word.Application 物件的執行個體,然後再利用下面這行程式碼設定使用者名稱:
objWord.UserName = objUser.givenName & " " & objUser.SN
如您所見,我們把 givenName、一個空白以及 SN 組合起來,就變成像 Ken Myer 這樣的名稱了。很簡單吧。
不過,設定使用者名稱縮寫就需要點技巧了;因為 Active Directory 沒有屬性可以儲存使用者名稱縮寫。因此我們必須從使用者的姓和名來擷取開頭字母。其方法是借助 Left 函數以及下面這行程式碼:
objWord.UserInitials = Left(objUser.givenName, 1) & Left(objUser.SN, 1)
而抓取使用者名字的第一個字母,則是利用下面這行程式碼:
Left(objUser.givenName, 1)
我們只要在 Left 函數代入兩個參數即可:objUser.givenName (含有使用者的名字),以及 1。1 會告訴函數,從字串的左手邊開始擷取 1 個字元;如果使用者的名字是 Ken,這個函數便會傳回字母 K。接著就重複這個程序,抓取姓氏的第一個字母,然後結合這兩個字母,組成使用者縮寫。
請將上述指令碼當作登入指令碼執行,每當有使用者登入時,Microsoft Office 的使用者資訊便會跟著設定;也就是說,您的 Office 文件就會顯示真的作者,而不是安裝軟體的人。對不起了,JC,我只能說:世事無「長」。 |