Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Bernie110 am Dezember 01, 2010, 11:14:17

Titel: Public Sub aus anderem Form aufrufen
Beitrag von: Bernie110 am Dezember 01, 2010, 11:14:17
Hallo,

ich hab 2 Forms

HF und UFO

im Ufo gibt es eine PublicSub die ich gerne aus dem HF aufrufen möchte...

Die Public Sub enthält eine komplizierte Berechnung

ist das möglich


habs so versucht , funzt aber mal wieder net  ;D

' Frachtpfl Gewicht in Masse_ufo berechnen in DT Erfassung übernehmen
    '---------------------------------------------------------------------
    If Me!ERFASSUNG_Colli.Form.Recordset.RecordCount > 0 Then
        Dim rs As DAO.Recordset
        Set rs = Me!ERFASSUNG_Colli.Form.RecordsetClone
        Do Until rs.EOF
        rs.Edit

        '---------------------------------------------
        If rs!DTNr = Me.LfdNr Then

                       Call Fpfl_Gewicht_Berechnung   ' das ist die Public Sub
   
        End If
        '--------------------------------------------
   
    rs.Update
    rs.MoveNext
    Loop

    rs.Close
    Set rs = Nothing


    Me!ERFASSUNG_Colli.Form.Requery
   
    End If


Danke für eure Antworten

Gruss
Bernie
Titel: Re: Public Sub aus anderem Form aufrufen
Beitrag von: Jonny am Dezember 01, 2010, 11:23:49
Hallo,

wenn dabei nur ein berechnetes Gewicht zurückgegeben wird könnte man vieleicht besser eine Funktion
davon machen.
Dann Übergabe der Parameter beim Funktionsaufruf.

Gruß

Johann
Titel: Re: Public Sub aus anderem Form aufrufen
Beitrag von: DF6GL am Dezember 01, 2010, 12:23:38
Hallo,

außerdem dann die Funktion in ein allgemeines Modul (Datenbankfenster/Module ,nicht Klassenmodul) als Public Function verfrachten und auch im UFO aufrufen.
Titel: Re: Public Sub aus anderem Form aufrufen
Beitrag von: Bernie110 am Dezember 01, 2010, 16:26:28
Hallo Zusammen,

hab jetzt schon ein bisschen probiert. Bekomm es aber nicht hin.


das wäre der Code

If Me.TU_OFFERTE > 0 Then


Dim Check_GB_Fpfl As Long  ' ja

Dim Check_EP_Fpfl As Long ' ja

Dim Check_EP_Höhe As Long ' ja
Dim Check_EP_alternat As Long

Dim Check_QBM_Fpfl As Long ' ja
Dim Check_LM_Fpfl As Long ' ja

Dim Check_EW_Fpfl As Long ' ja

Dim Check_EW_60 As Long ' ja
Dim Check_EW_bis_120 As Long ' ja
Dim Check_EW_Über_120 As Long ' ja



'Gitterbox  Check_GB_Fpfl  ' ja


'------------------------------------------------------------------------------------------------------------
        Check_GB_Fpfl = Me.Sperrigkeit_GB * Me.Anzahl_Tausch_GB
       

' Europaletten Check_EP_Fpfl
'------------------------------------------------------------------------------------------------------------
     If Me.Anzahl_Tausch_EP > 0 Then
     
       If Me.Höhe_Cm > 140 Then
        Check_EP_Höhe = 1
        Else
        Check_EP_Höhe = 2
       End If
       

   
        If Check_EP_Höhe = 1 Then  ' höher als 140
               
             'Check_EP_alternat
                       
              Check_EP_alternat = Me.Sperrigkeit_Qbm * Me.Qbm
             
              If Check_EP_alternat > Me.Sperrigkeit_EP_über_140 Then
             
                Check_EP_Fpfl = Me.Sperrigkeit_EP_über_140
                Else
                Check_EP_Fpfl = Check_EP_alternat
              End If
           

       
        End If
       
        If Check_EP_Höhe = 2 Then ' kleiner als 140
               
            If Me.Kg > Me.Sperrigkeit_EP_bis_140 Then
           
                Check_EP_Fpfl = Me.Kg
                Else
                Check_EP_Fpfl = Me.Sperrigkeit_EP_bis_140
            End If
       

        End If

     End If
' QBM Check_QBM_Fpfl
'------------------------------------------------------------------------------------------------------------
    Check_QBM_Fpfl = Me.Qbm * Me.Sperrigkeit_Qbm
   

' LM  Check_LM_Fpfl
'------------------------------------------------------------------------------------------------------------
    If Me.LM > Me.LM_Ab Then
   
    Check_LM_Fpfl = Me.LM * Me.Sperrigkeit_LM
    Else
    Check_LM_Fpfl = 0
    End If
   

' EW  Check_EW_Fpfl       Check_EW_60        Check_EW_bis_120      Check_EW_Über_120
'------------------------------------------------------------------------------------------------------------
   
    If Me.Anzahl_Tausch_EP > 0 Or Me.Anzahl_Tausch_GB > 0 Then
   
    Check_EW_Fpfl = 0
   
        Else
       
        ' Check_EW_60
       
            If Me.Länge_Cm < 60 And Me.Breite_Cm < 80 Then
           
                If Me.Sperrigkeit_EW_bis_60x80 > 0 Then
                 Check_EW_Fpfl = Me.Sperrigkeit_EW_bis_60x80 * Me.Anzahl_Cll
                Else
                 Check_EW_Fpfl = Me.Kg
                End If
            End If
               
        ' Check_EW_bis_120
       
            If Me.Länge_Cm <= 120 And Me.Breite_Cm <= 80 Then
           
                Check_EW_Fpfl = Me.Sperrigkeit_EW_bis_120x80 * Me.Anzahl_Cll
            End If
           
         ' Check_EW_Über_120
       
            If Me.Länge_Cm > 120 And Me.Breite_Cm > 80 Then
           
                Check_EW_Fpfl = Me.Sperrigkeit_EW_über_120x80 * Me.Anzahl_Cll
            End If
                       

   End If
   
   
' Frachtpflitiges Gewicht Berechnung  Me.kg  Check_EP_Fpfl Check_GB_Fpfl Check_EW_Fpfl Check_LM_Fpfl Check_QBM_Fpfl
'------------------------------------------------------------------------------------------------------------

Dim Vergleich_EP_GB As Long
Dim Vergleich_QBM_LM As Long
Dim Vergleich_Kg_EW As Long

Dim Check_All As Long

        'Vergleich_EP_GB
       
            If Check_EP_Fpfl > Check_GB_Fpfl Then
           
                Vergleich_EP_GB = Check_EP_Fpfl
            Else
                Vergleich_EP_GB = Check_GB_Fpfl
            End If
           
       
        'Vergleich_QBM_LM
       
            If Check_QBM_Fpfl > Check_LM_Fpfl Then
                Vergleich_QBM_LM = Check_QBM_Fpfl
            Else
                Vergleich_QBM_LM = Check_LM_Fpfl
            End If

       'Vergleich_Kg_EW
           
            If Me.Kg > Check_EW_Fpfl Then
                Vergleich_Kg_EW = Me.Kg
            Else
                Vergleich_Kg_EW = Check_EW_Fpfl
            End If
   
           
' Check_All
If Vergleich_EP_GB > Vergleich_QBM_LM Then
    Check_All = Vergleich_EP_GB
Else
    Check_All = Vergleich_QBM_LM
End If



  If Check_All > Vergleich_Kg_EW Then
   Me.Frachtpfl_Gewicht = Check_All
  Else
   Me.Frachtpfl_Gewicht = Vergleich_Kg_EW
  End If

 
End If


Könnt Ihr mir hierbei helfen und daraufs eine Funktion basteln ?

Der Code wird im Formular ERFASSUNG_Colli_Matrix ausgeführt.
Dieses Formular basiert auf die Tabelle ERFASSUNG_Colli

Danke für eure Hilfe

Gruss
Bernie
Titel: Re: Public Sub aus anderem Form aufrufen
Beitrag von: DF6GL am Dezember 01, 2010, 16:44:59
Ähhh,

also ich nicht, muß Schnee schippen..   ;D
Titel: Re: Public Sub aus anderem Form aufrufen
Beitrag von: Bernie110 am Dezember 01, 2010, 16:48:02
@ Franz  Öhm also wenn du schon dabei bist, komm mal kurz nach München, kannst da gerne weiter machen  ;D

Bzgl der Funktion ...

Die hat noch zeit , vll mal bei Gelegenheit.. wäre aber schon nicht schlecht wenn ich das zum Laufen bekäme

Gruss
Bernie
Titel: Re: Public Sub aus anderem Form aufrufen
Beitrag von: DF6GL am Dezember 01, 2010, 16:56:28
Hallo,

naja, kann mich beherrschen  ;D


Prinzipiell:

Lagere den Code in ein Standardmodul als Public Function aus.  Die "ME-Referenzen" ersetzt Du durch entspr. Argumente der Funktion. Beim Aufruf der Funktion werden diese "ME-Referenzen" als Parameter übergeben.

Das bekommst Du schon hin.   ;)
Titel: Re: Public Sub aus anderem Form aufrufen
Beitrag von: Bernie110 am Dezember 01, 2010, 17:11:07
@Franz  ;D

Sorry ich versteh nur Bahnhof.

ZitatME-Referenzen" ersetzt Du durch entspr. Argumente der Funktion

Ok und wie sieht das dann aus ???

Sorry hab so etwas noch nie gemacht

gruss Benrie
Titel: Re: Public Sub aus anderem Form aufrufen
Beitrag von: DF6GL am Dezember 01, 2010, 17:19:53
Hallo,

nein , unter "Me-Referenzen" meinte ich die Angabe der Form-Steuerelemente,


z. B.

In einem Standardmodul:
Public Function  fktMeineFunktion (a as String, b as Long) as long  'a und b sind die Funktionsargumente
Select case a
Case "Hallo"
fktMeineFunktion=b*10
Case "Bello"
fktMeineFunktion=b*20
Case Else
fktMeineFunktion=0
end Select
End Function


in einer Ereignisprozedur, wo auch immer:


Sub Form_Current()
Me!txtErgebnis =fktMeineFunktion (nz(Me!txtTextfeld1,""),  nz(Me!txtZahlenfeld1,0))   'hier werden die "Me-Referenzen" als Parameter übergeben
End Sub



Auf
Titel: Re: Public Sub aus anderem Form aufrufen
Beitrag von: Bernie110 am Dezember 02, 2010, 08:12:36
Guten Morgen,

danke Franz.  Das war mir leider etwas zu auwändig :-)
Zumal ich das echt nicht 100 %ig checke

Habs jetzt anderes gelöst.

Habe nun ein UFO mit mit den zu bearbeitenden Daten mit meinem HF verknüpft
Diese DS bearbeite ich mit DAO.Recordset wie u.g. und den BerechnugnsCode habe ich auch eingführt.

Das ist mit Sicherheit nicht die eleganteste Lösung, zumal ich mich ständig Frage wie sich die Geschwindigkeit
dadurch verhält.

Wieviele UFOs die auf Abfragen basieren ferträgt so ein Formurlar ? ( ps oder muss ich neue Frage in einem neuen Posting stellen )

Gruss
bernie
Titel: Re: Public Sub aus anderem Form aufrufen
Beitrag von: DF6GL am Dezember 03, 2010, 11:20:12
Hallo,

"aufwändig"  ???


vermutlich ist Deine Lösung (zumindest auf Dauer) eher schwieriger zu behandeln.


Ich blicke aber ja nicht auf die Hintergründe...  ;)

Die Frage nach dem "Wieviel" kann ich nicht so einfach beantworten.. Willst Du mehrere Ufo-Steuerelemente parallel platzieren, oder willst Du einem UFO-St.-El. verschiedene Formualre zuweisen?

Du kannst natürlich (und vielleicht besser, weil andere Thematik) einen neuen Thread dazu aufmachen.