VBA - 在模块之间传递变量

时间:2015-10-26 13:40:43

标签: vba vb6 coreldraw

我是VB6的新手,并尝试编写一些用于CorelDraw的宏。

我有一个需要从Class模块传递到Standard模块的变量,在我的Class Module" SaveOptClass"我有一个名为IsSaved的公共变量,它在类模块上设置:

Public IsSaved As Boolean

Public Sub SaveFile()
If <some triggers> Then
    IsSaved = True
End If

在标准模块中:

Sub DoSave()
Dim SaveClass As SaveOptClass
Set SaveClass = New SaveOptClass

If SaveClass.IsSaved = True Then
    ActiveDocument.Save
Else
    Form1.Show
End If 
End Sub

基本上我试图通过&#34; IsSaved&#34;从类模块到标准的布尔值。 (如果IsSaved为true,则保存文档或显示表单。)

我在执行代码时测试过boolean是True,但是我无法将状态传递给另一个模块。

我想念这里的东西吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

正如@shahkalpesh已经回答的那样,问题是你没有使用SaveOptClass的有意义的实例

在我看来,设计这种依赖关系的最佳方法是通过例程中的参数来使用它并尽可能避免使用全局变量。

在你的情况下,这会带来重写:

' in someOtherModule
Public Sub DoSave(saveOptObj as SaveOptClass)
    If saveOptObj.IsSaved Then ' = True is unnecessary
        ActiveDocument.Save
    Else
        Form1.Show
    End If 
End Sub

客户端代码可以是:

private saveOptObj as SaveOptClass

Public Sub SaveFile()

    If <some triggers> Then
        saveOptObj.IsSaved = True    
    End If

    ' ....      
    someOtherModule.DoSave(saveOptObj)      
    ' ...

此时考虑重命名DoSave,因为所采取的行动表明了不同的语义。在类似的情况下,最好移动调用者中的If Else逻辑。无论如何,如果您希望在同一例程中将具有不同语义的操作分组,则最好使用DoSaveOr<SomethingElse>之类的命名。