ボタンで呼び出される VBA Sub に苦労しています。この Sub は、ハードコードされたファイル パスから Configuration.xls Excel スプレッドシートを開きます。MsgBox は、現在のワークスペースについて教えてくれます。ワークスペースは、現在のファイルから開いたばかりのファイルに変わります。ここではすべて問題ありません。
VBA Sub を呼び出す VBS を呼び出す外部バッチからこの Sub を実行したいと考えています。Configuration.xls ファイルを開いた後のワークスペースは同じままで、Configuration.xls に変わりません。さらに、VBS で Sub を呼び出すと、関数が 2 回実行されます - 理由はわかりません。
私の質問は、なぜ 2 つの呼び出しメカニズム間で動作が異なるのですか?
より複雑な実際のコードと同じ動作を示すため、以下のコードを簡略化しました。
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はこんな感じ
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