Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Array in Klasse übergeben

Array in Klasse übergeben
17.05.2009 19:49:49
trumb23
Ich versuche die Besucherzahlen in eine Klasse zu übergeben leider kommt immer eine Fehlermeldung, ich hoffe ihr könnt mir weiterhelfen!
Mein Hauptprogramm

Private Sub CommandButton1_Click()
Dim jo As Besucherstatistik
Dim i As Integer
Dim x As Integer
Dim j As Integer
wiederhole1:
x = InputBox("Wieviele Messetage wollen sie erfassen")
If x >= 10 Then
MsgBox ("Es können maximal 10 Besucher erfasst werden")
GoTo wiederhole1
End If
ReDim besucher(1 To x) As Long
For i = LBound(besucher) To UBound(besucher)
wiederhole2:
besucher(i) = InputBox("Wie viel Besucher waren am " & i & ". Tag auf der Messe?")
If besucher(i) >= 20000 Then
MsgBox ("Es können maximal 20000 Besucher erfasst werden")
GoTo wiederhole2
End If
j = j + 1
Set jo = New Besucherstatistik
i = ta.jo
besucher(i) = bes.jo
Set jo = Nothing
Next i
End Sub


Meine Klasse:


Private Tag As Integer
Private besucher As Integer
Public Property Let ta(t As Integer)
Tag = ta
End Property
Public Property Let bes(b As Integer)
besucher = b
End Property


Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array in Klasse übergeben
17.05.2009 20:19:05
trumb23
Okay hab oben sogenannte scheiße programmiert!
hab jetzt ein funktionierendes Programm:
Hauptprogramm:

Private Sub CommandButton1_Click()
Dim ges_bes As Integer
Dim i As Integer
Dim x As Integer
Dim j As Integer
wiederhole1:
x = InputBox("Wieviele Messetage wollen sie erfassen")
If x >= 10 Then
MsgBox ("Es können maximal 10 Besucher erfasst werden")
GoTo wiederhole1
End If
ReDim besucher(1 To x) As Long
For i = LBound(besucher) To UBound(besucher)
wiederhole2:
besucher(i) = InputBox("Wie viel Besucher waren am " & i & ". Tag auf der Messe?")
If besucher(i) >= 20000 Then
MsgBox ("Es können maximal 20000 Besucher erfasst werden")
GoTo wiederhole2
End If
jo = j + 1
d = i
Set jo = New Besucherstatistik
jo.ta = i
jo.bes = besucher(i)
ges_bes = ges_bes + jo.gesamtbesucher
Next i
MsgBox "Gsamtbesucherzahl: " & ges_bes
End Sub


Klasse:


Private tag As Integer
Private besucher As Integer
Public Property Let ta(t As Integer)
tag = t
End Property
Public Property Let bes(b As Integer)
besucher = b
End Property
Public Function gesamtbesucher()
gesamtbesucher = besucher
End Function


Jetzt habe ich noche die Frage, geht es auch das ich im nachhinein die Gesamtbesucherzahl auslesen kann?

Anzeige
AW: Array in Klasse übergeben
17.05.2009 23:19:48
Nepumuk
Hallo,
wenn ich dein Programm sehe, dann solltest du dringend die Selbsteinschätzung deines VBA-Levels überdenken.
So etwas ist Mist.
wiederhole1:
x = InputBox("Wieviele Messetage wollen sie erfassen")
If x >= 10 Then
    MsgBox ("Es können maximal 10 Besucher erfasst werden")
    GoTo wiederhole1
End If

Schon mal was von Do-Loop gehört? Was, wenn ich anStelle einer Zahl einen Buchstaben eingeben oder eine Zahl mit Nachkommastelle, was wenn ich auf Abbrechen klicke?
Und was soll das sein? Eine Variable erst als numerische Variable und gleich anschließend als Klassenvariable zu benutzen?
jo = j + 1
d = i
Set jo = New Besucherstatistik

Das zeugt auch nicht gerade vom Verständnis bezüglich Klassenprogrammierung:
Public Function gesamtbesucher()
    gesamtbesucher = besucher
End Function

Eine Methode zu benutzen nur um die Eigenschaft einer Klasse zurückzugeben. Warum benutzt du nicht Property Get?
Deine Klasse mit zwei Eigenschaften macht auch wenig Sinn, die ist nicht besser als zwei Variablen auf Prozedurebene.
Du kannst zwar ein Array an eine Klasse übergeben, aber nur über einen Variant. Normalerweise erzeugt man nicht erst ein Array um es dann an eine Klasse zu übergeben, sondern schreibt direkt in die Klasse. Aber dann sollte auch ein bisschen Intelligenz in der Klasse stecken, wie einfügen von neuen Elementen im Array oder das löschen von Elementen.
Zu guter letzt, solltest du die Benamung deiner Variablen überdenken, einzelne Buchstaben benutze ich maximal um mal schnell etwas zu testen, aber in einem Programm niemals. Du hast pro Namen 255 Zeichen zur Verfügung, nutze das um die Lesbarkeit deines Programms zu erhöhen.
Versteh mich jetzt aber bitte nicht falsch, ich will dir gerne helfen besser zu werden, aber fang erst mal mit den Grundlagen an und nicht mit dem schwierigen.
Gruß
Nepumuk
Anzeige
;
Anzeige

Infobox / Tutorial

Array in Klasse übergeben


Schritt-für-Schritt-Anleitung

  1. Erstelle das Hauptprogramm: Beginne mit der Erstellung eines VBA-Makros, das die Anzahl der Messetage abfragt und ein Array für die Besucherzahlen initialisiert.

    Private Sub CommandButton1_Click()
       Dim ges_bes As Integer
       Dim i As Integer
       Dim x As Integer
       Dim j As Integer
       wiederhole1:
       x = InputBox("Wieviele Messetage wollen sie erfassen")
       If x >= 10 Then
           MsgBox ("Es können maximal 10 Besucher erfasst werden")
           GoTo wiederhole1
       End If
       ReDim besucher(1 To x) As Long
  2. Besucherzahlen erfassen: Füge eine Schleife hinzu, die es ermöglicht, die Besucherzahlen für jeden Tag zu erfassen.

    For i = LBound(besucher) To UBound(besucher)
       wiederhole2:
       besucher(i) = InputBox("Wie viel Besucher waren am " & i & ". Tag auf der Messe?")
       If besucher(i) >= 20000 Then
           MsgBox ("Es können maximal 20000 Besucher erfasst werden")
           GoTo wiederhole2
       End If
  3. Klasse erstellen: Erstelle eine Klasse namens Besucherstatistik, die die Eigenschaften Tag und Besucher sowie eine Funktion zur Rückgabe der Gesamtbesucherzahl enthält.

    Private tag As Integer
    Private besucher As Integer
    Public Property Let ta(t As Integer)
       tag = t
    End Property
    Public Property Let bes(b As Integer)
       besucher = b
    End Property
    Public Function gesamtbesucher()
       gesamtbesucher = besucher
    End Function
  4. Gesamtbesucherzahl berechnen: Summiere die Besucherzahlen und zeige das Ergebnis in einer MsgBox an.

    ges_bes = ges_bes + jo.gesamtbesucher
    MsgBox "Gesamtbesucherzahl: " & ges_bes

Häufige Fehler und Lösungen

  • Fehler: Fehlermeldung bei der Eingabe: Achte darauf, dass die Eingaben für die Anzahl der Messetage und die Besucherzahlen nur numerisch sind. Verwende Do-Loop, um ungültige Eingaben zu behandeln.

  • Lösung: Eingaben validieren: Füge eine Validierung hinzu, um sicherzustellen, dass die Eingaben korrekt sind. Beispiel:

    If Not IsNumeric(x) Then
       MsgBox "Bitte geben Sie eine Zahl ein."
       GoTo wiederhole1
    End If
  • Fehler: Unnötige Variablen: Vermeide die Verwendung von Variablen, die nicht klar benannt sind. Benenne sie so, dass der Zweck klar ist.


Alternative Methoden

  • Verwendung von Collections: Statt ein Array zu verwenden, kannst du auch eine Collection nutzen. Diese ermöglicht es, dynamisch Elemente hinzuzufügen und zu entfernen.

  • Benutzung von Dictionary: Ein Dictionary kann ebenfalls nützlich sein, um Schlüssel-Wert-Paare zu speichern, z.B. Tag und Besucherzahl.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du die Klasse in einer Schleife verwenden kannst:

Dim jo As Besucherstatistik
Set jo = New Besucherstatistik
jo.ta = 1
jo.bes = 15000
MsgBox "Tag: " & jo.ta & ", Besucher: " & jo.bes

Tipps für Profis

  • Verwendung von Property Get: Statt einer Funktion kannst du Property Get verwenden, um die Besucherzahl zurückzugeben, was den Code lesbarer macht.

  • Eingaben in einer Schleife: Nutze Do While oder For Each, um Eingaben effizient zu sammeln und Fehler zu vermeiden.

  • Klarheit in der Benennung: Achte darauf, dass deine Variablen aussagekräftige Namen haben, um die Lesbarkeit deines Codes zu verbessern.


FAQ: Häufige Fragen

1. Frage
Kann ich die Gesamtbesucherzahl nachträglich auslesen?
Ja, du kannst eine Getter-Methode in deiner Klasse hinzufügen, um die Gesamtbesucherzahl zurückzugeben.

2. Frage
Wie kann ich die maximale Anzahl der Eingaben ändern?
Ändere den Wert in den Bedingungen, die die Anzahl der Messetage und die maximalen Besucherzahlen überprüfen, z.B. von 10 auf einen anderen Wert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige