버튼으로 불리는 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
하위/기능과 상관없이 문제를 재현 할 수 있습니다. 좋은 질문, 나는 항상 예를 온라인없이 따랐다. 나는 무엇이 일어나고 있는지 알고 싶다. – Larry