hoogste waarde uit een aantal tekstvakken.

  • Onderwerp starter Onderwerp starter Roy88
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Roy88

Gebruiker
Lid geworden
23 feb 2015
Berichten
5
Hallo,

na veel vallen en opstaan is het mij gelukt om de informatie in verschillende tekstvakken te gebruiken in berekeningen als =[tekst1]/[tekst2]*[tekst3], en dit weer te geven in een ander tekstvak.

het volgende struikelblok is de hoogste waarde weergeven. bijv:
tekst7 t/m 12 hebben verschillende waardes.
de hoogste waarde wil ik weergegeven hebben in een apart tekstvak welke later weer opgeslagen wordt in een tabel.
ik heb alleen geen idee hoe ik dit voor elkaar kan krijgen.

weet iemand hoe dit wel moet?

gr.
Roy
 
Uit een reeks de hoogste waarde ophalen doe je met de functie MAX. die werkt niet anders als in Excel, alleen geef je natuurlijk veldnamen op en geen cellen.
Overigens krijg ik spontaan de rillingen als ik lees dat die waarde opgeslagen moet worden in een andere tabel? Je wilt de database toch wel genormaliseerd houden? Waarom zou je dan waarden dubbel gaan opslaan?
 
Helaas is de functie MAX voor het ophalen van de hoogste waarde uit een tabel/query.
Ik ben specifiek op zoek naar de hoogste waarde in verschillende tekstvakken die handmatig ingevoerd worden naar mate het proces verder verloopt. deze waardes worden niet opgeslagen in een tabel waardoor ik ze ook niet op kan vragen. de hoogste waarde wordt uiteindelijk WEL opgeslagen in een tabel en is de waarde die nodig is voor referentiemateriaal voor het volgende proces.
 
Dan zit er weinig anders op dan een eigen functie te maken. Bijvoorbeeld m.b.v. een onafhankelijke recordset. Krijg je iets als:
Code:
Private Sub Tekst0_Change()
    MsgBox MaxBerekenen
End Sub
Deze code zet je bij alle tekstvakken die je mee wilt nemen in de berekening. In mijn voorbeeldje heb ik 5 tekstvakken gemaakt die worden ingevuld. Die zie je terug in de eigenlijke functie.

Code:
Function MaxBerekenen() As Long
Dim arr As Variant
''Dim rst As ADODB.Recordset
Dim rst As Object
Dim i As Integer
    Me.Tekst12.SetFocus
    arr = Array(Nz(Me.Tekst0), Nz(Me.Tekst2), Nz(Me.Tekst4), Nz(Me.Tekst6), Nz(Me.Tekst8), Nz(Me.Tekst10))
    
''    Set rst = New ADODB.Recordset
    Set rst = CreateObject("ADODB.recordset")
    With rst
        .Fields.Append "Getal", adInteger
        .Open
        For i = LBound(arr) To UBound(arr)
            .AddNew
            rst!Getal = arr(i)
            .Update
        Next i
        .Sort = "Getal DESC"
        .MoveFirst
        MaxBerekenen = .Fields(0).Value
    End With
    Set rst = Nothing

End Function
Ik heb er 2 varianten in gezet; met Early Binding (is nu uitgeschakeld) en met Late Binding. Als je Early binding wilt gebruiken moet je een ADO bibliotheek aanzetten, anders kun je de Late binding variant gebruiken.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan