VBA - Verbindung zweier Prozeduren

ratzraputz

Grünschnabel
Hallo,
mein Anliegen betrifft das Verknüpfen zweier Prozeduren, d.h. ich habe in einem Formular eine Objektgruppe „Glättungsparameter“, bei der der Anwender den jeweiligen Typ auswählen kann (0.2, 0.3, bis 0.7). Diese Gruppe wird im Code-Generator mit „Rahmen27_Click()“ bezeichnet. Und einen Button "GO", hinter dem die komplette Berechnung einer Formel hinterlegt ist. Nun möchte ich die Auswahl, die der jeweilige Anwender in der Objektgruppe getroffen hat, mit der Prozedur verbinden.
Der Quellcode für die Objektgruppe müsste so ausschauen:

Private Sub Rahmen27_Click()
Dim dblGlaettungsparameter As Double
If dblGlaettungsparameter = 1 Then
dblGlaettungsparameter = 0.2
ElseIf dblGlaettungsparameter = 2 Then
dblGlaettungsparameter = 0.3
ElseIf dblGlaettungsparameter = 3 Then
dblGlaettungsparameter = 0.4
ElseIf dblGlaettungsparameter = 4 Then
dblGlaettungsparameter = 0.5
ElseIf dblGlaettungsparameter = 5 Then
dblGlaettungsparameter = 0.6
ElseIf dblGlaettungsparameter = 6 Then
dblGlaettungsparameter = 0.7
End If
End Sub

Dürfte soweit auch stimmen.

Dann versuche ich diese Prozedur natürlich mit der Berechnung zu verknüpfen. Anstelle der Zahl alpha=0.3, schreiben ich (hier nur ein Ausschnitt aus dem Berechnungsquellcode:

alpha = Forms!["frm_0_1_Eingabe_FB"]![Rahmen27_Click] das ist der Befehl, glaube ich; hab ich zumindest so gefunden. aber er sagt mir immer, dass er das Formular nicht finden kann?
For index = 2 To anzahl
FBeg1(index) = alpha * FBsb(index) + (1 - alpha) * FBeg1(index - 1)
Next index

Stimmt "Forms!["frm_0_1_Eingabe_FB"]![Rahmen27_Click] " dieser Befehl?
Für jegliche Vorschläge bin ich sehr dankbar.
 
Zvoni hat Recht, wenn er sagt das Methoden eines Formulars erst dann verwendet werden können, wenn das Formular zuvor geladen worden ist.

Methoden, die nicht nur im Formular ihre Gültigkeit haben sollen, müssen öffentlich sein. Dazu dient das Schlüsselwort Public, das sich in der Funktionssignatur wiederfindet. Siehe z.B. alpha im Formular frm_0_1_Eingabe_FB.

Hier nun mein Lösungsvorschlag:

Im Formular Formular frm_0_1_Eingabe_FB steht folgender Code
Code:
Public Function alpha() As Double
    Dim dblGlaettungsparameter As Double
    
    Select Case Me.Rahmen27.Value
        Case 1: dblGlaettungsparameter = 0.2
        Case 2: dblGlaettungsparameter = 0.3
        Case 3: dblGlaettungsparameter = 0.4
        Case 4: dblGlaettungsparameter = 0.5
        Case 5: dblGlaettungsparameter = 0.6
        Case 6: dblGlaettungsparameter = 0.7
        Case Else
            Err.Raise Number:=vbObjectError + 1, Description:="Ungültige Option für Glättungsparameter!"
    End Select
    
    alpha = dblGlaettungsparameter

End Function

Private Sub GO_Click()
    Me.Visible = False
End Sub

In einem Standardmodul befindet sich folgender Code.

Code:
Sub Berechnung()
On Error GoTo Err_Exit
    Dim frm As Access.Form
    Dim alpha As Double
    Dim FBsb
    Dim FBeg1() As Double
    Dim Index%
    Dim sText$

    FBsb = Array(1.5, 2.5, 3.5)
    ReDim FBeg1(LBound(FBsb) To UBound(FBsb))

    DoCmd.OpenForm FormName:="frm_0_1_Eingabe_FB", WindowMode:=acDialog
    Set frm = Forms("frm_0_1_Eingabe_FB")
    
    Do While frm.Visible
        DoEvents
    Loop
                
    alpha = frm.alpha
    
    DoCmd.Close acForm, frm.Name
    
    FBeg1(LBound(FBeg1)) = 0
    For Index = LBound(FBsb) + 1 To UBound(FBsb)
        FBeg1(Index) = alpha * CDbl(FBsb(Index)) + (1 - alpha) * FBeg1(Index - 1)
        sText = sText & FBeg1(Index) & vbLf
    Next Index
    
    Debug.Print sText
    MsgBox sText, vbInformation, "Ergebnis"
        
Sub_Exit:
    Exit Sub
Err_Exit:
    MsgBox Err.Description, vbInformation, "ERROR"
    Resume Sub_Exit
End Sub


Die Prozedur Berechnung kann z.B. mit Hilfe eines Makros ausgeführt werden.
Das Makro können Sie z.B. mit einer Symbolschaltfläche verknüpfen.
 
Zurück