• 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.

Valideren en dan verder

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

wmr

Gebruiker
Lid geworden
29 nov 2012
Berichten
44
Hallo,

Met valideren laat ik mensen in cel A1 uit een lijstje kiezen: Amsterdam, Rotterdam, Den Haag

Die plaatsen hebben ook een nummer in een tabel. Met vert.zoeken kan ik die wel vinden en cel B1 zetten. Ook met VBA lukt dit wel.

Mijn vraag is echter, is het mogelijk om direct nadat iemand een plaats heeft gekozen, de vert.zoeken wordt uitgevoerd, zodat direct het nummer in B1 verschijnt.

Volgens mij zou een Worksheet_SelectionChange wel kunnen, maar ik wil alleen de vert.zoeken uitvoeren wanneer de inhoud van de cel wijzigt.

Kan dit?

groet & thanks
Willem
 
Dan moet je niet de 'SelectionChange' gebruiken, maar de 'Change' event.
 
Met de formule VERT.ZOEKEN in B1 en automatisch berekenen (wat de normale instelling is), ben je er toch ook?
 
Zo is het precies, ik vond het al vreemd, maar ik dacht later..... die wil alleen maar Vba.
 
Valideren en verder

De tip van Harry (Change event) heeft mij goed op weg geholpen. En ik wil idd alleen maar VBA :) en ik wil het real time.

Ik heb wat gerichter kunnen zoeken en heb het e.e.a. op MSDN gevonden.

Hierbij het bestand, voor de liefhebbers. Ik heb uiteindelijk match en index gebruikt i.p.v. Vlookup.
Dit werkt als een speer, razend snel.

Groet & bedankt
Willem

P.S. Heb alleen in deze versie het foutje er nog niet uitgehaald als je de plaatsnaam delete.
 

Bijlagen

Nou, dan kan de vraag op opgelost.

Alleen begrijp ik niet dat het persé VBA moet zijn en niet een gewone functie.

Je moet namelijk nogal wat doen om het goed dicht te timmeren, zoals lege cellen (zoals vermeld), meerdere cellen tegelijk aangepast.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Range("B2:B3"), Range(Target.Address)) _
        Is Nothing Then
        Application.EnableEvents = False
        If Target.Count > 1 Then
            MsgBox "Invoer wordt teruggedraaid", vbExclamation, "1 Plaats tegelijk invullen"
            Application.Undo
        Else
            If ActiveCell.Value = "" Then
                ActiveCell.Offset(0, 1) = ""
            Else
                Cells(ActiveCell.Row, 3) = Application.WorksheetFunction.VLookup(ActiveCell.Value, (Worksheets("Bron").Range("A:B")), 2, 0)
            End If
        End If
        Application.EnableEvents = True
    End If
    
End Sub
 
Bedankt. Dit is weer beter.

Ik wil VBA gebruiken omdat ik geen formules wil in de sheet. Gebruikers worden onzeker van formules die ze niet snappen.
En veel vert.zoeken maakt een programma traag.
 
Daar kunnen de meningen over verschillen (en dat moeten we vooral zo houden :) ).

Persoonlijk word ik juist onzeker van macro's die achter de schermen van alles doen.
Ik zou het zelf liever oplossen door beveiliging van het werkblad, waarbij alleen de invoercellen gekozen kunnen worden en de formules niet zichtbaar zijn.

Een nuancering voor wat betreft de snelheid van VERT.ZOEKEN: dat is in het algemeen juist ietsjes sneller dan INDEX-VERGELIJKEN, maar....
als je bijvoorbeeld een tabel hebt met meerdere velden die je wilt opzoeken (bijv. naam, adres, woonplaats), dan kun je beter VERGELIJKEN gebruiken om het regelnummer te vinden en in een hulpveld te plaatsen, zodat deze gebruikt kan worden in INDEX-functies voor de benodigde velden.
Dat is dan uiteraard sneller dan voor elk veld VERT.ZOEKEN te gebruiken.

Tenslotte nog een nadeel van de macro: als de macro daadwerkelijk iets gedaan heeft, dan kun je de wijziging - en alle voorgaande wijzigingen - niet meer ongedaan maken (met undo / Ctrl+z).
 
Bedankt voor alle reacties! Waardevol.

Ik gebruik match en index omdat in mijn bestand plaats niet in de meest linkse kolom staat.

Het feit dat je na het uitvoeren van de macro geen undo kunt gebruiken, neem ik op de koop toe. Het bestand is wat uitgebreider en complexer dan ik hier heb geschetst. Dankzij een macro voorkom ik heel wat (mogelijke) fouten bij de invoer.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan