2013-06-21 2 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 아닌 다른 파일 이름을 지정하는 방법입니다;

ThisWorkbook에서 온 않습니다 그래서 다시 생각

objExcel.ActiveWorkbook.SaveAs ThisWorkbook.Path 

objExcel.ActiveWorkbook.SaveAs = ThisWorkbook.Path 

을 변경? .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 

또는이 같은 : 당신은 또한을 구축하기 위해 fso 개체를 사용할 수 있기 때문에

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

나는 후자를 선호하는 것을 출력 파일의 경로 :

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

그리고 이미 Ekkehard.Horner

objExcel.ActiveWorkbook.SaveAs filename 

편집 : 스크립트가에있는 같은 디렉토리에 출력 파일을 만들려면

을 변경 SaveAs는 방법, 속성이 아니라, 그래서 당신이 명령에서 =를 제거해야 지적

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

변수 이름을 변경하는 것은 필요하지 않지만 에

cwd = fso.GetAbsolutePathName(".") 
filename = fso.BuildPath(cwd, "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

관련 문제