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

macro pop-up indien waarde cel overeenkomt

Status
Niet open voor verdere reacties.

pouletten

Gebruiker
Lid geworden
13 apr 2010
Berichten
70
Hoi allemaal,

Ik probeer een macro te maken voor het weergeven van een pop-up op het moment dat de waarde in een bepaalde cel overeenkomt met een bepaalde tekst. Om het even concreet te maken:

In kolom A staan staan allemaal soorten fruit (bij. appel, peer of banaan). Als een van de cellen in kolom A (bijvoorbeeld A15) wordt aangepast naar "Peer", dan wil ik een pop-up scherm hebben waarin gevraagd wordt naar de hoeveelheid peren. De waarde die in dit scherm wordt ingevuld, wil ik terug zien in kolom C (in dit geval dus C15).

Wie kan mij hiermee helpen?

Met vriendelijke groet,

Pouletten
 
Misschien niet de juiste reactie... Maar als je nou tóch al in cel A15 het woordje "peer" intikt, waarom dan niet je cursor 2 cellen opzij zetten naar C15 en daar het aantal intikken? Deze handelswijze kan niet zo volgen vrees ik.
 
Volgens mij ben je op zoek naar een soort Userform (invulformulier), wat jij een popup noemt. Op zichzelf is dat niet zo moeilijk, ik heb hier x aantal voorbeelden die makkelijk aan te passen zijn maar zonder representatief vb bestandje zou ik echt niet weten hoe ik u een voorzetje kan geven.
 
Ik zou zeggen doe er even een voorbeeldbestandje bij. En anders kan je even zoeken op het Worksheet_Change event.
 
Hier heb ik een voorbeeld bestand. ik heb voor het idee even andere informatie gebruikt.
In het voorbeeld is een personeelsbestand te zien. In kolom c staat de status, Deze informatie wordt verkregen volgens een lijst (gevensvalidatie). Wanneer deze aangepast wordt naar "uitdienst" dan wil ik dat er een userform (inderdaad het juiste woord) naar voren komt waarin verplicht een reden moet worden gegeven waarom iemand uit dienst is. Deze waarde moet dan in kolom E komen. Als iemand over geplaats is, moet de locatie waarnaar degene is overgeplaatst worden vermeld en de reden.
Ook dit moet dan weer in kolom E worden geplaatst.

Hopelijk is het zo duidelijk. Zo niet, dan hoor ik het graag

Pouletten Bekijk bijlage voorbeeld.xlsx
 
Is zoiets voldoende?
 

Bijlagen

  • popup.xlsb
    16 KB · Weergaven: 132
Hoi,
Dit is de code (te vinden in uw vb onder blad 1)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Set KeyCells = Range("C1:C10")
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then
        myValue = InputBox("Cel: " & Target.Address & " is aangepast naar : " & Target.Value & vbNewLine & "Geef de reden in", "Reden?")
Target.Offset(0, 2) = myValue
    End If
End Sub
Dit stukje
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
betekent gewoon 'Als er iets in uw werkblad verandert'
Dit stukje
Code:
Dim KeyCells As Range
betekent 'Hier zet?, verklaar? je de variabelen (Range = bereik) '
Dit stukje
Code:
Set KeyCells = Range("C1:C10")
betekent 'het bereik ,in dit geval,van Cel C1 tot en met C10 (Heb je 100 medewerkers en C1 is de titel dan = de code("C2:C101")'
Dit stukje
Code:
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then
        myValue = InputBox("Cel: " & Target.Address & " is aangepast naar : " & Target.Value & vbNewLine & "Geef de reden in", "Reden?")
betekent 'als er iets verandert in uw bereik dan gaat de inputbox (invuldoosje:p, geen idee hoe ik het moet vertalen??)open'
Target.Address = de veranderde cel
Target.Value = wat er in de veranderde cel staat
De rest kan afleiden uit het invuldoosje:p
Dit stukje
Code:
Target.Offset(0, 2) = myValue
betekent 'zet de waarde van het invuldoosje:p op dezelfde rij in de tweede kolom ernaast'
Hopelijk is het duidelijk genoeg,uitleggen is niet mijn sterkste ding.
 
Met een klein beetje opvoeding van de eindgebruikers en omdat ik weinig zin heb om formuliertjes te ontwikkelen met een correcte fout afhandeling.:cool:
 

Bijlagen

  • popup(1).xlsb
    22,8 KB · Weergaven: 67
@gast0660 Duidelijk! Helemaal geweldig. Nu snap ik zelf ook wat de macro doet. Weer wat geleerd!
@VenA ook bedankt!
 
@VenA, zou u mij misschien kunnen uitleggen hoe uw macro werkt? bedankt!
 
De code bevindt zich op drie plekken:

1. In Module1 worden de variabelen 'oud' en 'nieuw' als Public gedefinieerd. Door een variabele als Public te definiëren kan je zo'n variabele 'overal' gebruiken.

2. In de module van Blad1 staat het Worksheet_Change event.
Hierin staat dat als er iets gewijzigd wordt in kolom C vanaf rij vier en er maar één cel gewijzigd is dan doe wat. Om niet in een oneindige lus te raken worden de events even uitgezet. De nieuwe waarde wordt opgeslagen In de publieke variabele 'nieuw'. De Undo zorgt ervoor dat de wijziging ongedaan wordt en de oude waarde wordt opgeslagen in de publieke variabel 'oud'. Ook al wijzig je niets aan de waarde ziet Excel dit toch als een wijziging. De status veranderen van actief naar actief wordt toch als een wijzigingen gezien vandaar dat er even getoetst wordt of 'oud' <> 'nieuw' is. Als 'oud' <> 'nieuw' waar is dan wordt Userform1 aangeroepen.

3. Userform1
Bij het openen van dit formulier worden de wijzigingen in Label1 gezet. Ook hier zie je de publieke variabelen 'oud' en 'nieuw' weer terug. Bij het drukken op de knop 'Ok' wordt er gekeken of er wel iets ingevuld is. Deze controle kan je aanpassen naar dat er minimaal x tekens ingevuld moeten worden. Als er iets ingevuld is dan wordt de status aangepast naar de nieuwe situatie en anders blijft het zoals het was. Zowel de knop 'Ok' als 'Cancel' sluiten het formulier. Je komt nu weer terug in punt 2 waar de events weer aangezet worden.

Je kan ook even Stop toevoegen. Dan kan je met <F8> door de code wandelen en zie je precies wat er gebeurt;)

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Stop
rest van de code
 
@pouletten,
Bedankt voor de feedback, ik vind het helemaal top dat je zo leergierig bent:thumb:
 
@VenA Bedankt voor de uitleg. Helder!
@gast0660 Ik hou er van om te leren. En bovendien weet ik nu waar ik de macro aan kan passen, omdat ik nu begrijp wat het doet. Ook kan ik misschien iets gebruiken voor een volgende keer. Ik vind Excel echt onwijs interessant en leuk om mee te werken. Er zijn oneindig veel toepassingen en ik zou willen dat ik ze allemaal kende. :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan