Access / VBA - Funktion mit For-Schleife und Auslesen von Formularfeldern

SonyXP

Lt. Commander
Registriert
Okt. 2005
Beiträge
1.731
Hallo CB-Gemeinde :)

Ich beschäftige mich auf der Arbeit zur Zeit mit einem kleinen Access / VBA Projekt. Für mich absolutes Neuland, da ich solchen Dingen bisher immer den Rücken gekeehrt habe ;)

Genutzt wird eine Datenbank zu der ich ein Formular erstellt habe. Auf diesem befinden sich unter anderem 12 kleine Felder, wo die Dauer eines Zeitraumes in Wochen stehen soll.
Diese Felder heißen "Wochen_Modul_1" bis "Wochen_Modul_12". Eine Funktion berechnet mittlerweile die Anzahl der Wochen und füllt die Zahlen in die entsprechenden Felder.

Nun möchte ich in einem weiteren Feld "Wochen_Gesamt" die anzahl aller anderen Felder (Wochen_Modul_1-12) summiert errechnen. Allerdings muss diese Berechnung so flexibel sein, dass sie bei Änderung eines dieser Felder automatisch neu summiert.

Mit folgendem Code versuche ich das zur Zeit:

Code:
Private function Berechne_WGesamt ()

Dim i, temp As Integer
temp=0

For i = 1 to 12
    if IsNULL (Wochen_Modul_i) then Next i
    temp=temp+Wochen_Modul_i
Next i

end Function


So - bevor jetzt einige die Hände überm Kopf zusammenschlagen - Ich bin Programmieranfänger ;)

Wie ihr sehr, möchte ich eine Funktion bilden, welche per Schleife die 12 Felder auf "NULL" überprüft und nur die addiert, welche nicht NULL sind.

Nur so ganz funktioniert das noch nicht :(

Meine Fragen nun:
Kann man den Zähler in Wochen_Modul_1 ... Wochen_Modul_12 <-- durch die Variable "i" überhaupt so ersetzen, sodass die Zahl jeweils den aktuellen Zählwert der Schleife wiederspiegelt?
Kann ich Formularfelder einfach mit ihrem Namen (also z.b "Wochen_Modul_1") innerhalb VBA so ansprechen, oder bedarf es einer anderen Variante?

Die Funktion soll den Wert von "temp" anschließend auch an übergeben können. (Sie wird an anderer Stelle etwa so aufgerufen "Wochen_Gesamt = Berechne_WGesamt() )

Ich habe schon über den Befehl "return" nachgelesen - demnach sollte ich den Wert mit "return temp" übergeben, blos erhalte ich dann schon eine Fehlermeldung im VBA Editor / Debugger direkt nach return "Anweisungsende erwartet".

Danke euch schonmal für jede Hilfe / Antworten :)

MfG
Sony
 
Hallo,
also so wird das ganze nichts,
erstmal kannst du die Formularfelder nicht nur mit ihrem Namen ansprechen, mit Formularfeldern meinst du bestimmt TextBox oder? Schau dir da am besten erstmal einiges in MSDN an:
http://msdn.microsoft.com/de-de/library/a8xd0bh0.aspx

Was du abfragen willst ist der Text (eine Eigenschaft) der TextBox ---> z.B.:
Code:
Dim x as String
x=TextBox.Text

Die Schleife und Variablenbezeichnung ist komplett daneben gegangen, das solltest dir nohmal in Ruhe anschauen (evtl. MSDN, Tutorials

EDIT: Doch noch ein bisschen mehr:

Das mit dem i in Wochen_Modul_i ist völliger quatsch, eine überprüfung auf 0 eigentlich unnötig da Addition von 0 deine Gesamtsumme nicht ändert.
Noch als kleiner Tipp, den Inhalt der TextBox 1-12 kannst du z.B. in einen Array speichern und dann die Werte über BspArr(i) ansprechen.

Die Variablen zu übergeben (übernehmen) ist dann nicht mehr viel Aufwand.
 
Zuletzt bearbeitet:
Vielen Dank für deine Verbesserungen :)

Das Überprüfen auf "NULL" habe ich deshalb eingebaut, weil beim Testen im Debugger immer eine Fehlermeldung bezüglich der Addition für die Felder kam, die leer und somit NULL waren.

Das mit dem Array (habe ich mir gerade mal etwas zu durchgelesen) sieht sehr elegant aus und ich werde gleich morgen früh auf diese Methode versuchen umzubauen :)

Aber rein interessehalber - könnte man die Nummerrierung der Textboxen denn mit einer Variable ersetzen und in einer Schleife ansprechen - und wenn ja, wie? Falls dir eine kurzes, einzeiliges Beispiel keine Mühe macht.

Ich habe schon "gegoogelt", aber da ich nicht weiß, wie man mein Vorhaben "fach-richtig" nennt, kein brauchbares Ergebnis gefunden.
 
SonyXP schrieb:
Aber rein interessehalber - könnte man die Nummerrierung der Textboxen denn mit einer Variable ersetzen und in einer Schleife ansprechen - und wenn ja, wie?
Da fällt mir jetzt auf die schnelle nichts vernünftiges ein.

SonyXP schrieb:
Das Überprüfen auf "NULL" habe ich deshalb eingebaut, weil beim Testen im Debugger immer eine Fehlermeldung bezüglich der Addition für die Felder kam, die leer und somit NULL waren.
Wahrscheinlich hattest du da Probleme mit dem Datentyp, kannst zum beispiel alle felder mit 0 initialisieren oder beim auslesen der Werte den Datentyp als Zahlenwert (int,long,double...) festlegen und vorerst mit 0 belegen.
Bei deiner Methode der Überprüfung würde ich überprüfen ob ein Zahlenwert vorhanden ist oder nicht. (

Achja, sorry war vorhin ein wenig in Eile, du kannst die Textbox auch nur mit ihrem Namen ansprechen, dann wird die Standard-Methode oder Eigenschaft verwendet. In deinem Fall also .Value (als Eigenschaft). Ich persönlich schreibe aber lieber das .value immer (meistens) mit hin, sonst kann das ganze mit der Zeit ganz schön unübersichtlich werden.
 
Wollte mich nur kurz zurückmelden und nochmals für deine Hilfe bedanken.

Ich habe es mit einem Array und einer For/Next Schleife gelöst, welche nach und nach die Felder des Arrays addiert :)
 
Zurück
Oben