2013-06-21 57 views
0
啓動的目錄

更新的代碼:該腳本執行但不輸出任何內容,Excel.exe進程繼續運行。我想這能輸出到.vbs腳本從啓動目錄並將其命名爲Excel文件以外的東西比Book1.xls的Excel VBS將輸出保存到腳本從

Option Explicit 

Dim strFile, strGroupDN, objGroup, objExcel, intRow, objMember, objSheet 
Dim objRootDSE, strDNSDomain, objTrans, strNetBIOSDomain, strGroup 


Const ADS_NAME_INITTYPE_GC = 3 
Const ADS_NAME_TYPE_NT4 = 3 
Const ADS_NAME_TYPE_1779 = 1 


Set objRootDSE = GetObject("LDAP://RootDSE") 
strDNSDomain = objRootDSE.Get("defaultNamingContext") 


Set objTrans = CreateObject("NameTranslate") 
objTrans.Init ADS_NAME_INITTYPE_GC, "" 
objTrans.Set ADS_NAME_TYPE_1779, strDNSDomain 
strNetBIOSDomain = objTrans.Get(ADS_NAME_TYPE_NT4) 

strNetBIOSDomain = Left(strNetBIOSDomain, _ 
Len(strNetBIOSDomain) - 1) 

strGroup = InputBox("Enter AD group name") 


On Error Resume Next 
objTrans.Set ADS_NAME_TYPE_NT4, strNetBIOSDomain & "\" & strGroup 
If (Err.Number <> 0) Then 
On Error GoTo 0 

Wscript.Echo "Group " & strGroup & " not found" 
Wscript.Quit 
End If 
strGroupDN = objTrans.Get(ADS_NAME_TYPE_1779) 

Set objGroup = GetObject("LDAP://" & strGroupDN) 

Set objExcel = CreateObject("Excel.Application") 
objExcel.Workbooks.Add 
objExcel.Columns(1).ColumnWidth = 100 


Set objSheet = objExcel.ActiveWorkbook.Worksheets(1) 

objSheet.Name = "AD Group Members" 

intRow = 1 
For Each objMember In objGroup.Members 
objSheet.Cells(intRow, 1).Value = objMember.sAMAccountName 
intRow = intRow + 1 
Next 

Set fso = CreateObject("Scripting.FileSystemObject") 
cwd = fso.GetAbsolutePathName("*.*") 
filename = fso.BuildPath(cwd, "output.xls") 
objExcel.ActiveWorkbook.SaveAs filename 

回答

1

SaveAs是一種方法;所以更改

objExcel.ActiveWorkbook.SaveAs = ThisWorkbook.Path 

objExcel.ActiveWorkbook.SaveAs ThisWorkbook.Path 

關於第二個想法:

來自哪裏的ThisWorkbook?在.SaveAs之前構建(並顯示)預期的完整文件規範,然後重試。

WRT更新代碼:

還有就是你之間的區別:和

cwd = fso.GetAbsolutePathName("*.*") 

安斯加爾的:

cwd = fso.GetAbsolutePathName(".") 

獲取腳本的文件夾(而不是當前目錄)使用

fso.GetParentFolderName(WScript.ScriptFullName) 
+0

我改變了代碼,但它仍然提示我保存並強制我選擇一個位置。在這個例子中,我從桌面啓動.vbs。 – DWard

1

在VBScript中,您不能使用ThisWorkbook屬性。你必須獲得並使用該工作簿對象的引用:

Set wb = objExcel.Workbooks.Add 
WScript.Echo wb.Name 

然而,這不會在你的情況幫,因爲你添加新的空工作簿,因此它不具有路徑呢。

你可以得到這樣的當前工作目錄:

cwd = CreateObject("WScript.Shell").CurrentDirectory 

或像這樣:

Set fso = CreateObject("Scripting.FileSystemObject") 
cwd = fso.GetAbsolutePathName(".") 

我更喜歡後者,因爲你還可以使用fso對象建立路徑輸出文件:

filename = fso.BuildPath(cwd, "output.xlsx") 

而且,作爲Ekkehard.Horner已經指出,SaveAs是一種方法,而不是一個性質,所以你必須從該指令刪除=

objExcel.ActiveWorkbook.SaveAs filename 

編輯:創建腳本駐留在同一目錄下的輸出文件,更改

cwd = fso.GetAbsolutePathName(".") 
filename = fso.BuildPath(cwd, "output.xlsx") 

scriptDir = fso.GetParentFolderName(WScript.ScriptFullName) 
filename = fso.BuildPath(scriptDir, "output.xlsx") 

雖然改變可變名稱不是必需的,根據其內容命名變量是一種很好的做法。

+0

我做了更新,但它仍然提示我從桌面運行腳本時選擇一個目錄。 – DWard

+0

集FSO =的CreateObject( 「Scripting.FileSystemObject的」) CWD = fso.GetAbsolutePathName( 「」) objExcel.DisplayAlerts =假 objExcel.ActiveWorkbook.SaveAs文件名= fso.BuildPath(CWD, 「output.xlsx」) objExcel.DisplayAlerts = True objExcel.ActiveWorkbook.Close objExcel.Application.Quit – DWard

+0

它也保留名稱爲Book1.xlsx – DWard