List (Of T) in VBA verwenden

  • Access

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von BlueLagoonX.

    List (Of T) in VBA verwenden

    Moin,

    ich muss für ein altes Projekt in Access VBA eine DLL erstellen, welche in den Klassen auch List (Of T) Eigenschaften enthält.

    hier mal eine Beispielklasse aus der .Net DLL

    VB.NET-Quellcode

    1. Public MustInherit Class Master
    2. Public Property ID As Integer = 0
    3. Private Property _Name As String
    4. Public Property Name As String
    5. Get
    6. With Me
    7. Return ._Name
    8. End With
    9. End Get
    10. Set(value As String)
    11. With Me
    12. If String.IsNullOrWhiteSpace(value) Then value = String.Empty
    13. ._Name = value
    14. End With
    15. End Set
    16. End Property
    17. Sub New()
    18. End Sub
    19. End Class
    20. Public Class Kuchen : Inherits Master
    21. Public Property Zutaten As New List(Of Zutat)
    22. Private Property _Backzeit As Single = 0.0
    23. Public Property Backzeit As Single
    24. Get
    25. With Me
    26. Return ._Backzeit
    27. End With
    28. End Get
    29. Set(value As Single)
    30. If value < 0 Then value = New Single
    31. With Me
    32. ._Backzeit = value
    33. End With
    34. End Set
    35. End Property
    36. Sub New()
    37. MyBase.New
    38. With Me
    39. End With
    40. End Sub
    41. End Class
    42. Public Class Zutat : Inherits Master
    43. Public Property Reihenfolge As UInteger = 0
    44. Private Property _Menge As Double = 0.0
    45. Public Property Menge As Double
    46. Get
    47. With Me
    48. Return ._Menge
    49. End With
    50. End Get
    51. Set(value As Double)
    52. If value < 0 Then value = 0.0
    53. With Me
    54. ._Menge = value
    55. End With
    56. End Set
    57. End Property
    58. Private Property _Hinweis As String
    59. Public Property Hinweis As String
    60. Get
    61. With Me
    62. Return ._Hinweis
    63. End With
    64. End Get
    65. Set(value As String)
    66. With Me
    67. If String.IsNullOrWhiteSpace(value) Then value = String.Empty
    68. ._Hinweis = value
    69. End With
    70. End Set
    71. End Property
    72. Sub New()
    73. MyBase.New
    74. End Sub
    75. End Class


    Aus dieser soll dann in Access ein Objekt erstellt werden.

    VB.NET-Quellcode

    1. Dim Kuchen As Kuchen
    2. Set Kuchen = New Kuchen
    3. With Kuchen
    4. .ID = 1
    5. .Name = "Luftkuchen"
    6. .Backzeit = 25
    7. Dim Zutat1 As Zutat
    8. Set Zutat1 = New Zutat
    9. With Zutat1
    10. .ID = 1
    11. .Name = "Luft"
    12. .Reihenfolge = 1
    13. .Menge = 5
    14. .Hinweis = "Vorsicht, verflüchtigt sich schnell"
    15. End With
    16. .Zutaten.Add (Zutat1)
    17. End With


    Der Aufruf funktioniert soweit, allerdings hat Access ein Problem mit

    Quellcode

    1. .Zutaten.Add (Zutat1)


    Access meldet Fehler 424, Objekt erforderlich.

    Wo ist der Fehler, bzw. wie kann man der List (Of Zutaten) über VBA ein Objekt hinzufügen?

    Grüße :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BlueLagoonX“ ()

    Hi,

    in VBA gibt es keine Listen - da musst Du auf Dictionaries oder Collections zurückgreifen. Außerdem gibt es auch keine vergleichbare Funktion List.Add, mit der Du ohne Weiteres eine ganze Klasse (Zutat1) hinzufügen könntest. Behaupte ich jetzt mal, ohne zu Googln - würde mich aber wundern.

    br

    Edit: Ups, geht anscheinend doch. 8o Wenn Du aus Deinen Zutaten eine Collection machst und die Klammern weglässt, sollte es gehen:

    Visual Basic-Quellcode

    1. .Zutaten.Add Zutat1

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „cry.baby“ ()

    1) Vererbung geht nicht in VBA
    Vergiss den Master und packe alles in den Kuchen.
    2) Statt einer List(Of Zutat) nimm eine Collection.
    In eine Collection kannst du alles Mögliche packen, auch Objekte. Sogar gemischt.
    Ein Ansatz frei aus dem Kopf

    Visual Basic-Quellcode

    1. 'Class Kuchen
    2. Public ID As Integer
    3. Public Name As String
    4. Public Zutaten As New Collection
    5. 'Class Zutat
    6. Public ID As Long
    7. Public Name As String
    8. Public Reihenfolge As Integer
    9. Public Menge As Double
    10. Public Hinweis As String
    11. 'Aufruf
    12. Dim Luftkuchen As New Kuchen
    13. Luftkuchen.Name="Luftkuchen"
    14. Luftkuchen.ID=1
    15. Dim Zutat1 As New Zutat
    16. Zutat11.Name="Luft"
    17. Zutat1.ID=1
    18. Zutat1.Reihenfolge=1
    19. Zutat1.Menge=5
    20. Zutat1.Hinweis=""
    21. Luftkuchen.Zutaten.Add Zutat1
    Wenn die Zutat-ID Unique sein soll, dann kannst du beim Add auch noch die ID mitgeben, dann bekommst du einen Fehler, wenn du die ID doppelt vergibst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --