• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA Lengte_Afterupdate en Setfocus

Status
Niet open voor verdere reacties.

PSVSupporter

Gebruiker
Lid geworden
13 aug 2009
Berichten
148
Ik heb het volgende probleem.

Ik heb een Userform gemaakt met 3 velden:
Lengte
Breedte
Hoogte

Als ik van Lengte naar Breedte ga (door bij Lengte op enter te drukken, of met TAB), wil ik dat de waarde die ingevuld is in Lengte gecheckt wordt. Dit wil ik doen door gebruik te maken van Lengte_Afterupdate(). Het Labelveld [FOUTMELDING] vul ik dan met een foutmelding, zodat de gebruiker ziet wat er fout is.
Als ik hierin Lengte.SetFocus gebruik, gaat het formulier toch verder naar het volgende veld.
Ik heb het ook geprobeerd met Lengte_Exit, maar het lijkt wel alsof de Setfocus uitgevoerd wordt en daarna pas de Tab/Enter functie uitgevoerd wordt en Setfocus geen functie heeft.

Code:
Private Sub Lengte_Afterupdate()
    If IsNumeric(Lengte.Value) = False Then
        FOUTMELDING = "Lengte bevat geen geldige waarde"
        Lengte.SetFocus
    ElseIf Lengte.Value < 1 Or Lengte.Value > 100 Then
        FOUTMELDING = "Ongeldige Afmeting"
        Lengte.SetFocus
    Else: FOUTMELDING = ""
    End If
End Sub

Hoe los ik dit op de juiste manier op?

Pas als het complete formulier gevalideerd is, wil ik de gegevens opslaan in het werkblad.
 
PSVSupporter, Waarom een controle per ge-update veld? Het is handiger om je controle op alle velden uit te voeren op het moment dat je de inhoud van je formulier wilt gaan opslaan oid... Het 'focus geven' van het foute veld is dan geen probleem meer...

Groet, Leo
 
Gebruik geen tekstvak voor getallen, maar een combobox met style dropdownlist met geldige waarden of een spinbutton (met min en max.).
 
Hoe kan ik dan aangeven dat een vak alleen cijfers mag bevatten? Ik kom dat niet tegen in de eigenschappen.
 
Code:
Private Sub UserForm_Initialize()
    ComboBox1.List = [row(1:50)]
End Sub
Stel bij de eigenschappen in:
ComboBox1.Style =2-fmStyleDropDownList
 
Ik zit nog met 1 ding:

Ik heb 1 veld die gevuld wordt met een scanner. Deze scanner scant een barcode. Als deze barcode voorkomt in het Excel bestand, haal ik daarna alle gegevens op en vul het formulier. Daarna kan de gebruiker gegevens aanpassen/toevoegen.

Echter indien een barcode onbekend is, wil ik dat het veld barcode niet verlaten wordt en dat er opnieuw gescand wordt. Maar het .setfocus werkt dus niet.

Hoe krijg ik dit toch voor elkaar?
 
Je feedback over mjin vorige suggestie is tamelijk summier.

Zet alle overige elementen op locked.
 
Excuses over mijn feedback. De suggestie deze was uitstekend.

Ik heb het inmiddels opgelost door op ieder veld met een tabstop bij _Enter() een check uit te voeren. Daardoor 'tabt' Excel automatisch door tot het eerste veld. (welke geen _Enter() kent).

Ik moet zeggen dat ik dit gedrag wel erg vreemd vind en compleet anders dan in Access.

De locked oplossing is ook een mooie inderdaad.
 
Ik heb de locked suggestie uitgeprobeerd: Werkt niet.
Hoewel het veld Lengte gelockt is, tabt Excel vrolijk verder naar dit veld.
 
Geef de overige elementen de eigenschap .enabled=false.
Desnoods stel je ze ook allemaal in met .tabstop=false
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan