vba code beveiligen werkblad excel

Status
Niet open voor verdere reacties.

C1988

Gebruiker
Lid geworden
10 feb 2015
Berichten
43
Kan iemand mij helpen aan een vba code waardoor bij het afsluiten van excel:
- Ingevulde cellen worden beveiligd tegen overschrijven, waarbij:
* lege cellen nog ingevuld kunnen worden,
* er nieuwe regels kunnen worden toegevoegd,
* de autofilter nog werkt
* sorteren nog mogelijk is.

Alvast bedankt!
 
Ik snap je niet helemaal, en gezien de reacties (0 tot nu toe :)) ben ik niet de enige. Om te beginnen zie ik een paar tegenstrijdigheden in je vraag:
HTML:
- Ingevulde cellen worden beveiligd tegen overschrijven, waarbij:
* lege cellen nog ingevuld kunnen worden,
* er nieuwe regels kunnen worden toegevoegd
Celbeveiliging doe je per cel, en is niet afhankelijk van de inhoud. Als een gebruiker een beveiligd werkblad gaat invullen, (en dat moet, anders heb je niks aan de beveiliging) dan kan dat alleen in niet-beveiligde cellen. Je moet er dus voor zorgen dat cellen die ingevuld mogen worden niet beveiligd zijn. Daarmee vervalt de tweede 'opdracht'.
Komen we bij de volgende regel: als een werkblad is beveiligd, kun je geen nieuwe rijen (ik neem aan dat je dat bedoelt) toevoegen. Maar dat hoeft toch niet? Je hebt immers al lege cellen?
 
Mijn excuses als het onduidelijk is wat ik bedoel.
Ik heb een bestand met meerdere patiënten onder elkaar. Wanneer er een meting wordt gedaan bij een patiënt wordt er achter de patiënt gegevens in dezelfde rij de datum en de uitkomst van deze meting ingevoerd. Dit invoeren wordt door meerdere medewerkers gedaan. Helaas wil het nog wel eens zo zijn dat gegevens in het bestand per ongeluk worden overschreven.
Het is nu de bedoeling dat de ingevulde cellen beveiligd worden voor overschrijving zodra het bestand wordt afgesloten. Lege cellen moeten dus niet beveiligd zijn zodat de nieuwe gegevens in dezelfde rij kunnen worden ingevoerd. Omdat het nogal een lange lijst is, zou het handig zijn wanneer er wel een nieuwe regel kan worden tussengevoegd. Ook zou het mooi zijn wanneer de lijst gesorteerd kan worden en de autofilter gebruikt kan worden. Wanneer je handmatig de beveiliging van het blad instelt kun je verschillende opties aanvinken, waaronder; rij toevoegen, sorteren en autofilter gebruiken. Ik neem aan dat dit dus ook in een vba kan worden ingebouwd.

Code:
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Dim sh       As Worksheet
  On Error Resume Next
  For Each sh In Worksheets                                'loop elk werkblad af
    sh.Unprotect                                           'haal de beveiliging eraf
    sh.UsedRange.SpecialCells(xlConstants).Locked = True   'cellen met inhoud (geen formules) blokkeren
    sh.Protect                                             'beveiliging er terug op
  Next
  ThisWorkbook.Save                                        'gegevens opslaan
End Sub


Dit is wat ik tot nu toe op internet heb gevonden. Ik weet niet meer wie deze code bedacht heeft, sorry :$
Het werkt perfect, er moet alleen nog toegevoegd worden dat rijen invoegen, sorteren en autofilter mogelijk is.

Ik hoop dat iemand mij kan helpen :D
 
Je kunt het zo proberen:

Code:
Option Explicit

Private Sub Workbook_Open()
    Dim sh As Worksheet
    
    For Each sh In Worksheets
        sh.Protect UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True _
            , AllowInsertingRows:=True, AllowSorting:=True, AllowFiltering:=True
    Next
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim sh As Worksheet
    
    On Error Resume Next
    For Each sh In Worksheets
        sh.UsedRange.SpecialCells(xlConstants).Locked = True   'cellen met inhoud (geen formules) blokkeren
    Next
    ThisWorkbook.Save
End Sub

Alleen locked cellen sorteren gaat niet lukken.
 
Heel erg bedankt! Hier ben ik al erg mee geholpen.
Nu vraag ik me af of het ook mogelijk is dat wanneer een lege rij wordt ingevoegd, hier nog in kan worden getypt.
Alvast bedankt!
 
Een mogelijkheid is om een item toe te voegen aan het snelmenu.
Als je een hele rij selecteert en de rechtermuisknop indrukt staat er een item "Rij erbij". Die voegt een rij in en zet alle cellen op "unlocked".
Daartoe moet deze code in de ThisWorkbook-module:
Code:
Option Explicit

Private Sub Workbook_Open()
    Dim sh As Worksheet
    
    For Each sh In Worksheets
        sh.Protect UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True _
            , AllowInsertingRows:=True, AllowSorting:=True, AllowFiltering:=True
    Next
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim sh As Worksheet
    
    On Error Resume Next
    For Each sh In Worksheets
        sh.UsedRange.SpecialCells(xlConstants).Locked = True   'cellen met inhoud (geen formules) blokkeren
    Next
    ThisWorkbook.Save
End Sub

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    Call SnelMenu
End Sub

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    Call MenuWeg
End Sub

...en deze code moet in een gewone module:
Code:
Option Explicit

Sub SnelMenu()
    Call MenuWeg
    With Application.CommandBars("Row").Controls.Add(Type:=msoControlButton, _
              Before:=7, Temporary:=True)
        .Caption = "&Rij erbij"
        .OnAction = ThisWorkbook.Name & "!RijInvoegen"
        .Tag = "Rechts"
    End With
End Sub

Sub MenuWeg()
    Dim objSnelMenuOptie As Object
  
    For Each objSnelMenuOptie In Application.CommandBars("Row").Controls
        If objSnelMenuOptie.Tag = "Rechts" Then objSnelMenuOptie.Delete
    Next
End Sub

Sub RijInvoegen()
    With ActiveCell.EntireRow
        .Insert Shift:=xlDown
        .Offset(-1).Locked = False
    End With
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan