• 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 starten bij invullen cel

Status
Niet open voor verdere reacties.

Meaurk

Gebruiker
Lid geworden
29 jun 2012
Berichten
146
Hallo!

Wederom ligt dit probleem een stuk lastiger dan dat de titel zich voordoet.

Simpel gezegd wil ik wanneer ik in een cel een waarde invul (datum, geen vaste waarde) een melding krijgen of de vorige stap compleet is afgerond. Hier moet dan de keuze van Ja/Yes en Nee/No komen. Wanneer men op Ja/Yes drukt, moet de ingevulde datum ook daadwerkelijk in de cel komen te staan. Wanneer men op Nee/No drukt, moet de cel leeg blijven en dus de datum verdwijnen.

Ik heb liggen rommelen met Macro's, ik ben niet ver gekomen. Dit is wat ik heb, alvast bedankt voor de verdere hulp!

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Column = 9 Then
        MsgBox "Is de traceability lijst gecontroleerd?"
    End If
End Sub


Mark.
 
Zoiets?
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Application.EnableEvents = False
    If Target.Column = 9 Then
      Target.Value = IIf(MsgBox("Is de traceability lijst gecontroleerd?", vbInformation + vbYesNo, "weet je het zeker") = vbYes, Target.Value, "")
    End If
 Application.EnableEvents = True
End Sub
 
Dat is inderdaad wat ik bedoel, helaas wordt deze macro ook geactiveerd als je een cel in kolom 9 (I) leegmaakt met de "Delete" knop. Is dit tegen te gaan?
 
Kun je het hiermee tackelen?
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Application.EnableEvents = False
    If Target.Column = 9 Then
      If Not IsEmpty(Target) Then
      Target.Value = IIf(MsgBox("Is de traceability lijst gecontroleerd?", vbInformation + vbYesNo, "weet je het zeker") = vbYes, Target.Value, "")
    End If: End If
 Application.EnableEvents = True
End Sub
 
Dat is inderdaad wat het probleem verhelpt! Nu heb ik nog één kleine laatste vraag, is het ook mogelijk om een vervolg bericht te sturen als men op "No" drukt?
 
Kom je hiermee weg?
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Application.EnableEvents = False
    If Target.Column = 9 And Not IsEmpty(Target) Then
  Target = IIf(MsgBox("Is de traceability lijst gecontroleerd?", vbInformation + vbYesNo, "weet je het zeker") = vbYes, Target.Value, "")
     If IsEmpty(Target) Then MsgBox ("U heeft gekozen voor nee." & vbLf & "Maak het in orde.")
   End If
 Application.EnableEvents = True
End Sub
 
Ik heropen dit topic omdat ik een extra vraag heb wat over deze macro gaat.

Is het mogelijk om de macro niet te laten starten als in een bepaalde cel een "X" is ingevuld?
 
Code:
If Target.Column = 9 And Not IsEmpty(Target) [B][/B][COLOR="#FF0000"]AND NOT 'bepaalde cel' = "X"[/COLOR] Then

Zal wel voldoende zijn.
 
Je moet 'bepaalde cel' wel wijzigen in je cel die een X kan bevatten, hé
 
Dat heb ik gedaan, de gehele kolom 10 (J) kan een X bevatten. Heb verschillende optie geprobeerd, maar hij blijft de Expressie verwachten.
 
Probeer deze dan eens:

Code:
If Target.Column = 9 And Not IsEmpty(Target) AND NOT Target.offset(,1) = "X" Then
 
Hij accepteert de code, maar de vraag wordt nog steeds gesteld.

Dit is de complete code die ik gebruik.

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  
 Application.EnableEvents = False
    
    If Target.Column = 9 And Not IsEmpty(Target) Then
            Target = IIf(MsgBox("Zorg dat de Traceability List aanwezig is voordat de eindafname plaatsvindt!", vbInformation, "Confirmatie") = vbYes, Target.Value, Target.Value)
        End If
   
    If Target.Column = 11 And Not IsEmpty(Target) And Not Target.Offset(, 1) = "X" Then
            Target = IIf(MsgBox("Is de Summary List gecontroleerd met de Traceability List?", vbInformation + vbYesNo, "Confirmatie") = vbYes, Target.Value, "")
    If IsEmpty(Target) Then MsgBox ("De order kan niet eerder afgewerkt worden voordat de Summary List gecontroleerd is met de Traceability List.")
        End If
 
 Application.EnableEvents = True

End Sub
 
Ik heb het gevonden, ben wat gaan neuzen in het Target.Offset verhaal, het moest dus -1 zijn. Bedankt cobbe! :)
 
Ja dat komt doordat er in je eerste code uitgegaan wordt van kolom 9(I) en je nu in de code uitgaat van kolom 11(H).
 
@Cobbe,

bij mij is kolom 11 kolom K ?!
;)
 
Ja klopt ook maar had het verkeerde lettertype gebruikt.:)
 
Zo, daar zijn we weer.. topic heropent.

Zo nu en dan geeft excel een foutmelding als je iets wijzigt in het tabblad. Hij verwijst dan naar de lijn
Code:
    If Target.Column = 11 And Not IsEmpty(Target) And Not Target.Offset(, -1) = "X" Then
Iemand een idee waardoor dit komt?

Volledige code:
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  
 Application.EnableEvents = False
    
    If Target.Column = 9 And Not IsEmpty(Target) Then
            Target = IIf(MsgBox("Zorg dat de Traceability List aanwezig is voordat de eindafname plaatsvindt!", vbInformation, "Confirmatie") = vbYes, Target.Value, Target.Value)
        End If
   
    If Target.Column = 11 And Not IsEmpty(Target) And Not Target.Offset(, -1) = "X" Then
            Target = IIf(MsgBox("Is de Summary List gecontroleerd met de Traceability List?", vbInformation + vbYesNo, "Confirmatie") = vbYes, Target.Value, "")
    If IsEmpty(Target) Then MsgBox ("De order kan niet eerder afgewerkt worden voordat de Summary List gecontroleerd is met de Traceability List.")
        End If
 
 Application.EnableEvents = True

End Sub
 
Doe eens enkele tests met deze aangepaste code:

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  
 Application.EnableEvents = False
  If Not Intersect(Target, Columns(9)) Is Nothing Then
     If Not IsEmpty(Target) = True And Not UCase(Target.Offset(, 1)) = "X" Then
         Target = IIf(MsgBox("Zorg dat de Traceability List aanwezig is voordat de eindafname plaatsvindt!", vbInformation, "Confirmatie") = vbYes, Target.Value, Target.Value)
     End If
  End If
  If Not Intersect(Target, Columns(11)) Is Nothing Then
    If Not IsEmpty(Target) And Not UCase(Target.Offset(, -1)) = "X" Then
            Target = IIf(MsgBox("Is de Summary List gecontroleerd met de Traceability List?", vbInformation + vbYesNo, "Confirmatie") = vbYes, Target.Value, "")
    End If
    If IsEmpty(Target) Then MsgBox ("De order kan niet eerder afgewerkt worden voordat de Summary List gecontroleerd is met de Traceability List.")
  End If
 Application.EnableEvents = True

End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan