Berekening aan de hand van geselecteerde gegevens

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

SW74

Nieuwe gebruiker
Lid geworden
1 sep 2015
Berichten
1
Goede middag

Ben op zoek naar een manier om in een formulier bepaalde cellen te selecteren en daar vervolgens een totaal uit te krijgen. Op het moment gaat het via een query maar wil het verder uitbreiden en vergemakkelen voor mezelf.
Het formulier is gebasserd op 1 tabel met de maandnamen en verkochte aantallen van die maanden. Zou het mogelijk zijn 12 additionele ja/nee kolommen toe te voegen en daar vervolgens de formule/VBA op baseren.
Ben niet zo'n ster in VBA:o om het maar zachtjes uit te drukken.

Hoop dat het een beetje duidelijk is.
 
Hoi,
voorbeeldje aub (zonder gevoelige gegevens)

Greetz
 
Ik denk dat je bedoelt om een query op te bouwen aan de hand van een aantal selectiemogelijkheden op een formulier, je kan dan je subformulier laten filteren met die query waardoor je dus oa kan slecteren op al dan niet aangevinkte zaken in bepaalde kolommen. Plak hieronder even een voorbeeldje van een query die ik vond op internet met een aantal mogelijkheden aangepast voor onze wachtlijst. Er zal wel een limiet op staan hoeveel criteria je kunt toevoegen maar je kan nog allerlei andere criteria items in die query opnemen zoals datumvelden, tekstvelden, numerieke velden, etc.... met die AND toevoeging (de niet gebruikte heb ik nu achter een ' gezet).

Code:
Public Sub cmdFilter_Click()
    'Purpose:   Build up the criteria string form the non-blank search boxes, and apply to the form's Filter.
    'Notes:     1. We tack " AND " on the end of each condition so you can easily add more search boxes; _
                        we remove the trailing " AND " at the end.
    '           2. The date range works like this: _
                        Both dates      = only dates between (both inclusive. _
                        Start date only = all dates from this one onwards; _
                        End date only   = all dates up to (and including this one).
    Dim strWhere As String                  'The criteria string.
    Dim lngLen As Long                      'Length of the criteria string to append to.
    Const conJetDate = "\#mm\/dd\/yyyy\#"   'The format expected for dates in a JET query string.
    
    '***********************************************************************
    'Look at each search box, and build up the criteria string from the non-blank ones.
    '***********************************************************************
    If Me.SlvKatzNietA = -1 Then
        strWhere = strWhere & "([Categorie] <> 'A') AND "
    End If
    If Me.SlvKatzNietAD = -1 Then
        strWhere = strWhere & "([Categorie] <> 'Ad') AND "
    End If
    If Me.SlvKatzNietAB = -1 Then
        strWhere = strWhere & "([Categorie] <> '[A/B]') AND "
    End If
    If Me.SlvKatzNietO = -1 Then
        strWhere = strWhere & "([Categorie] <> 'O') AND "
    End If
    If Me.SlvKatzVraagteken = -1 Then
        strWhere = strWhere & "([Categorie] <> '?') AND "
    End If
    If Me.SlvReligieuze = -1 Then
        strWhere = strWhere & "([Prioriteitreligieuze] = True) AND "
    End If
    If Me.SlvPersoneel = -1 Then
        strWhere = strWhere & "([Prioriteitpersoneel] = True) AND "
    End If
    If Me.Keuzerondje_Prior = -1 Then
        strWhere = strWhere & "([Prior] <> null) AND "
    End If
    If Me.Keuzerondje_Actief = -1 Then
        strWhere = strWhere & "([Act] = True) AND "
    End If
    
    If Me.Keuzerondje_Passief = -1 Then
        strWhere = strWhere & "([Pas] = True) AND "
    End If
    
    If Me.Keuzerondje_Geschrapt = -1 Then
        strWhere = strWhere & "([Geschrapt] = True) AND "
    End If
    
    If Me.Keuzerondje_opgenomen = -1 Then
        strWhere = strWhere & "([Opgenomen] = True) AND "
    End If
    
    If Me.Keuzerondje_tijdelijk_opgenomen = -1 Then
        strWhere = strWhere & "([tijdelijk_opgenomen] = True) AND "
    End If
    
    If Not IsNull(Me.Kzl_NrWachtlijst) Then
        strWhere = strWhere & "([Nr wachtlijst] Like """ & Me.Kzl_NrWachtlijst & "*"") AND "
    End If
    
    If Not IsNull(Me.Kzl_Jaartal) Then
        strWhere = strWhere & "([Datum aanvraag] Like ""*" & Me.Kzl_Jaartal & "*"") AND "
    End If
    
    If Not IsNull(Me.Kzl_Maandkeuze) Then
        strWhere = strWhere & "([Datum aanvraag] Like ""*" & Me.Kzl_Maandkeuze & "*"") AND "
    End If
    
    If Not IsNull(Me.Kzl_Geslacht) Then
        strWhere = strWhere & "([M/V] Like ""*" & Me.Kzl_Geslacht & "*"") AND "
    End If
    
    If Not IsNull(Me.Kzl_afdeling_een) Then
        strWhere = strWhere & "([1°Afdeling] = """ & Me.Kzl_afdeling_een & """) AND "
    End If
        
    If Not IsNull(Me.Kzl_afdeling_twee) Then
        strWhere = strWhere & "([2°Afdeling] = """ & Me.Kzl_afdeling_twee & """) AND "
    End If
    
    If Not IsNull(Me.Kzl_afdeling_drie) Then
        strWhere = strWhere & "([3°Afdeling] = """ & Me.Kzl_afdeling_drie & """) AND "
    End If
    
    If Not IsNull(Me.Kzl_prioriteit_gemeente) Then
        strWhere = strWhere & "([PrGem] = " & Me.Kzl_prioriteit_gemeente & ") AND "
    End If
    
    If Not IsNull(Me.Kzl_gemeente) Then
        strWhere = strWhere & "([BVWoonplaats] = """ & Me.Kzl_gemeente & """) AND "
    End If
    
    If Not IsNull(Me.Kzl_kamerkeuze_een) Then
        strWhere = strWhere & "([1°Kamerkeuze] = " & Me.Kzl_kamerkeuze_een & ") AND "
    End If
    
    If Not IsNull(Me.Kzl_kamerkeuze_twee) Then
        strWhere = strWhere & "([2°Kamerkeuze] = " & Me.Kzl_kamerkeuze_twee & ") AND "
    End If
    
    If Not IsNull(Me.Kzl_kamerkeuze_drie) Then
        strWhere = strWhere & "([3°Kamerkeuze] = " & Me.Kzl_kamerkeuze_drie & ") AND "
    End If
    
    If Not IsNull(Me.kzl_categorie) Then
        strWhere = strWhere & "([Categorie] = """ & Me.kzl_categorie & """) AND "
    End If
        If Me.Keuzerondje_KVC = -1 Then
        strWhere = strWhere & "([KVB_wachtlijst] = True) AND "
    End If
        If Me.Keuzerondje_KVC_OK = -1 Then
        strWhere = strWhere & "([KVB_wachtlijst_voldaan] = True) AND "
    End If
    
    'Another text field example. Use Like to find anywhere in the field.
    'If Not IsNull(Me.txtFilterMainName) Then
        'strWhere = strWhere & "([MainName] Like ""*" & Me.txtFilterMainName & "*"") AND "
    'End If
    
    'Number field example. Do not add the extra quotes.
    'If Not IsNull(Me.cboFilterLevel) Then
        'strWhere = strWhere & "([LevelID] = " & Me.cboFilterLevel & ") AND "
    'End If
    
    'Yes/No field and combo example. If combo is blank or contains "ALL", we do nothing.
    'If Me.cboFilterIsCorporate = -1 Then
       ' strWhere = strWhere & "([IsCorporate] = True) AND "
    'ElseIf Me.cboFilterIsCorporate = 0 Then
       ' strWhere = strWhere & "([IsCorporate] = False) AND "
    'End If
    
    'Date field example. Use the format string to add the # delimiters and get the right international format.
    'If Not IsNull(Me.txtStartDate) Then
     '   strWhere = strWhere & "([EnteredOn] >= " & Format(Me.txtStartDate, conJetDate) & ") AND "
    'End If
    
    'Another date field example. Use "less than the next day" since this field has times as well as dates.
    'If Not IsNull(Me.txtEndDate) Then   'Less than the next day.
     '   strWhere = strWhere & "([EnteredOn] < " & Format(Me.txtEndDate + 1, conJetDate) & ") AND "
    'End If
    
    '***********************************************************************
    'Chop off the trailing " AND ", and use the string as the form's Filter.
    '***********************************************************************
    'See if the string has more than 5 characters (a trailng " AND ") to remove.
    lngLen = Len(strWhere) - 5
    If lngLen <= 0 Then     'Nah: there was nothing in the string.
        msgbox "No criteria", vbInformation, "Nothing to do."
        'cmdReset_Click
    Else                    'Yep: there is something there, so remove the " AND " at the end.
        strWhere = Left$(strWhere, lngLen)
        'For debugging, remove the leading quote on the next line. Prints to Immediate Window (Ctrl+G).
        'Debug.Print strWhere
        
        'Finally, apply the string as the form's Filter.
        Me.[Sub_Frm_kamers].Form.Filter = strWhere
        Me.[Sub_Frm_kamers].Form.FilterOn = True
        Me.Txtaantal = Me.Sub_Frm_kamers.Form.Recordset.RecordCount
    End If
End Sub
 
Ben op zoek naar een manier om in een formulier bepaalde cellen te selecteren en daar vervolgens een totaal uit te krijgen. Op het moment gaat het via een query maar wil het verder uitbreiden en vergemakkelen voor mezelf.
Ik denk dat elke (zeker de de gevorderde Access gebruiker) het met me eens zal zijn dat de veruit makkelijkste manier is om het juist wél in een query te doen. Wat jou doet denken dat het makkelijker kan met VBA wil ik dus eigenlijk wel weten :). Overigens heb je het over 'cellen' dus de kans bestaat dat je de informatie uit Excel haalt. En dan is het wellicht wel makkelijker om een recordset te maken en die te bewerken. Maar ook dan zou ik toch eerst kijken of de Excel niet gewoon gekoppeld kan worden, dan werkt hij weer als een normale tabel met records en velden.
De code van Johan is duidelijk niet van mij; ik doe dat toch heel anders :).
 
Vele wegen leiden naar Rome Octafish en je weet ondertussen wel dat ik niet altijd de kortste weg neem maar de eerste gereedste die ik kan aanpassen aan de wensen van onze dames en werkend krijg blijf gebruiken :confused: , hoe zou je de code van nonkel internet die ik gebruik bv vereenvoudigen of veranderen?
 
Vele wegen leiden naar Rome Octafish en je weet ondertussen wel dat ik niet altijd de kortste weg neem maar de eerste
Dat was mij inderdaad al bekend :D.
Ik ben in beginsel een groot voorstander van herkenbare namen, maar in geval van repeterende objecten die samen moeten werken kies ik tegenwoordig voor uniforme naamgeving met een volgnummer. In de Tag (Extra Info) van de objecten zet ik dan de veldnaam waar het om gaat. Vervolgens kun je in een For i = 1 To ## lus kun je dan alle objecten uitlezen en m.b.v. de tag en de value de filterstring opbouwen. Je kunt dan met heel weinig code volstaan. En bij een extra veld is het een kwestie van het object de juiste naam geven en de tag vullen, dan werkt de procedure gelijk goed en hoef je niks meer aan te passen. Veel flexibeler dus.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan