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

时间:2013-06-21 13:01:05

标签: excel-vba vbscript vba excel

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

2 个答案:

答案 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")

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