I'm currently working on a VBA project. I only have experience in the basics of VBA (No OOP, just functions and subs) and C#.
Today I am trying to create my first class but i run into an error.
This is how the class looks like:
'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
And this is how I try to create my objects in a SUB in a normal Module:
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
When I try to run GenerateDisponents sub I get the following error on the Let Materials property: "Definitions of property procedures for the same property are inconsistent, or property procedure has an optional parameter, a ParamArray, or an invalid Set final parameter."
For the early binding I use the following reference: C:\Windows\Microsoft.NET\Framework\v4.0.30319.\mscorlib.dll.
Do you guys have any idea why my code isn't working?
I am sure its full of mistakes because it's my first time trying using classes in VBA.
Thanks for the help in advance!