Zoekfunctie in vergrendelde velden

Status
Niet open voor verdere reacties.

handyhanky

Gebruiker
Lid geworden
12 jan 2010
Berichten
24
Beste helpers,
In een accessformulier met memoveld wil ik zoeken naar een willekeurig woord. Dit woord moet door de gebruiker kunnen worden opgegeven.
Access heeft een zoekfunctie (met dat verrekijkertje). Via VBA kom ik er ook wel uit.
Nu het probleem:
het memoveld is vergrendeld want wijzigingen wil ik voorkomen. Nu werken de zoekfuncties niet meer!
Iemand een idee om dit op te lossen?
 
Als je de macro kunt maken om te zoeken, dan is een kleine aanpassing genoeg: hef voordat je gaat zoeken eerst de beveiling van het veld op, voer dan de zoekactie uit en herstel aan het eind van de procedure de beveiling weer.
 
Dit had ik al bedacht en het werkt gedeeltelijk.
De eerste zoekactie gaat goed. Maar als je dan "volgende" klikt is het veld inmiddels weer vergrendeld.

Zo heb ik het nu:

Me.mem_Rapportmemo.Enabled = True
Screen.PreviousControl.SetFocus
DoCmd.RunCommand acCmdFind
Me.mem_Rapportmemo.Enabled = False
 
Met <Volgende> bedoel je neem ik aan een aparte knop die het volgende record zoekt? Of dezelfde knop? Dat laatstste zou eigenlijk niet kloppen dan, want je zet Enabled inderdaad netjes uit en aan. Dat moet dan uiteraard ook bij de knop <Volgende> gebeuren.
 
Inderdaad. Nu roep ik het standaard zoekscherm van Access op met acCmdFind, zoek het gewenste woord, dat wordt gevonden, en de knop "Volgende" op dit zoekscherm werkt dan niet meer. Ik zou dus het zoekscherm moeten vermijden en er zelf een maken. Bijvoorbeeld een formulier met een inputbox voor input van het gewenste woord en een eigen zoekknop. Dat krijg ik niet voor elkaar.
 
Om te zoeken kun je gewoon een knop maken met een wizard. Die wizard zoekt op basis van een Recordsetclone, en kun je simpel uitbreiden met een zoekopdracht voor het volgende record. Een beetje spelen met de code dus. Kijk ook in de Help functie voor de juiste syntax. Het zoekscherm zou ik verder links laten liggen.
 
Nou Michel je hebt me op het volgende idee gebracht. Met deze oplossing is het irrelevant of een veld vergrendeld is of niet.

Mooie oplossing al zeg ik het zelf.

Private Sub KnopZoeken_Click()

Dim r As Recordset
Dim strZoekwoord As String
Dim strZoeken As String
Dim strZoekcriteria As String

strZoekwoord = InputBox("Invoer", "Welk woord wilt u zoeken?")

strZoeken = "*" & strZoekwoord & "*"
strZoekcriteria = "memMijnmemo like """ & strZoeken & """"

Set r = Me.RecordsetClone
r.FindFirst strZoekcriteria
Me.Bookmark = r.Bookmark

If r.NoMatch Then
MsgBox "'" & strZoekwoord & "' werd niet gevonden.", vbExclamation, "Helaas"
Exit Sub
End If

verderzoeken:
If MsgBox("Kies", vbYesNo, "Verder zoeken naar " & strZoekwoord & "?") = vbYes Then
r.FindNext strZoekcriteria
Me.Bookmark = r.Bookmark

If r.NoMatch Then
MsgBox "'" & strZoekwoord & "' werd niet meer gevonden.", vbExclamation, "Helaas"
Exit Sub
End If

GoTo verderzoeken
Else
Set r = Nothing
Exit Sub
End If


End Sub
 
En het ene idee leidt tot het andere: door er een functie te maken, kun je de zoekfunctie vanaf elk willekeurig tekstveld vanaf elk willekeurig formulier gebruiken ;)
Deze code hang je achter een zoekknop op een formulier:

Code:
Private Sub cmdZoeken_Click()
Dim sObj As String
    sObj = Screen.PreviousControl.ControlSource
    Call TekstZoeken(sObj, Me)
End Sub

En dit is de functie:
Code:
Function TekstZoeken(Veld As String, frm As Form)

Dim r As Object
Dim sQ As String, strZoekwoord As String, strZoeken As String, strZoekcriteria As String

    If InStr(1, Veld, " ") > 0 Then Veld = "[" & Veld & "]"
    sQ = Chr(34)
    strZoekwoord = InputBox("Invoer", "Welk woord of getal wilt u zoeken?")
    If IsNumeric(strZoekwoord) Then
        strZoeken = strZoekwoord
        strZoekcriteria = Veld & " = " & strZoeken
    Else
        strZoeken = "*" & strZoekwoord & "*"
        strZoekcriteria = Veld & " LIKE " & sQ & strZoeken & sQ
    End If
    
    Set r = frm.RecordsetClone
    r.FindFirst strZoekcriteria
    frm.Bookmark = r.Bookmark
    
    If r.NoMatch Then
        MsgBox "'" & strZoekwoord & "' werd niet gevonden.", vbExclamation, "Geen treffer!"
        Exit Function
    End If
    
VerderZoeken:
    Do Until r.NoMatch
        If MsgBox("Doorgaan naar volgende record?", vbYesNo, "Verder zoeken naar " & strZoekwoord & "?") = vbYes Then
            r.FindNext strZoekcriteria
            frm.Bookmark = r.Bookmark
        Else
            Set r = Nothing
            Exit Function
        End If
    Loop
    MsgBox "'" & strZoekwoord & "' werd niet meer gevonden.", vbExclamation, "Helaas, niks meer gevonden!"
    Exit Function

End Function
Er zit nog geen check in op het type object dat je als basis gebruikt; een Keuzelijst zal denk ik niet werken. Maar op tekstvelden met tekst of getallen werkt hij prima.
 
Mag je 'm nog op Opgelost zetten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan