录制 SAP GUI脚本时,代码的第一行始终相同:
If Not IsObject(app) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set app = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = app.Children(0)
End If
If Not IsObject(session) Then
Set session = Connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject app, "on"
End If
在此代码中,使用了四个变量:app
,SapGuiAuto
,Connection
和session
。 为什么这些变量可以在没有声明的情况下使用?我已经基于此创建了无数的脚本,并且一切都一直有效。不过,我不喜欢不了解自己的代码的感觉。 : - )
答案 0 :(得分:2)
有两种可能性(可能更多)
Option Explicit
已关闭(或者更确切地说,未明确指定)。如果是案例2,我可以编写诸如
之类的代码Sub Test()
a = a + 1
MsgBox(a)
End Sub
得到结果' 1'因为在这种情况下,VBA会自动创建一个变量' a'并将其初始化为0。
根据首次使用新变量的方式,VBA可以初始化它。因此,为了安全起见,最好将Option Explicit
写为模块中的第一行,然后继续对其余部分进行编码。
这样做需要在使用之前明确声明任何变量。从那时起,编译器始终是一个很好的编码实践,它将捕获任何未初始化的变量并防止令人讨厌的运行时意外。
答案 1 :(得分:2)
除非你在每个模块的开头添加Option Explicit,否则VB / VBA将允许你使用变量而不用DIM它们(它会自动将它们作为变体DIM)。大多数情况下,这不会导致任何问题。当它确实引起问题时,迟早会出现问题,这将很难弄明白。
最佳做法是将Option Explicit置于每个模块的顶部。 VB / VBA将强制您在使用它们之前显式声明变量,因为它们已被声明,它不会让您将不适当的数据放入变量中。
在IDE中,工具|选项|编辑器选项卡,选中标记需要变量声明。 IDE将自动为所有新模块添加Option Explicit。除非你在Mac上工作,否则这个功能就会崩溃。