Search as you type afterupdate error

Status
Niet open voor verdere reacties.

Powerblade

Gebruiker
Lid geworden
21 mrt 2008
Berichten
60
Hallo,

Heb een combobox met Search as you type ( vba )... Bij afterupdate ( setfocus ) krijg ik melding: U kunt alleen verwijzen naar een eigenschap of methode voor een besturingselement als het besturingselement de focus heeft.

Nou heb ik her en der geinformeerd. Het zou iets met .text te maken hebben maar heb al verschillende dingen geprobeerd, maar kom er niet uit.

Hier is de werkende code ( search as you type combo):
Code:
Private Sub lala_Change()

Dim strText As String, strFind As String, i, strSQL As String

strText = Me.lala.Text

If Len(Trim(strText)) > 0 Then
strFind = "NaamProduct Like '"
    For i = 1 To Len(Trim(strText))

If (Right(strFind, 1) = "*") Then
    trFind = Left(strFind, Len(strFind) - 1)
        End If

    strFind = strFind & "*" & Mid(strText, i, 1) & "*"
    Next
    strFind = strFind & "'"

Me.lala.RowSource = strSQL

Else

strSQL = "SELECT Producten.ProductId, Producten.NaamProduct, [Prijsex]*1.21 AS Prijsincl, Producten.Prijsex, IIf([Klantid] Is Null,producten!korting,poafatih!korting) AS Kortingg " _
& " FROM Producten LEFT JOIN poafatih ON Producten.ProductId = poafatih.productid " _
& " WHERE (((poafatih.Klantid) Is Not Null Or (poafatih.Klantid) Is Null)) " _
& " ORDER BY Producten.ProductId, Producten.NaamProduct, Producten.Prijseenheid, poafatih.[prijs op afspraak];"
Me.lala.RowSourceType = "Table/Query"
Me.lala.RowSource = strSQL
Me.Recalc

End If

Me.lala.Dropdown

End Sub

En de afterupdate:

Code:
Private Sub lala_AfterUpdate()

Me![Prijseenheid] = Me![lala].Column(3)
Me![Tekst17] = Me![lala].Column(3)
Me.Hoeveelheid.SetFocus
End Sub

Ben benieuwd:confused: kom er zelf niet uit....

alvast bedankt!:thumb:
 
Iemand enig idee ?????

Het is erg lastig, kom er niet uit en de foutmelding blijft... :o:confused:
 
hierbij the sample.

Als je database open dan kom formulier tevoorschijn. Daar heb ik 2 combo 's:

1) zoeken op product nummer, die werkt goed.
2) zoeken op product naam. Search as you type code zit daar achter. En daar komt die error. Nogmaals, als the setfocus bij afterupdate event gezet wordt, dan komt error. Haal ik die regel weg, dan kan ik met de muis niet selecteren. dropdown komt steeds tevoorschijn na elke klik. Als je kijkt dan snap je wat ik bedoel is een beetje moeilijk uit te leggen.

Alvast bedankt voor de moeite.. :thumb:Bekijk bijlage offerte2.part01.rarBekijk bijlage offerte2.part02.rarBekijk bijlage offerte2.part03.rar
 
Zet eens juist achter je Private Sub lala_AfterUpdate() het volgende (om je focus te verplaatsen naar je subformulier)
Code:
Forms![Orders]![subformulier detailgegevens fatih].SetFocus

Dan lijkt hetgeen je vraagt te gebeuren zonder foutmelding en waarom heb je autouitbreiden van die lijst afgezet?

NB: ik zou de veldnamen, comboboxnamen en zo meer wat normaliseren en je procedures hebben geen foutcontrole
En ook even uw VBA code compileren dan zie je bv dat de private Sub Keuzelijst_met_invoervak23_Change() sub je ook mag verwijderen uit je VBA module aangezien die keuzelijst niet meer bestaat. Dit geldt ook voor de Bijschrift186_Click procedure
 
bedankt voor je advies. Autouitbreiden uitgezet , want de klant wil zien tijdens het schrijven welke producten die criteria bevat. ten tweede heb je helemaal gelijk, moet een schoonmaak in VBA doen :):o

Daarnaast, jouw suggestie blijft dezelfde fout geven en bij foutopsporing wordt deze regel geselecteerd:

Private Sub lala_Change()


Dim strText, strFind As String, i, strSQL As String

=>>> strText = Me.lala.Text <<<=


If Len(Trim(strText)) > 0 Then
strFind = "NaamProduct Like '"

Ik gebruik acces 2003..
 
Laatst bewerkt:
Ik heb wel jouw oorspronkelijke regel Me.Hoeveelheid.SetFocus uitgevinkt met een '.
Code ziet er zo uit
Code:
Private Sub lala_AfterUpdate()
      Forms![Orders]![subformulier detailgegevens fatih].SetFocus
      Me![PrijsEenheid] = Me![lala].Column(3)
      Me![Tekst17] = Me![lala].Column(3)
      'Me.Hoeveelheid.SetFocus
