vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Collection Klasse 
Autor: guenni255
Datum: 03.01.21 09:25

Hallo Forum
Ein frohes und gesundes neues Jahr allen Mitgliedern.

Mal wieder hab ich ein Problem bei dem ich mir eure Hilfe erhoffe.

Grundlage war euer Workshop OOP-Objektorientierte Programmierung.

nun möchte ich in einer Collection-klasse mehrere Collections einbinden. Doch schon bei der ersten Streikt es.
Frage: Geht das überhaupt?
der Testlauf des unten stehenden Code´s endet bei der Zeile .WT=test in der Collection mit der Fehlermeldung "Argument ist nicht optional".

Was mache ich falsch??
Hier der gesamte Code

'Modul Deklarationen
Option Explicit
Public Teilnehmer As colWochenende
Public Test As Collection
 
Option Explicit
'clsWochenende
Private xTlnname As String
Private xWT As Collection
Private xTage As Integer
Private xNächte As Integer
Private xAnreise As Date
Private xAbreise As Date
 
Public Property Get Tlnname() As String
Tlnname = xTlnname
End Property
Public Property Let Tlnname(ByVal vNewValue As String)
xTlnname = vNewValue
End Property
Public Property Get WT() As Collection
WT = xWT
End Property
Public Property Set WT(ByVal vNewValue As Collection)
xWT = vNewValue
End Property
Public Property Get Tage() As Integer
Tage = BerTage
End Property
Public Property Let Tage(ByVal vNewValue As Integer)
xTage = vNewValue
End Property
Public Property Get Nächte() As Integer
Nächte = BerNächte
End Property
Public Property Let Nächte(ByVal vNewValue As Integer)
xNächte = vNewValue
End Property
Public Property Get Anreise() As Date
Anreise = xAnreise
End Property
Public Property Let Anreise(ByVal vNewValue As Date)
xAnreise = vNewValue
End Property
Public Property Get Abreise() As Date
Abreise = xAbreise
End Property
Public Property Let Abreise(ByVal vNewValue As Date)
xAbreise = vNewValue
End Property
 
Public Function BerTage() As Integer
BerTage = DateDiff("d", Anreise - 1, Abreise)
End Function
Public Function BerNächte() As Integer
BerNächte = DateDiff("d", Anreise, Abreise)
End Function
 
 
Option Explicit
 
'colWochenende
Private tempjeTln As Collection
Public WT As Collection
Public Property Get item(ByVal Index As Long) As clsWochenende
Set item = tempjeTln(Index)
End Property
Public Property Get count() As Long
count = tempjeTln.count
End Property
Public Sub remove(ByVal Index As Integer)
tempjeTln.remove Index
End Sub
Private Sub Class_Initialize()
Set tempjeTln = New Collection
Set WT = New Collection
End Sub
 
Private Sub Class_Terminate()
Set tempjeTln = Nothing
Set WT = Nothing
End Sub
Public Function Add(Tln As String, _
                              anr As Date, _
                              abr As Date, _
                              Test As Collection) As clsWochenende
Dim DSnew As clsWochenende
Set DSnew = New clsWochenende
With DSnew
     .Tlnname = Tln
     .Anreise = anr
     .Abreise = abr
     .WT = Test'**********hier bleibt es mit der Fehlermeldung hängen********
 
End With
tempjeTln.Add DSnew
Set Add = DSnew
Set DSnew = Nothing
End Function
 
'Eingabeform
Option Explicit
 
Private Sub chkWT_Click(Index As Integer)
Dim temp As Collection
Set temp = New Collection
Set Test = New Collection
Select Case Me.chkWT(Index).Value
     Case 1
          temp.Add 1, CStr(Index)
     Case 0
          temp.remove (CStr(Index))
End Select
Set Test = temp
Set temp = Nothing
Debug.Print Test.item(1)
Teilnehmer.Add Me.txt1_Ebene1, Me.txtAnreise, Me.txtAbreise, Test
 
End Sub
 
Private Sub Command1_Click()
Call colkontrolle'Modul zur Prüfung der Inhalte
End Sub
Private Sub Form_Load()
Set Teilnehmer = New colWochenende
End Sub
 
Private Sub txtAnreise_Click()
Me.txtAnreise = "1/1"'Testeingabe
End Sub
 
Private Sub txtAnreise_LostFocus()
Me.txtAnreise = Format(Me.txtAnreise, "dd.mm.yy")
End Sub
 
Private Sub txtAbreise_Click()
Me.txtAbreise = "8/1"'Testeingabe
End Sub
 
Private Sub txtAbreise_LostFocus()
Me.txtAbreise = Format(Me.txtAbreise, "dd.mm.yy")
End Sub
Ich würde mich sehr freuen wenn mir jemand helfen könnte und bedanke mich herzlich im voraus.

Gruß Günni
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Collection Klasse 
Autor: Souffleurlos
Datum: 03.01.21 11:21

Hallo,
so wie du diese Eigenschaft deklariert haat geht nicht:

.WT = Test'**********hier bleibt es mit der Fehlermeldung hängen********

.WT ist ein Objekt. Deshalb .WT.Add "Test"
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Collection Klasse 
Autor: guenni255
Datum: 03.01.21 14:07

Hallo Souffleurlos

Vielen Dank für deine rasche Antwort.

Leider funzt es so nicht.
du Übergibst der Collection WT doch nur den weiteren Eintrag (String)"TEST". Aber auch ohne " funzt die Add Methode nicht.
ich möchte der Collection WT die Collection test übergeben.
ich habe weiter gesucht und entdeckt das dies mit Set geschehen muss. siehe geänderter Code (test heißt jetzt Übergabe).

wie der Debug.print im Anschluss zeigt werden die Daten auch richtig übernommen.
Nur jetzt ergibt sich für mich das Problem...ich komm von außen nicht ran an diese Einträge.

Vielleicht kannst du mir da noch einmal helfen.

Ich dachte es geht in etwa mit Teilnehmer.item(?).WT.item(?)
oder, da ich einen Key bei der WT Collection vergebe, über Teilnehmer.item(?).wt(key)
Aber dem ist nicht so. Wahrscheinlich ein Gedanken Fehler


Hier der geänderte code der macht was er soll.

Public Function Add(Tln As String, _
                              anr As Date, _
                              abr As Date, _
                              Übergabe As Collection) As clsWochenende
Dim DSnew As clsWochenende
Set DSnew = New clsWochenende
With DSnew
     .Tlnname = Tln
     .anreise = anr
     .abreise = abr
     Set WT = Übergabe
 
Debug.Print WT.item(1), WT.item(2), WT.item(3), WT.item(4)
' oder Debug.Print WT(1), WT(2), WT(3), WT(4).. geht beides
 
End With
tempjeTln.Add DSnew
Set Add = DSnew
Set DSnew = Nothing
End Function
Vielen Dank noch einmal
LG Günni
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Collection Klasse 
Autor: guenni255
Datum: 03.01.21 17:15

Fehler gefunden

Nach langem Suchen und viel testen hab ich meinen Fehler entdeckt.
Er steckte in der Property Get und Let WT.

hier die veränderten codes mit denen alles läuft wie es soll und ich es mir vorgestellt habe. mit kleiner Prüffunktion.

die Klassenänderung

Public Property Get WT() As Collection
Set WT = xWT
End Property
Public Property Let WT(ByVal vNewValue As Collection)
Set xWT = vNewValue
End Property
Die ursprüngliche Collection.add

Public Function Add(Tln As String, _
                              anr As Date, _
                              abr As Date, _
                              Übergabe As Collection) As clsWochenende
Dim DSnew As clsWochenende
Set DSnew = New clsWochenende
With DSnew
     .Tlnname = Tln
     .anreise = anr
     .abreise = abr
     .WT = Übergabe
 
End With
tempjeTln.Add DSnew
Set Add = DSnew
Set DSnew = Nothing
End Function
das Prüfmodul

With Teilnehmer
For j = 1 To .count
Debug.Print .count, .item(j).Tlnname, .item(j).Tage
For i = 1 To .item(j).WT.count
Debug.Print .item(j).WT.item(i)
Next
Next
End With
LG Günni
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel