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

Alleen NIET lege cellen blokkeren/beveiligen

Status
Niet open voor verdere reacties.

jansm

Gebruiker
Lid geworden
2 apr 2014
Berichten
421
Hallo, is het mogelijk om (VBA) van een tabblad alleen de cellen met inhoud te blokkeren/beveiligen?
 
Hoi Jansm,

Is dit voor jou een oplossing?

Code:
Sub beveiligen()

    Cells.Select
    Selection.Locked = False
    Selection.FormulaHidden = False


    Selection.SpecialCells(xlCellTypeConstants, 23).Select
    Selection.Locked = True
    Selection.FormulaHidden = False
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Gr Jos
 
Jos, bedankt, dit werkt in principe. Zie voorbeeld bestand. Ik heb een knop beveiligen en een knop beveiliging opheffen. De code loopt vast als ik na het beveiligen een aantal onbeveiligde cellen invul en dan opnieuw beveilig. Op zich is het logisch dat je van het tabblad eerst de beveiliging opheft voordat nieuwe cellen invult. Maar is de code niet zodanig aan te passen dat dat niet nodig is? Ik ben er al blij mee hoor.
Bekijk bijlage TestBeveiligen.xlsb
 
Begin de code van Jos eens met Activesheet.Unprotect
 
Fijn om te horen dat het gelukt is! @edmoor, bedankt voor het aanvullen!
 
Stap af van 'select' en 'selection'.
Brei het dan eventueel aan elkaar met 'With'.
 
Harry,
ik kom niet verder dan de bijlage. Na de code JOS zijn alleen de cellen met inhoud geblokkeerd, dat is de bedoeling. Na code HSV zijn alle cellen geblokkeerd. Kan iemand de code _HSV aanpassen zodat ook hier alleen de cellen met inhoud zijn geblokkeerd.
Bekijk bijlage TestBeveiligen_3.xlsb
 
Lijkt me nou echt een mooi klusje voor @jos1982.
Steekt die er ook wat van op (daar was mijn vorig schrijven voor bedoeld).
 
Lijkt me nou echt een mooi klusje voor @jos1982.
Steekt die er ook wat van op (daar was mijn vorig schrijven voor bedoeld).

Hoi Harry,

Bedankt voor de tip!

Ik leer daar inderdaad van. Alles wat ik weet van vba heb ik door middel van lezen en leren van anderen. Dus ik sta er altijd open voor om van jou en andere te leren!

Dit is dan waarschijnlijk de uitkomst waar Jansm naar op zoek is.

Code:
Sub beveiligen()

activesheet.Unprotect
With activesheet
    .Cells.SpecialCells(xlCellTypeVisible).Locked = False
    .Cells.SpecialCells(xlCellTypeConstants).Locked = True
End With
activesheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

End Sub

Groet Jos
 
Dan maak je nog niet ten volle gebruik van de With opdracht:
Code:
Sub beveiligen()
    With ActiveSheet
        .Unprotect
        .Cells.SpecialCells(xlCellTypeVisible).Locked = False
        .Cells.SpecialCells(xlCellTypeConstants).Locked = True
        .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    End With
End Sub
 
Bedankt Edmoor!

Hopelijk wil je nog antwoord geven op een vraag:

Er zijn meerdere wegen die naar Rome leiden.. (Echter sommigen zijn beter)

Het feit dat je dit tussen de With en End With plaatst, heeft die alleen invloed op de snelheid van de uitvoering van de code?

(Ik hoop binnenkort wat tijd vrij te maken voor cursus..)
 
Als voorbeeld de bovenstaande code zonder de With opdracht, dat zal het wel duidelijk maken:
Code:
Sub beveiligen()
    ActiveSheet.Unprotect
    ActiveSheet.Cells.SpecialCells(xlCellTypeVisible).Locked = False
    ActiveSheet.Cells.SpecialCells(xlCellTypeConstants).Locked = True
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Den moet je dus telkens hetgeen wat achter With staat herhalen.
 
Ja, dan is het mij wel duidelijk.

Ik had er vanmorgen al wat over gelezen op het internet, maar het kon zijn dat er nog meerdere redenen aan ten grondslag zouden liggen.

Nogmaals dank!
 
Er zijn inderdaad meer redenen voor maar dat vergt nogal wat uitleg en voorbeelden. Met snelheid heeft het niks te maken.
 
Heerlijk zo'n discussie. With .... End maakt de code idd leesvriendelijker. Allen bedankt.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan