0

更新代码:脚本执行但不输出任何内容,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
4

2 回答 2

1

SaveAs是一种方法;所以改变

objExcel.ActiveWorkbook.SaveAs = ThisWorkbook.Path

objExcel.ActiveWorkbook.SaveAs ThisWorkbook.Path

转念一想:

从哪里来ThisWorkbook?在 .SaveAs 之前构建(并显示)预期的完整文件规范,然后重试。

WRT 更新代码:

您的:

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

和 Ansgar 的:

cwd = fso.GetAbsolutePathName(".")

要获取脚本的文件夹(而不是当前目录),请使用

fso.GetParentFolderName(WScript.ScriptFullName)
于 2013-06-21T13:34:15.500 回答
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")

尽管不需要更改变量名称,但根据变量的内容命名变量是一种很好的做法。

于 2013-06-21T13:56:08.840 回答