Excel VBS将输出保存到启动脚本的目录

Excel VBS将输出保存到启动脚本的目录,excel,vbscript,vba,Excel,Vbscript,Vba,更新代码:脚本执行但不输出任何内容,Excel.exe进程继续运行。我需要将其输出到启动.vbs脚本的目录,并将Excel文件命名为Book1.xls以外的名称 Option Explicit Dim strFile, strGroupDN, objGroup, objExcel, intRow, objMember, objSheet Dim objRootDSE, strDNSDomain, objTrans, strNetBIOSDomain, strGroup Const ADS_

更新代码:脚本执行但不输出任何内容,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
选项显式
Dim strFile、strGroupDN、objGroup、objExcel、intRow、objMember、objSheet
Dim OBJrootdes、strndsDomain、objTrans、strNetBIOSDomain、strGroup
常量ADS\u NAME\u INITTYPE\u GC=3
常数ADS\u NAME\u TYPE\u NT4=3
常数ADS\u NAME\u TYPE\u 1779=1
设置objRootDSE=GetObject(“LDAP://RootDSE”)
strndsdomain=objRootDSE.Get(“defaultNamingContext”)
设置objTrans=CreateObject(“nametranse”)
objTrans.Init ADS\u NAME\u INITTYPE\u GC“
objTrans.Set广告名称类型1779,标准域
strNetBIOSDomain=objTrans.Get(ADS\u NAME\u TYPE\u NT4)
strNetBIOSDomain=左(strNetBIOSDomain_
Len(strNetBIOSDomain)-1)
strGroup=InputBox(“输入广告组名称”)
出错时继续下一步
objTrans.Set ADS\u NAME\u TYPE\u NT4,strNetBIOSDomain&“\”和strGroup
如果(错误编号0),则
错误转到0
Wscript.Echo“组”和strGroup&“未找到”
Wscript.Quit
如果结束
strGroupDN=objTrans.Get(ADS\u NAME\u TYPE\u 1779)
Set objGroup=GetObject(“LDAP://”&strGroupDN)
设置objExcel=CreateObject(“Excel.Application”)
objExcel.Workbooks.Add
objExcel.Columns(1).ColumnWidth=100
设置objSheet=objExcel.ActiveWorkbook.Worksheets(1)
objSheet.Name=“广告组成员”
intRow=1
对于objGroup.Members中的每个objMember
objSheet.Cells(intRow,1).Value=objMember.sAMAccountName
intRow=intRow+1
下一个
设置fso=CreateObject(“Scripting.FileSystemObject”)
cwd=fso.GetAbsolutePathName(“***”)
filename=fso.BuildPath(cwd,“output.xls”)
objExcel.ActiveWorkbook.SaveAs文件名
是一种方法;所以改变

objExcel.ActiveWorkbook.SaveAs = ThisWorkbook.Path

再三考虑:

此工作簿
来自何处?在.SaveAs之前生成(并显示)预期的完整文件规范,然后重试

WRT更新代码:

您的以下各项之间存在差异:

cwd = fso.GetAbsolutePathName("*.*")
安斯加:

cwd = fso.GetAbsolutePathName(".")
要获取脚本的文件夹(相对于当前目录),请使用


在VBScript中,不能使用
此工作簿
属性。您必须获取并使用对工作簿对象的引用:

Set wb = objExcel.Workbooks.Add
WScript.Echo wb.Name
但是,这对您的情况没有帮助,因为您添加了一个新的空工作簿,所以它还没有路径

您可以按如下方式获取当前工作目录:

cwd = CreateObject("WScript.Shell").CurrentDirectory
Set fso = CreateObject("Scripting.FileSystemObject")
cwd = fso.GetAbsolutePathName(".")
或者像这样:

cwd = CreateObject("WScript.Shell").CurrentDirectory
Set fso = CreateObject("Scripting.FileSystemObject")
cwd = fso.GetAbsolutePathName(".")
我更喜欢后者,因为您也可以使用
fso
对象来构建输出文件的路径:

filename = fso.BuildPath(cwd, "output.xlsx")
而且,正如已经指出的,
SaveAs
是一种方法,而不是属性,因此您必须从该指令中删除
=

objExcel.ActiveWorkbook.SaveAs filename
编辑:要在脚本所在的同一目录中创建输出文件,请更改

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


虽然不需要更改变量名,但最好根据变量的内容来命名变量。

我更改了代码,但仍会提示我保存变量名,并强制我选择位置。在本例中,我从桌面启动.vbs。我已经进行了更新,但在从桌面运行脚本时,它仍然提示我选择一个目录。Set fso=CreateObject(“Scripting.FileSystemObject”)cwd=fso.GetAbsolutePathName(.)objExcel.DisplayAlerts=False objExcel.ActiveWorkbook.SaveAs filename=fso.BuildPath(cwd,“output.xlsx”)objExcel.DisplayAlerts=True objExcel.ActiveWorkbook.Close objExcel.Application.quiit还将另存为名称保留为Book1.xlsxDude,SaveAs()是一种方法。1) filename=fso.BuildPath(cwd,“output.xlsx”)2)objExcel.ActiveWorkbook.SaveAs filename从桌面运行脚本时,仍会提示我选择目录。它还将另存为名称保留为Book1.xlsx。
scriptDir = fso.GetParentFolderName(WScript.ScriptFullName)
filename = fso.BuildPath(scriptDir, "output.xlsx")