End Sub
 
Dank je,

heb de code aangepast, zoals je voorbeeld, nu is de erro verdwenen, maar, het andere stukje van het probleem is nog niet opgelost.
nm:

"2) zoeken op product naam. Search as you type code zit daar achter. En daar komt die error. Nogmaals, als the setfocus bij afterupdate event gezet wordt, dan komt error.(deze probleem lijkt nu opgelost te zijn ) Haal ik die regel weg, dan kan ik met de muis niet selecteren. dropdown komt steeds tevoorschijn na elke klik. Als je kijkt dan snap je wat ik bedoel is een beetje moeilijk uit te leggen."

Dus, nu type ik bijvoorbeeld bio in en alle producten met bio komen tevoorschijn. Als ik dan met muis op het juiste product klik, dan sprint het niet naar het volgende veld. hij blijft op dezelfde combo, maar die lijst is dan weg en de product die ik geklikt had, is de enige product die nu geklikt kan worden in de dropdown list. klik ik weer op die enige product in de dropdown list, weer hetzelfde resultaat...

Maar als ik ipv muisklik op enter druk, dan wordt het product gekozen, en vervolgens springt het naar de volgende veld. Deze constructie / deeloplossing, had ik voor mijn post hier ook al.

met ENTER en TAB zijn er geen enkel probleem. Probleem begint echter met muisklik. Of er een setfocus in de afterupdate event geplaatst is of niet, met muis kun je geen product in de combo selecteren, althans hij blijft steeds in de combo, je klikt, je zit heel snel product weggaan en dropdownlist komt weer tevoorschijn met alleen de geklikte product, klik je weer enz enz....

Met muisklik, setfocus, krijg je foutmelding.
Met muisklik, zonder setfocus, geen foutmelding, maar hij blijft in de combo na klik en product is niet geselecteeerd. :confused::confused::confused:

Ik hoop dat mijn verhaal duidelijk is anders probeer ik een screenvideo te maken waar de actie te zien is.....
 
search as you type.jpg

Als je klik krijg je foto 2 en hoe vaak je ook klikt, foto 2 blijft, totdat je enter of tab toetst..
 
Ik begrijp je vraagt niet echt goed, alles lijkt te werken, maar als je een event wilt " bij klikken" dan moet je het bij een on_click event plaatsen en niet bij een after_update of on_change?
 
Bekijk bijlage 245739

Als je klik krijg je foto 2 en hoe vaak je ook klikt, foto 2 blijft, totdat je enter of tab toetst..

Voodoo Juice? In wat voor duistere handel zit jij? :d

Maar serieus, ik zag dat je helemaal geen relaties hebt gelegd in je database. Dat heeft misschien niks met dit probleem te maken, maar misschien ook wel. Ik ben geen expert.
 
Ach duister of niet, de mens doet soms rare dingen voor de kost.... Zo zijn er klanten van diverse kleuren, soorten, maten enz ;)

Maar goed, probleem is deel opgelost. Het andere deel, wat eigenlijk, dacht ik tenminste, voorheen werkte, maar door al die aanpassingen om die errors weg te werken, denk ik dat ik iets in de Change() event zodanig gewijzigd heb, :rolleyes:, dat als ik begin met typen, the combo lijst niet gefiltered word zodat alleen de namen tevoorschijn komen die die getypte waarden alleen laat zien, maar het lijkt alsof alleen de beginletters worden gefilterd, eigenlijk een beetje zoals de standaard combo doet zonder vba...

Code:
Private Sub lala_Change()


Dim strText As String, strFind As String, i, strSQL As String

strText = Me.lala.Text


If Len(Trim(strText)) > 0 Then
   strFind = "NaamProduct Like '"
    
    For i = 1 To Len(Trim(strText))
       If (Right(strFind, 1) = "*") Then
            
            strFind = Left(strFind, Len(strFind) - 1)
        End If
       strFind = strFind & "*" & Mid(strText, i, 1) & "*"
    
    Next
    strFind = strFind & "'"
    
       
    strSQL = "SELECT ProductId, NaamProduct, [Prijsex]*1.21 AS Prijsincl, Prijsex, producten!korting AS Kortingg FROM Producten WHERE  " & _
    strFind & " ORDER BY NaamProduct;"
    
    Me.lala.RowSource = strSQL
 
    

    
Else
    
strSQL = "SELECT Producten.ProductId, Producten.NaamProduct, [Prijsex]*1.21 AS prijsincl, Producten.Prijsex, IIf([Klantid] Is Null,producten!korting,poafatih!korting) AS Kortingg, [prijs op afspraak]/1.21 AS [Verk Ex btw incl %] " _
& " FROM Producten LEFT JOIN poafatih ON Producten.ProductId = poafatih.productid " _
& " WHERE (((poafatih.Klantid) Is Not Null Or (poafatih.Klantid) Is Null)) " _
& " ORDER BY Producten.ProductId, Producten.NaamProduct, Producten.Prijseenheid, poafatih.[prijs op afspraak];"
Me.lala.RowSourceType = "Table/Query"
Me.lala.RowSource = strSQL
Me.Recalc



