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

vbacode cel beveilingen na invullen

Status
Niet open voor verdere reacties.

popipipo

Meubilair
Lid geworden
21 nov 2006
Berichten
8.413
Wij zijn bezig met het invullen van een rooster.
Verticaal staan onze namen, horizontaal de datums.
Op het kruispunt moet ieder in zijn eigen regel de gewenste dienst invullen.

Nu zijn mensen bang dat anderen in hun regel wat gaan wijzigen.
Als oplossing zie ik een celbeveiliging
Als je jouw diensten hebt ingevuld moet deze cellen niet meer veranderd kunnen worden.

Ik heb daar een klein userform voor gemaakt.
Echter de VBA erachter lukt mij niet.

In de userform kiezen ze hun naam en de maand
De cellen achter de gekozen naam moeten nu beveiligd worden dmv de knop ‘opslaan’
 

Bijlagen

  • Rij beveiligen tegen overschrijven.xlsm
    29,8 KB · Weergaven: 44
Hoe je dat met het userform voor je ziet is mij niet duidelijk. Met onderstaande code in de thisworkbook-module maak je dat een cel gelockt wordt zodra een waarde wordt geselecteerd op het werkblad zelf
Code:
Private Sub Workbook_Open()
    Dim Sh As Worksheet
    
    For Each Sh In Sheets
        If Sh.Name <> "instellingen" Then Sh.Protect UserinterfaceOnly:=True
    Next
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name <> "instellingen" And Target.Column > 1 And Target.Row > 1 And Target.Count = 1 And Target.Value <> "" Then Target.Locked = True
End Sub
 
Hallo Willem

Kijk of dit doet wat je wilt in dit voorbeeld zonder userform, zoals Timshel al aangaf zie ik dat ook niet?
 

Bijlagen

  • Rij beveiligen tegen overschrijven(2).xlsm
    30,5 KB · Weergaven: 31
Laatst bewerkt:
Ja zo iets had ik ook al, maar het grote nadeel hiervan is dat je zo gauw je wat hebt ingevuld je het niet meer kunt verbeteren.
Een foutje is snel gemaakt. ik wilde dus nog een stapje tussen zetten zodat de beveiliging er pas op gezet wordt zodra je klaar bent met invullen.

Je zou ook bij het opslaan alle cellen beveiligen die ingevuld zijnen alle lege cellen niet, maar als je 12 tabbladen (365 dagen) en 50 werknemers hebt moet je ruim 18.000 cellen nalopen en dat werkt denk ik enorm vertragend.
Daarom dacht ik de selectie van werknemer en maand te doen, dan zijn het maar 31 cellen.
 
Je zou ook bij het opslaan alle cellen beveiligen die ingevuld zijnen alle lege cellen niet, maar als je 12 tabbladen (365 dagen) en 50 werknemers hebt moet je ruim 18.000 cellen nalopen en dat werkt denk ik enorm vertragend.
Dat hoeft niet cel voor cel. Met Specialcells moet daar best een vlotte routine van te maken zijn.
Daarom dacht ik de selectie van werknemer en maand te doen, dan zijn het maar 31 cellen.
Volstaat anders een ja/nee-messagebox niet om de keuze te bevestigen?
 
Ik wil niet dat na elke celinvoer een bevestiging plaats moet vinden.
Dat wekt enorme irritatie op

Als je vlotte routine kunt maken met Specialcells graag.
Mijn vba kennis schiet echt te kort voor dit.
 
Doe maar eens testen
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim Sh
    
    For Each Sh In Sheets
        If Sh.Name <> "instellingen" Then
            With Sh.Range("B3:AD" & Sh.Cells(Rows.Count, 1).End(xlUp).Row)
                .Locked = False
                .SpecialCells(2).Locked = True
            End With
        End If
    Next
End Sub

Private Sub Workbook_Open()
    Dim Sh As Worksheet
    
    For Each Sh In Sheets
        If Sh.Name <> "instellingen" Then Sh.Protect UserinterfaceOnly:=True
    Next
End Sub
 
Met deze VBA in dit voorbeeld valt de vertraging best mee.
Nu nog testen op een copy van het werkelijke bestand.

Bijvoorbaat hartelijk dank
 
Mijn voorkeur gaat ook uit naar een Userform.

In de bijlage een opzetje. (moet nog wel verder uitgewerkt worden als je hiervoor kiest.)
 

Bijlagen

  • Rij beveiligen tegen overschrijven.xlsm
    33,2 KB · Weergaven: 42
Laatst bewerkt:
Het is een programma om met z'n allen een rooster voor elkaar te kunnen krijgen
Je moet dus kunnen zien wat anderen invoeren.
Maar je mag dit niet kunnen veranderen.

Met een eigen csv bestand en ook niet met dit Userform kun je dus niet zien wat anderen invoeren.

We gebruiken dit al langer maar een klacht/minpuntje was dat je de invoer van iemand anders kunt wijzigen, vandaar deze beveiligingsvraag.

Toch bedankt voor het mee denken
 
Ik vind dit geen aanvullende eisen want het heeft niets met de beveiliging te maken.
Ik noem het meer een aanvulling van wat het programma doet.
De primaire vraag vind ik moet kort zijn anders wordt hij niet gelezen en zal daarom nooit alle randvoorwaarden bevatten.

Wij zijn een democratische afdeling en beslissen in eerste instantie samen over wie wanneer welke dienst doet. (alles na rato natuurlijk)
Wij moeten hem samen kloppend krijgen

