| |
Visual-Basic EinsteigerCollection 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 | |
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" | |
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 | |
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 | |
| 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 |
|
|
sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere InfosTipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
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
|
|