End If

Me.lala.Dropdown

Het gaat eigenlijk meer om dit stukje:

Code:
Dim strText As String, strFind As String, i, strSQL As String

strText = Me.lala.Text


If Len(Trim(strText)) > 0 Then
   strFind = "NaamProduct Like '"
    
    For i = 1 To Len(Trim(strText))
       If (Right(strFind, 1) = "*") Then
            
            strFind = Left(strFind, Len(strFind) - 1)
        End If
       strFind = strFind & "*" & Mid(strText, i, 1) & "*"
    
    Next
    strFind = strFind & "'"
    
       
    strSQL = "SELECT ProductId, NaamProduct, [Prijsex]*1.21 AS Prijsincl, Prijsex, producten!korting AS Kortingg FROM Producten WHERE  " & _
    strFind & " ORDER BY NaamProduct;"
    
    Me.lala.RowSource = strSQL

Het heeft iets met die wildcards te maken maar van alles geprobeerd....:confused:
 
En waarom gebruik je niet een gewone standaard combobox met een after update event? Denk dat je het nodeloos moeilijk maakt.
 
Als je 300 van het zelfde productnaam hebt, dan is de standaard functie niet bruikbaar, misschien is dit de 10.000 ste combo die ik gebruikt heb, dus de standaard functie gebruik ik al, maar bij deze heeft die functie geen zin. Als je 300 producten met dezelfde naam hebt, zijn er kleine verschillen, bijvoorbeeld de ene is 1cm de andere is 2 cm enz enz... en de klant wil intypen om snel te selecteren: 2 cm en alle producten met alleen 2cm moeten tevoorschijn komen en moet niet vanaf begin gaan reageren , maar moet kijken of deze criteria uberhaupt ergens in de naam voorkomt.

Maar toch bedankt voor de moeite en meedenken. Heb de code veranderd en nu werkt het wel.

Voor degenen die ook naar zoiets op zoek zijn om ze in iedere geval een richting te geven, hierbij de werkende code:

Code:
' lala = search as you type combobox 

Private Sub lala_Change()

Dim strText As String, strFind As String, strSQL As String

    With Me.lala
        If Len(Trim(.Text)) > 0 Then
            strText = Replace(.Text, "*", "")
            strFind = "NaamProduct Like ""*" & strText & "*"""
            strSQL = "SELECT ProductId, NaamProduct, [Prijsex]*1.21 AS Prijsincl, Prijsex, producten!korting AS Kortingg FROM Producten WHERE  " & _
    strFind & " ORDER BY NaamProduct;"
        Else
            strSQL = "SELECT ProductId, NaamProduct, [Prijsex]*1.21 AS Prijsincl, Prijsex, producten!korting AS Kortingg FROM Producten WHERE  " & _
    strFind & " ORDER BY NaamProduct;"
        End If
      
Me.lala.RowSource = strSQL

    
        End With
    
       
Me.lala.Dropdown

End Sub
 
Blij dat je eruit bent geraakt. Om zoiets op te zoeken gebruik ik een list met meerdere kolommen en daarboven een "searchveld" waar de gebruiker eendere welke zoekterm of zo intikt, per karakter dat wordt ingetikt ververst de list zich met de items waarin het karakter voorkomt. Als ze dan hun keuze gevonden hebben klikken ze dan op dat item om naar een (invulformulier) te gaan. Werkt een beetje overzichtelijker doordat je meerdere kolommen hebt, soms weten ze het bestelnummer of soms zoeken ze op de naam van het product of de maat of zo.
In het geval van bijgevoegd voorbeeldje kan je opzoeken nummer van de bewoner, zijn naam (of die van de partner), zijn afdeling, etc.... Ik heb bv Maria ingetikt en zie al onze Maria's van de instelling (of diegene die een partner hebben die Maria heet). Vraagt nauwelijks VBA en gewoon een aangepaste query
iets gelijkaardigs gebruiken we voor onze leveranciers en hun producten op te zoeken maar daar is die list wat complexer omdat je op de kolomkoppen nog extra oplopend of aflopend sorteren.
Knipsel.JPG Knipsel2.jpg

Zet je het bericht als opgelost aub?
 
Laatst bewerkt:
Klopt, dat is ook een oplossing. Het gaat alleen maar om productnaam en diverse velden zijn dan niet nodig. En de gebruiker heeft liever niet verschillende schermen. Maar goed er zijn verschillende wegen naar dezelfde uitkomst. Soms kom je zelf tot de oplossing wanneer je de vragen aan het stellen bent. :)

Bedankt in iedere geval en moet zeggen dat deze forum echt een topper is :thumb: heb veel van geleerd..
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan