3

快速总结 - 我正在使用一些遗留代码,我需要添加一个带有字符串数组的类,并因无法声明公共字符串数组而绊倒。

更多的:

我有一个带有 200 行不同个人数据的 Excel 表的 VB 代码。每个人的数据将由代码重新混合,并分流到 Word 模板中,以生成有关个人的报告。我需要添加另一段代码,如下所示:

我创建了一个类类型 MotivationBuckP,我想创建该类的四个对象,其中包含可变长度的字符串数组。(如果这更容易,我可能有办法用固定长度对其进行编码)

数组开始为空,将根据特定个人的数据填充。我使用数组是因为虽然字符串内容的数量是固定的(18 个标题和 18 个较长的文本位),但每个人都会让它们在四个对象中分布不同(将每个人想象成一个 18 加仑的桶倒入四个桶)

我知道在类模块中我需要将所有变量声明为公共,例如:

Public MotivID As Integer
Public MotivQuant As Integer
Public strMotivatorTitle() As String
Public strMotivatorDescriptor() As String

但是为了响应最后两个变量的存在,运行给了我错误:

Compile error: 
Constants, fixed-level strings, arrays, user-defined types and Declare statements are not allowed as Public members of object modules

由于现有代码的限制,我需要在多个模块中创建和使用 strMotivatorTitle 和 strMotivatorDescriptor 变量。但我知道我不能这样做,除非它被公开声明(并且,我想,在类模块中)。所以这就是我碰壁的地方。

非常感谢任何帮助。自从攻读博士学位以来,我就没有大量使用过 VB,所以我可能被一些明显的东西绊倒了……

4

1 回答 1

7

一种解决方法是在初始化它们时将它们声明为字符串Variant数组ReDim

Public strMotivatorTitle As Variant 
Public strMotivatorDescriptor As Variant

初始化为数组,例如

Private Sub Class_Initialize()
    ReDim strMotivatorTitle(0 To 9)

    strMotivatorTitle(0) = "Foo"
    strMotivatorTitle(1) = "Bar"
    ' etc
End Sub

另一种方式,将您的字符串数组声明为Private并使用“属性获取”来访问它们

Private pMotivatorTitle() As String
Private pMotivatorDescriptor() As String

Property Get strMotivatorTitle() As String()
    strMotivatorTitle = pMotivatorTitle
End Property

Property Get strMotivatorDescriptor() As String()
    strMotivatorDescriptor= pMotivatorDescriptor 
End Property
于 2013-11-09T20:58:01.647 回答