3

簡単な要約 - 文字列配列を持つクラスを追加する必要があるいくつかのレガシー コードを使用しており、Public 文字列配列を宣言できないためにつまずきました。

もっと:

私は、さまざまな個人に関する200行のデータを含むExcelシートを含むVBコードを持っています。各個人のデータはコードによってリミックスされ、Word テンプレートに差し替えられて、個人に関するレポートが作成されます。以下のように別のコードを追加する必要があります。

クラス タイプ MotivationBuckP を作成しました。可変長の文字列配列を含む、そのクラスの 4 つのオブジェクトを作成したいと考えています。(これが簡単なら、固定長でコーディングする方法があるかもしれません)

配列は空から始まり、特定の個人のデータに応じて埋められます。私が配列を使用しているのは、一定量の文字列コンテンツ (18 のタイトルと 18 の長いテキスト) があるにもかかわらず、各個人が 4 つのオブジェクトに異なる方法でそれらを分散させるためです (各個人を 18 ガロンの樽に注がれたと考えてください)。バケツ4つ)

Class Module では、すべての変数を Public として宣言する必要があることを理解しています。

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

しかし、最後の 2 つの変数の存在に応じて、実行するとエラーが発生します。

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「Property Get」を使用してそれらにアクセスします

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 に答える