vba / catvba类实例化

时间:2013-01-23 13:43:10

标签: vba catia

我想声明类globaly 这是我的例子:

我想使用看起来完全像这样的类clsIEError:

Option Explicit

Public Sub m(msg As String, Optional title As String = "Title:")

    'Attribute Value.VB_UserMemId = 0

    'this method will be used as defualt method
    'and here are attributes msg and title used to create some inteface
End Sub

这就是它的工作原理example1:

Sub CATMain()

     Dim ie As clsIEError
     Set ie = New clsIEError

     ie "test", "title"

     Set ie = Nothing
End Sub

但我的问题是我希望全局拥有它example2:

Option Explicit

Public ie As clsIEError

Private Function Init()
    Set ie = New clsIEError
End Function

Sub CATMain()
    Call Init

'   and to use it same as in example 1    
    ie "test", "title" 

'   but i am able to use it only like:
'   ie.m "test", "title" 'works as expected 

    Set ie = Nothing
End Sub

为什么公共默认方法不起作用?

2 个答案:

答案 0 :(得分:1)

我可以确认这不像你描述的那样有用。我在运行时得到“预期的过程,而不是变量”,但没有编译错误。它必须是VB解析器中的一个错误,但这是我能想出的唯一解释。

我一直认为该属性必须与元素名称匹配。你在哪里

Attribute Value.VB_UserMemId = 0

我以为你应该

Attribute m.VB_UserMemId = 0

但它似乎工作(使用本地声明的变量)两种方式。这是一个可怕的答案,但答案是明确地调用该方法。遗憾。

答案 1 :(得分:0)

我不确定它会明确地回答你的问题,但是,对于我来说,我想创建一个可以在整个项目中访问的类的实例。基本上我需要创建静态类或单例。我发现这个post非常有用。