2013-02-25 6 views
1

버튼으로 불리는 VBA Sub와 어려움을 겪고 있습니다. 이 하위 하드 코딩 된 파일 경로에서 Configuration.xls Excel 스프레드 시트를 엽니 다. MsgBox는 현재 작업 공간에 대해 알려주며 작업 공간은 현재 파일에서 방금 열린 파일로 변경됩니다. 모두 괜찮습니다.VBA 함수 호출 : Excel 버튼과 VBS 호출

이제 VBA Sub를 호출하는 VBS를 호출하는 외부 일괄 처리에서이 Sub를 실행하려고합니다. Configuration.xls 파일을 연 후 작업 영역은 동일하게 유지되고 Configuration.xls로 변경되지 않습니다. 또한 VBS로 Sub를 호출하면 함수가 두 번 실행됩니다. 이유는 없습니다.

제 질문은 - 왜 두 호출 메커니즘간에 다른 동작이 있습니까?

나는 더 복잡한 실제 코드와 동일한 동작을 보여주기 때문에 아래 코드를 단순화했습니다.

Sub ReadConfiguration() 

MsgBox ActiveWorkbook.Name 
FileExcel = "D:\_Trash\VBA_VBS\Configuration.xls" 
Workbooks.Open Filename:=FileExcel, ReadOnly:=True, IgnoreReadOnlyRecommended:=True 
strFileName = FunctionGetFileName(FileExcel) 
MsgBox ActiveWorkbook.Name 

On Error Resume Next 
Set wBook = Workbooks(strFileName) 
If Err Then 
    Exit Sub 
End If 
ActiveWorkbook.Close savechanges:=False 
End Sub 
'***************************************************** 
Function FunctionGetFileName(FullPath As Variant) 
Dim StrFind As String 
Do Until Left(StrFind, 1) = "\" 
    iCount = iCount + 1 
    StrFind = Right(FullPath, iCount) 
    If iCount = Len(FullPath) Then Exit Do 
Loop 
FunctionGetFileName = Right(StrFind, Len(StrFind) - 1) 
End Function 
'***************************************************** 

는 VBS, 난 그냥 내가 완전히 설명 할 수 allthough이 문제의 해결에 대해 알려하려면이

Dim args, objExcel 
Set args = WScript.Arguments 
Set objExcel = CreateObject("Excel.Application") 
objExcel.Workbooks.Open args(0) 
objExcel.Visible = False 
objExcel.Run "Module1.ReadConfiguration()" 
objExcel.ActiveWorkbook.Close(0) 
objExcel.Quit 
+0

하위/기능과 상관없이 문제를 재현 할 수 있습니다. 좋은 질문, 나는 항상 예를 ​​온라인없이 따랐다. 나는 무엇이 일어나고 있는지 알고 싶다. – Larry

답변

0

것 같습니다. 해결 방법은 매크로 호출 뒤에 "()"을 제거하는 것입니다. VBS 스크립트를 두 번 실행하고 통합 문서 '범위'가 섞여있는 결과가 있습니다.

쉬운 해결책이지만 여전히 질문 WHY- "()"를 추가 할 때 추가 기능을 추가로 알려야합니까?

도움 주셔서 감사합니다.

TheMadMatt