更新的代码:脚本执行但不输出任何内容,Excel.exe进程继续运行。我需要这个输出到.vbs脚本启动的目录,并将Excel文件命名为Book1.xls以外的其他东西
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
答案 0 :(得分: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)
答案 1 :(得分: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")
虽然不需要更改变量名称,但最好根据变量内容命名变量。