Я сейчас работаю над проектом VBA. У меня есть только опыт работы с основами VBA (нет OOP, только функции и сабвуферы) и C#.
Сегодня я пытаюсь создать свой первый класс, но я сталкиваюсь с ошибкой.
Вот так выглядит класс:
'CLASS Disponent
Private Sub Class_Initialize()
m_dispocode = 1
m_name = Unknown
m_suppliers
m_materials
SetID
End Sub
Private m_materials As New ArrayList
Private m_suppliers As New ArrayList
Private m_name As String
Private m_dispocode
Private m_id As String
Property Get Id() As Integer
Id = m_id
End Property
Property Get Suppliers(value As Integer) As String
If value >= 0 And value < m_suppliers.Count Then
Suppliers = m_suppliers(value)
Else
Err.Raise ERROR_INVALID_INDEXING, "ReadWorksheet", "The indexer used in the arraw is out of bounds"
End If
End Property
Property Let Suppliers(supp As String)
m_suppliers.Add supp
End Property
Property Get Dispocode() As Integer
Dispocode = m_dispocode
End Property
Property Let Dispocode(dispcode As Integer)
If dispcode > 0 And dispcode < 1000 Then
m_dispocode = dispcode
Else
Err.Raise ERROR_INVALID_DISPOCODE, "ReadWorksheet", "The value must be between 1 (incl) and 999 (incl)"
End If
End Property
Property Get name() As String
name = m_name
End Property
Property Let name(name As String)
If Len(name) > 3 Then
m_name = name
Else
Err.Raise ERROR_INVALID_NAME, "ReadWorksheet", "The name must be at least 3 letters long"
End Property
Property Get Materials(indexof As Integer) As ArrayList
If indexof >= 0 And indexof < m_suppliers.Count Then
Materials = m_materials(indexof)
Else
Err.Raise ERROR_INVALID_INDEXING, "ReadWorksheet", "The indexer used in the arraw is out of bounds"
End If
End Property
Property Let Materials(materialnum As String)
m_materials.Add materialnum
End Property
Public Sub SetID()
m_id = m_name & m_dispocode
End Sub
И вот как я пытаюсь создать свои объекты в SUB в обычном модуле:
Sub GenerateDisponents()
Dim last_row As Long
last_row = Sheets("Disponents").Cells(Rows.Count, 1).End(xlUp).Row
Dim Dispos As New Collection
For i = 1 To last_row
Dim temp As New Disponent
Dim name As String
name = Sheets("Disponents").Range("B" & i).value
Dim code As Integer
code = Sheets("Disponents").Range("A" & i).value
temp.name = name
temp.Dispocode = code
Dispos.Add temp
MsgBox ("DONE")
End Sub
Когда я пытаюсь чтобы запустить подпрограмму GenerateDisponents, я получаю следующую ошибку в свойстве Let Materials: «Определения процедур свойства для одного и того же свойства противоречивы, или процедура свойства имеет необязательный параметр, ParamArray или недопустимый конечный параметр Set.»
Для раннего связывания я использую следующую ссылку: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319. \ Mscorlib.dll.
Ребята, вы понимаете, почему мой код не не работает?
Я уверен, что в нем много ошибок, потому что я впервые пытаюсь использовать классы в VBA.
Заранее спасибо за помощь!