我正在努力使用按钮调用的VBA Sub。此Sub从硬编码文件路径打开Configuration.xls Excel电子表格。 MsgBox告诉我当前工作空间 - 工作空间从当前文件更改为刚打开的工作空间。一切都很好。
我现在想要从调用调用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看起来像这样
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 :(得分:0)
我只是想让你知道这个问题的解决方案,尽管我无法完全解释。解决方案是摆脱宏调用背后的“()”。这会导致VBS脚本运行两次,并且工作簿的“范围”被混淆。
如此简单的解决方案,但仍然是问题为什么 - 在添加“()”时我还能告诉该功能?
感谢您的帮助!
TheMadMatt