我在标准模块里用Public语句声明了一个名为MemTab的类型(Type语句),在类模块的一个过程里,有一个参数是这个类型的,但是已运行VB就显示:“只有在公共对象模块中定义的公共用户定义类型可以作为参数,类模块的公共过程返回类型,公共用户定义类型的字段使用。”为什么会这样,我的程序有哪点不满足了???(加急啊)

解决方案 »

  1.   

    摘自MSDN:
    Type 语句      在模块级别中使用,用于定义包含一个或多个元素的用户自定义的数据类型。语法[Private | Public] Type varname
    elementname [([subscripts])] As type
    [elementname [([subscripts])] As type]
    . . .End TypeType 语句的语法包含下面部分:部分 描述 
    Public 可选的。用于声明可在所有工程的所有模块的任何过程中使用的用户定义类型。 
    Private 可选的。用于声明只能在包含该声明的模块中使用的用户自定义的类型。 
    varname 必需的。用户自定义类型的名称;遵循标准的变量命名约定 
    elementname 必需的。用户自定义类型的元素名称。除了可以使用的关键字,元素名称也应遵循标准变量命名约定。 
    subscripts 可选的。数组元素的维数。当定义大小可变的数组时,只须圆括号。subscripts 参数使用如下语法: 
      [lower To] upper [,[lower To] upper] . . . 
      如果不显式指定 lower,则数组的下界由 Option Base 语句控制。如果没有 Option Base 语句则下界为 0。 
    type 必需的。元素的数据类型;可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对变长的字符串)、String * length(对定长的字符串)、Object、Variant、其它的用户自定义的类型或对象类型。 
    说明Type 语句只能在模块级使用。使用 Type 语句声明了一个用户自定义类型后,就可以在该声明范围内的任何位置声明该类型的变量。可以使用 Dim、Private、Public、ReDim 或 Static 来声明用户自定义类型的变量。在标准模块中,用户自定义类型按缺省设置是公用的。可以使用 Private 关键字来改变其可见性。而在类模块中,用户自定义类型只能是私有的,且使用 Public 关键字也不能改变其可见性。在 Type...End Type 块中不允许使用行号和行标签。用户自定义类型经常用来表示数据记录,记录一般由多个不同数据类型的元素组成。下面的示例演示了一个用户自定义类型的大小固定的数组的用法:Type StateData
       CityCode (1 To 100) As Integer   ' Declare a static array.
       County As String * 30
    End TypeDim Washington(1 To 100) As StateData在上述示例中,StateData 中包括了一个 CityCode 静态数组,且记录Washington 的结构与 StateData 相同。当在用户自定义类型中声明大小固定的数组时,必须用数字文字或常数而不能用变量来声明数组的维数。数组的下界由 Option Base 语句的设置确定。
      

  2.   

    要学会用 Google
    http://topic.csdn.net/u/20080413/16/afcd5e50-5109-4113-bb46-827f80f0e070.html
    http://topic.csdn.net/u/20090511/17/c5f07668-60a5-460f-84d5-1ffe7e836eb8.html
      

  3.   

    无法解决, 因为这个编译错误信息提示VB的模块(Module)是私有性的(Private), 而且无法设置! 所以在这种情况下应使用类(Class)代替Type
      

  4.   

    只有在公共对象模块中定义的公共用户定义类型可以....而问题在于模块不是对象.所以如果你非要想在你的类过程中这么引用参数的话, 你必须把这个"自定义类型"写成单独一个类的形式.比如原来的定义:
    'Module1
    PUBLIC TYPE AAA
     AA AS LONG
     BB AS INTEGER
    END TYPE得写成:
    'Class1
    public AA AS LONG
    PUBLIC BB AS INTEGER
    '没有END CLASS引用这个东西的时候也得老老实实按照类来new一个实例:
    DIM AAAA AS NEW AA
    就这样不过作为参数的话, 应该是BYREF引用, 而不能BYVAL了
      

  5.   

    http://topic.csdn.net/u/20080413/16/afcd5e50-5109-4113-bb46-827f80f0e070.html