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

Waarschuwing onderdrukken

Status
Niet open voor verdere reacties.

tkint

Gebruiker
Lid geworden
5 dec 2011
Berichten
754
Beste,

Aan de hand van deze code wil ik de foutmelding die verschijnt bij het overschrijven van geblokkeerde cellen onderdrukken maar wellicht klopt iets niet met de structuur.
Iemand een idee wat ik fout doe?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.DisplayAlerts = False
ActiveSheet.Unprotect Password:="geen" 'Beveiliging uitzetten
rij = Target.Row
kolom = Target.Column

If Cells(rij, 4).Value = "x" Then
    Range(Cells(rij, 6), Cells(rij, 8)).Locked = False
Else
    Range(Cells(rij, 6), Cells(rij, 8)).Locked = True
    foutmelding = MsgBox("U hebt geen cel in kolom D aangekruist!", vbInformation, "Lees dit even vooraleer verder te werken")
    
End If
ActiveSheet.Protect Password:="geen" 'Beveiliging aanzetten
Application.DisplayAlerts = True
End Sub

In bijlage het bestand met de melding dat de cel (in kolom G,F of H) niet kan overschreven worden omdat in dezelfde rij de cel in kolom D niet aangekruist is. Deze melding zou ik willen onderdrukken en vervangen door een eigen boodschap.
 

Bijlagen

  • risico-analyse_versie 8 Noël.xlsm
    32 KB · Weergaven: 40
Laatst bewerkt:
Beste,

Ik heb ondertussen gezocht door welke gebeurtenis deze specifieke melding geactiveerd wordt maar ik heb geen concrete tips gevonden. Welk gek, dat bij het plaatsen van een onderbrekingspunt bij de Worksheet_Change, deze gebeurtenis niet doorlopen wordt.
 
Volgens mij komt dit doordat je meteen een generieke foutmelding om je oren krijgt van Excel. Je mag het veld niet wijzigen, dus zal worksheet_change niet worden getriggerd
 
Ik zou de cellen die je wilt wijzigen niet locken, maar de volgende procedure(s) gebruiken. De eerste procedure is om de waarde vast te leggen bij selectie van 1 cel binnen het te controleren gebied. Deze wordt getriggerd door selecteren van een cel. De tweede is om te controleren of er een "x" staat op de betreffende regel in kolom 4. Deze wordt getriggerd door het wijzigen van een cel. Door gebruik te maken van een publieke variabele kan de waarde in beide procedures gebruikt worden. Nu wordt de wijziging automatisch teruggedraaid; natuurlijk kun je hierbij een waarschuwing weergeven.

Let op de EnableEvents! Als je dit niet doet ga je een oneindige loop in ...
Code:
Option Explicit

Public origValue As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Range("F13:H90"), Target) Is Nothing And Target.Cells.Count = 1 Then
    origValue = Target.Value
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("F13:H90"), Target) Is Nothing And Target.Cells.Count = 1 Then
    Application.EnableEvents = False
    If Cells(Target.Row, 4).Value <> "x" Then
        Target.Value = origValue
    End If
    Application.EnableEvents = True
End If
End Sub
 
Beste,

Bedankt voor het verhelderend antwoord. Mag ik mijn werkblad beveiligen via bladbeveiliging maar de cellen in de kolommen D tot H niet blokkeren? Kwestie van formules en voorwaardelijke opmaak in kolom I niet te kunnen wijzigen.
 
Dat klopt. In de procedure nu zit alleen een check op kolom D, maar ik neem aan dat je dat zelf aan kunt passen.
 
Beste,

Dit is een elegantere oplossing van het probleem dan met het blokkeren van cellen. Mijn tool functioneert perfect.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan