CurrentRecord = RecordsetClone.RecordCount

Status
Niet open voor verdere reacties.

Vuurbok

Gebruiker
Lid geworden
20 feb 2010
Berichten
65
Hoi allemaal,

Ik heb een vraagje en dat is of jullie misschien weten hoe ik mijn volgende probleem kan oplossen. Als ik op txt_MRD_Date_Collect van de recente record van continuerend formulier klik om een popup-kalender op te roepen, dan werkt het zoals het hoort met de volgende VBA-code:

Code:
Private Sub Form_Current()
    If CurrentRecord = RecordsetClone.RecordCount Then
        Me.AllowEdits = True
        Me.AllowDeletions = True
        Me.txt_MRD_Date_Collect.OnClick = CalendarFor([txt_MRD_Date_Collect])
    Else
        Me.AllowEdits = False
        Me.AllowDeletions = False
        Me.txt_MRD_Date_Collect.OnClick = ""
    End If
End Sub

Maarrr als ik op bijvoorbeeld op "Escape" druk en dan nog een keer op txt_MRD_Date_Collect klik, dan werkt het niet meer om een popup-kalender nogmaals op te roepen. Weten jullie misschien wat ik verkeerd doe? Alvast hartelijk bedankt voor jullie moeite om mij te helpen! :D
 
Laatst bewerkt:
Terwijl ik er naar kijk, mag je de code ondertussen opmaken met de CODE knop ( # ) :)
 
Hoi OctaFish,

Gedaan zoals je mij geadviseerd had om de code te laten opmaken met de CODE-knop. Die zocht ik de hele tijd, maar had nooit geweten dat dat te herkennen was met #! :D
 
De gebeurtenis <Bij aanwijzen> wordt per record eenmaal afgevuurd; je zult dus minstens een keer voor- of achteruit moeten spoelen om hem nog een keer te kunnen gebruiken.
 
Door de code te verplaatsen naar een functie, en een extra gebeurtenis te maken op het betreffende tekstvak, kom je een heel eind. Iets als:

Code:
Private Sub Form_Current()
    Actief Me!txtStartDate.Name
End Sub

Code:
Private Sub txtStartDate_GotFocus()
    Actief Me!txtStartDate.Name
End Sub

Code:
Function Actief(ctl As String)
Dim rst As DAO.Recordset
Dim sFilter As String
    
    sFilter = "[Uitleen id]=" & Me.[Uitleen id]
    Set rst = Me.RecordsetClone
    
    If CurrentRecord = RecordsetClone.RecordCount Then
        Me.AllowEdits = True
        Me.AllowDeletions = True
        Me(ctl).OnClick = CalendarFor(Me(ctl))
    Else
        Me.AllowEdits = False
        Me.AllowDeletions = False
        Me(ctl).OnClick = ""
    End If
    
    rst.FindFirst sFilter
    If rst.NoMatch Then
        MsgBox "No entry found.", vbInformation
    Else
        Me.Bookmark = rst.Bookmark
    End If

End Function
 
Hoi OctaFish!

Bedankt voor je reakties! Ik ga het proberen wat je mij voorgesteld hebt. Ik laat je weten of het mij gelukt is. :D :D :D
 
Hoi OctaFish,

Waar moet ik die onderste formule neerzetten? En ik begrijp het niet helemaal waar die "uitleen id" voor bedoeld is? Klopt dat dat "txtStartDate" vervangen moet worden door "txt_MRD_Date_Collect" die wel in mijn database bekend is? :D
 
Lijkt mij logisch ;) Ik heb een voorbeeldje gemaakt op basis van een db die ik zelf gebruik. Veldnamen en namen van Tekstvelden moet je natuurlijk aanpassen aan je eigen situatie. Daarom gebruik ik altijd Me. om die objecten snel op te zoeken.
 
Dat is goed, ik zal het doen. Alleen vraag ik mij af waar ik die onderste (derde) formule moet neerzetten. Het is voor mij de eerste keer dat ik met zoiets (Function) te maken heb, vandaar mijn lekenvraag. :P

Dus als ik het goed begrepen heb van je, moet ik dus [Uitleen id] vervangen voor een veldnaam die gekoppeld is aan "txt_MRD_Date_Collect"? Wel een leuke en leerzame ervaring! Bedankt! :D
 
Kan; als je hem in een losse module zet, kun je de functie vanaf andere formulieren gebruiken. Is hij alleen voor één specifiek formulier bedoeld, dan kun je hem net zo goed bij dat formulier houden, want dan heb je alle formuliercode bij elkaar. Wat jij wilt dus :)
 
Het is volkomen duidelijk geworden voor me dat die funktie overal toepasbaar is afhankelijk waar ik het voor wil gebruiken. Hartelijk bedankt en ik ga al die formulies nu proberen toepassen en ik laat je weten of het mij gelukt is. :D
 
Hoi OcatFish,

Als ik je derde formule wil toepassen in een module, blijkt dat die funktie "Me" alleen toegepast kan worden in een "class module" speciaal voor formulieren. Maar dan werkt die funktie "Actief" niet meer. Maar is het dan wel mogelijk om die funktie "Me" te laten vervangen door de andere funktie? Ik heb ergens gelezen dat "Me" vervangen kan worden door "frm" en dan een extra formule bijzetten "Dim frm As Form". Maar blijkbaar doe ik het niet goed. Ik heb hier de aangepaste formules neergezet zodat je kan zien wat ik gedaan heb. Weet je misschien wat ik fout doe? :)

Code:
Private Sub Form_Current()
    CalendarActive Me.txt_MRD_Date_Collect.Name
    If CurrentRecord = RecordsetClone.RecordCount Then
        Me.AllowEdits = True
        Me.AllowDeletions = True
    Else
        Me.AllowEdits = False
        Me.AllowDeletions = False
    End If
End Sub

Code:
Private Sub txt_MRD_Date_Collect_GotFocus()
    CalendarActive Me.txt_MRD_Date_Collect.Name
End Sub

Code:
Function Actief(ctl As String)
Dim rst As DAO.Recordset
Dim sFilter As String
Dim frm As Form
    
    sFilter = "[MRD_Date_Collect]= '" & frm.txt_MRD_Date_Collect & "'"
    Set rst = frm.RecordsetClone
    
    If CurrentRecord = RecordsetClone.RecordCount Then
        frm.AllowEdits = True
        frm.AllowDeletions = True
        frm(ctl).OnClick = CalendarFor(frm(ctl))
    Else
        frm.AllowEdits = False
        frm.AllowDeletions = False
        frm(ctl).OnClick = ""
    End If
    
    rst.FindFirst sFilter
    If rst.NoMatch Then
        MsgBox "No entry found.", vbInformation
    Else
        frm.Bookmark = rst.Bookmark
    End If

End Function
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan