自定义类型变量可以作为VBA函数的参数,但不能作为VB6函数的参数,谁有办法解决

解决方案 »

  1.   


    Public Type A
        S As Long
        L() As B 
    End Type
    Public Function CC(K As A) As Boolean K As A 报错:“只有在公共对象模块中定义的公共用户定义类型可以作为参数、类模块的公共过程返回类型、公共用户定义类型的字段使用。”
      

  2.   

    Public Type A 
        S As Long 
        L() As B 
    End Type 在bas模块中
      

  3.   


    Public Type A 
        S As Long 
        L() As B 
    End Type 就是在模块里Public Function CC(K As A) As Boolean
    在类里如果将Public Function CC(K As A) As Boolean
    也放在模块里,很不方便,函数体内用到类中的变量时传递很困难。我的意思是,如何在类中定义CC函数,而不要放在模块里。
      

  4.   

    必须创建类。方法是:
    1、新建一个ActiveX DLL工程,并设置工程名称,如myTypes
    2、设置类名。如Pointxy。在属性窗口中将类的Instancing设置为6-GloblMultiUse。表示全局对象。标准工程中引用该类后,即可直接调用其方法,不必创建实例。
    3、在类的代码窗口定义你需要的类型。可以定义多个类型,但需Public声明。如:
       Public Type POINT
       x As Single
       y As Single
       End Type
    4、定义类的其他方法、事件、属性。(必要时)
    5、保存工程。并生成DLL。
    生成类的DLL后,其他工程中引用该类,即可在函数中以该类定义的类型作为参数。
      

  5.   

    Type A 
        S As Long 
        L() As B 
    End Type 就可以了。
      

  6.   

    注意你的引用方式,要使用Byref
    Option ExplicitPublic Type A
        S As Long
    '    L() As B
    End Type'就是在模块里Public Function CC(ByRef K As A) As BooleanEnd Function
      

  7.   


    添加ByRef问题依旧,不行
      

  8.   

    在类模块中将函数(方法)的public修饰改为Friend
    Option ExplicitPublic Type A
        S As Long
    '    L() As B
    End Type'就是在模块里Friend Function CC(ByRef K As A) As BooleanEnd Function
      

  9.   

    两种方法:
    1.传递指针,在函数内用Copy内存的方式重组,这样要在结构中注明结构的长度。
    2.后期绑定,传递Variant类型,在函数内后绑定。
      

  10.   


    Sorry,理解错了楼主的意思。您可以无视第二种方法。
    或者:
    用Friend替换Public来声明你的CC函数,因为你的函数相对于你的程序来说并不对外开放。
    如果要对外开放,那就要把CC函数封装到ActiveX dll了。
      

  11.   

    我的 换成 byref 就可以了