【问题标题】:VBA function call: Excel Button vs VBS callVBA 函数调用:Excel 按钮与 VBS 调用
【发布时间】:2013-02-27 15:24:41
【问题描述】:

我正在努力使用按钮调用的 VBA Sub。此 Sub 从硬编码文件路径打开一个 Configuration.xls Excel 电子表格。一个 MsgBox 告诉我有关当前工作区的信息 - 工作区从当前文件更改为刚刚打开的文件。这里一切都很好。

我现在想从调用 VBS 的外部批处理执行此 Sub,该 VBS 调用 VBA 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

【问题讨论】:

  • 无论是 sub/a 函数,我都能重现您的问题。好问题,我总是在没有()的情况下在线跟踪示例。我想知道 () 发生了什么。

标签: vba vbscript


【解决方案1】:

我只是想让你知道这个问题的解决方案,虽然我不能完全解释。解决方案是去掉宏调用后面的“()”。这会导致 VBS 脚本运行两次并且工作簿“范围”混淆。

如此简单的解决方案,但仍然是一个问题,为什么 - 添加“()”时我还需要告诉函数什么?

感谢您的帮助!

疯狂的马特

【讨论】:

    猜你喜欢
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多