2013-11-09 2 views
2

Краткое резюме - Im работает с некоторым устаревшим кодом, где мне нужно добавить класс со строковыми массивами и сработал из-за невозможности объявить массив строковых строк.Создание массива VB, который является общедоступным, в модуле класса

Подробнее:

У меня есть VB код с листов Excel, который имеет 200 строк данных на разных индивидуумов. Данные каждого человека будут ремикшированы кодом и шунтированы в шаблон Word для создания отчета для отдельного человека. Мне нужно добавить еще один фрагмент кода:

Я создал класс типа MotivationBuckP, и я хочу создать четыре объекта этого класса, которые содержат строковые массивы переменной длины. (для этого может быть способ кодирования с фиксированной длиной, если это проще)

Массивы начинаются пустыми и заполняются в зависимости от данных конкретного человека. Я использую массивы, потому что, хотя существует фиксированное количество содержимого строки (18 наименований и 18 более длинных битов текста), каждый индивидуум будет распределять их по-разному по четырем объектам (подумайте о каждом индивидууме в виде 18-галлонного ствола, вылитого в четыре ведра)

Я понимаю, что в модуле класса мне нужно объявлять все переменные, как 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 сильно, так как мой кандидат, так что я, вероятно, быть споткнулся на нечто само собой разумеющееся ...

+0

Используйте 'Class', а не' Module'. – OneFineDay

+0

В классе вы можете определить желаемый массив, который будет использоваться вне класса как Свойство, или как возвращаемое значение метода. Вне класса вы создаете новый MyClass и легко используете его в качестве члена класса. – jacouh

ответ

3

работа вокруг, чтобы объявить их как Variant и ReDim как массив строк, когда вы initialiose их

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 и использовать `Get Property», чтобы получить доступ к ним

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 
Смежные вопросы