En als ik een dienst wil ruilen dan moet ik wel weten wie welke dienst heeft.
Het is dus een concept rooster waar nog veel meer aan vast zit.
Mijn initiële vraag ging dus alleen maar over de beveiliging van een reeks cellen.
De rest vond ik irrelevant voor de vraag.
 
Lijkt me goed om de vraag in eerste instantie kernachtig te stellen. Gaandeweg kan blijken dat meer informatie nodig is bij het meedenken. Ik vind het altijd wel leuk om een idee te krijgen van de context waarin een exceloplossing gebruikt wordt. Benieuwd om te horen of de oplossing met Workbook_BeforeSave ook in de praktijk vlot werkt.
 
In een test bestand met 15 tabbladen (12 maanden + 3 extra info) werkt het vlot genoeg
Ik heb het nog niet in het definitieve (copy) bestand bekeken.
 
In de bijlage een zip-bestand met de volgende bestanden:

- het Excel-bestand '__samenwerken snb.xlsb>

- een viertal csv-bestanden, waarin de gegevens van collega's zijn vastgelegd.

Pak het zipbestand uit in een aparte directory.

Bij opening van het Excel-bestand wordt het userform geopend.

- de gegevens van alle collega's worden geconsolideerd in het bestand 'team.csv'
- deze gegevens worden ingelezen en opgeslagen in de eigenschap 'Tag' van Frame 'F_03'.

- gegevens van de gebruiker 'P_username.csv" worden ingelezen en opgeslagen in de eigenschap 'Tag' van Frame 'F_02'.

- Frame 'F_01' bevat een combobox 'C_01', ingesteld als keuzelijst zonder invoer (style=2) die gevuld wordt met alle maandnamen via de ingebouwde customlist van Excel.

- Frame 'F_02' bevat 31 comboboxen die gevuld worden met een lijst van 'diensten' (A1....D2)

De gebruiker kan nu een maand kiezen waarvan hij/zij zijn/haar diensten per dag kan invoeren/wijzigen.

Als de gebruiker een maand heeft gekozen verschijnen alle geldige dagen in die maand en, indien van toepassing, de reeds ingevoerde diensten van de gebruiker op die dagen.

Zo gauw de gebruiker een combobox bij een bepaalde datum aanklikt worden de diensten van alle collega's op die dag getoond in een Listbox L_03 in Frame F_03. Dit gaat via een 'gebeurtenisklasse' C_day.

Wanneer de gebruiker een andere maand kiest worden alle gemaakte keuzes per maand opgeslagen in het userform in de eigenschap 'Tag' van Frame F_02.

Wanneer de gebruiker het userform sluit worden alle gegevens van de gebruiker opgeslagen in 'zijn/haar' bestand met gegevens: P_username.csv.

De gebruiker kan op deze manier altijd zijn/haar gegevens invoeren/wijzigen.
De gebruiker kan nooit de gegevens van een collega wijzigen.
De gebruiker krijgt voor iedere dag een overzicht van de keuzen die collega's voor die dag hebben gemaakt.
Iedere keer als het userform geladen wordt worden de meest actuele gegevens van alle collega's geconsolideerd.

Er worden geen gegevens in Excel geschreven.
Iedere vorm van beveiliging in Excel is dan ook overbodig.

Ik hoop je nu een voldoende verklaring te hebben gegeven voor de vragen die ik stelde die jij overbodig vond.
 
Laatst bewerkt:
Beste SNB

Hartelijk dank voor je moeite die je voor mij heb gedaan om het op deze manier toch te kunnen doen.
Hoewel ik alleen maar errors (run-time error '53', can't execute in break mode) krijg als ik het bestand open en dus niet aan de praat krijg.


De mensen zijn nu na een jaar gewent aan hoe we het nu doen en daar hebben we veel energie in moeten steken.
De werkwijze die jij nu voorstelt verschilt zoveel van hoe we het nu doen dat ik dit nu echt geen optie is.
Dan maar zonder de beoogde beveiliging en vaker een backup maken.
 
Ja alles staat in 1 directory en ik start hem niet in de break mode op dat doet de file samenwerken snb.xlsb zelf.
Je hoeft er niet meer energie in te steken want het gaat, ondank al de moeite die je erin hebt gestoken en daarvoor nog hartelijk dank, niet gebruikt worden.
 
of probeer deze eens. alle codes zijn 1234
 

Bijlagen

  • blad beveiligen tegen overschrijven (1).xlsm
    87,8 KB · Weergaven: 29
In #7 is een oplossing gegeven waarmee ik ga werken.
En zoals ik al eerder zei:
Code:
De werkwijze die jij nu voorstelt verschilt zoveel van hoe we het nu doen dat ik dit nu echt geen optie is.
 
De oplossing in #7 voldoet niet geheel aan jouw vraag.
Nu zijn mensen bang dat anderen in hun regel wat gaan wijzigen.
Dit blijf nog steeds mogelijk.
Alleen de gevulde cellen kunnen niet meer gewijzigd worden. Mij lijkt dat praktisch gezien ook niet geheel wenselijk. Stel ik heb mijn rooster ingevuld. Vervolgens sluit ik het bestand maar bedenk mij en open het bestand opnieuw. Wie kan dan mijn data aanpassen?
Is het een centrale computer waar iedereen het rooster kan invullen of zijn het windows gebruikers die met een eigen login werken? In de bijlage even aanmelden via een UserForm en vervolgens kan je alleen de gegevens wijzigingen van jouw 'eigen naam'. Als het hele proces duidelijk is dan is er van alles in te verbeteren.
 

Bijlagen

  • Rij beveiligen tegen overschrijven (1).xlsm
    33 KB · Weergaven: 33
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan