Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '** Function for testing
- Public Sub testing()
- Dim arr As List
- Set arr = New List
- arr.Init 2, 3, 4
- arr.Insert 9, "Final"
- End Sub
- '** List Class
- Private internalData() As Variant
- Private internalName() As String
- ' Public Functions
- Public Sub Init(ParamArray data() As Variant)
- For i = 0 To UBound(data)
- Call Insert(data(i))
- Next i
- End Sub
- Public Sub Insert(data As Variant, Optional name As String)
- Dim i As Integer
- If (Not internalData) = -1 Then
- i = 0
- Else
- i = UBound(internalData) + 1
- End If
- Call ResizeTo(i)
- If name = "" Then
- internalName(i) = i
- Else
- SetName i, name
- End If
- internalData(i) = data
- End Sub
- Public Function GetValue(Optional index As Integer, Optional name As String) As Variant
- If IsMissing(index) And IsMissing(name) Then
- GetValue = internalData(-1)
- ElseIf name = "" Then
- GetValue = internalData(index)
- Else
- GetValue = internalData(GetIndexFromName(name))
- End If
- End Function
- Private Sub SetValue(Value As Variant, Optional index As Integer, Optional name As String)
- On Error GoTo noArg
- If IsMissing(index) And IsMissing(name) Then
- Err.Raise 514, "SetValue", "No Arguments Given"
- ElseIf IsMissing(name) Then
- internalData(index) = Value
- Else
- internalData(GetIndexFromName(name)) = Value
- Else
- MsgBox ("Something went wrong in SetValue")
- End
- End If
- onArg:
- MsgBox ("No argument was given for index or name.")
- End
- End Sub
- ' Private Functions
- Private Sub ResizeTo(size As Integer)
- ReDim Preserve internalData(0 To size)
- ReDim Preserve internalName(0 To size)
- End Sub
- Private Function GetIndexFromName(name As String) As Integer
- On Error GoTo noIndex
- For i = 0 To UBound(internalName)
- If internalName(i) = name Then
- GetIndexFromName = i
- Exit Function
- End If
- Next i
- Err.Raise 513, "GetIndexFromName", "No index found"
- noIndex:
- MsgBox ("Error 513: No index found for name " & name & " in array.")
- End
- End Function
- Private Sub SetName(index As Integer, name As String)
- On Error GoTo alreadyExists
- If (Not NameExists(name)) Then
- internalName(index) = name
- Else
- Err.Raise 515, "SetName", "Name exists"
- End If
- alreadyExists:
- MsgBox ("Name already exists in array.")
- End
- End Sub
- Private Function NameExists(name As String) As Boolean
- For i = 0 To UBound(internalName)
- If internalName(i) = name Then
- NameExists = True
- Exit Function
- End If
- Next i
- NameExists = False
- End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement