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

cellen beveiligen tegen kopieeren

Status
Niet open voor verdere reacties.

Roeldahool1

Gebruiker
Lid geworden
11 nov 2011
Berichten
52
Beste allemaal,

kolom A bestaat uit cellen met een bepaalde voorkeuzelijst geprogrammeerd (een lijst met landen waar men uit kan kiezen). De cellen in kolom A moet ik dus onbeveiligd laten tegen schrijven.

Echter, daardoor is het wel mogelijk om een cel uit kolom B (standaard witte cel, zonder opmaak of poespas) te kopieëren en over een cel uit kolom A te plakken. Daarmee verdwijnt dus de voorkeuzelijst van die cel uit kolom A.

Is het mogelijk om kolom A te beveiligen tegen het 'overplakken' van andere cellen met andere opmaak en waardes?

Groet,

Roel
 
achter desbetreffend tabblad

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 Then Application.CutCopyMode = False
End Sub

Niels
 
Als de lijst dmv validatie wordt gedaan blijft de lijst bestaan ook al wordt de cel overschreven. hoe is de lijst gebouwd?
 
achter desbetreffend tabblad

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 Then Application.CutCopyMode = False
End Sub

Niels

Kan ik deze tekst, net zoals bij andere VBL codes, gewoon plakken in een leeg VBA-project? Dat lijkt niet te werken in ieder geval. Mis ik iets?



@ Wampier:
De lijst is dmv "gegevensvalidatie > lijst" opgebouwd. Als ik een andere cel over de cel met keuzelijst heen plak, is het alsof deze nooit bestaan heeft. Lijst = foetsie.
 
Dat is vreemd, ik heb het zojuist geprobeerd in office 2007 en ik krijg het niet voor elkaar. hmm oh wacht. ik heb celldraganddrop op disabled staan :)

De code van niels moet op het specifieke werkblad, niet een module
 
het is gelukt met de code van Niels. Enorm bedankt Niels!

instant update: en wampier natuurlijk! :)
 
Geniale code! was precies wat ik nodig had. Het kopieëren van CEL A over CEL B heen is nu niet meer mogelijk.

Echter, als ik in een ander programma of in een browser een stuk tekst kopieër en die in de gevalideerde cel plak, dan kan dit gewoon. Excel protesteert niet tegen het feit dat het geplakte stukje tekst niet aan de gegevensvalidatie voldoet. Sterker nog: het plakken van de tekst verwijdert de validatie. Weg keuzelijst. Is dat ook nog tegen te gaan?
 
In module 1 om te bepalen wat er uitgeschakeld moet worden.

Code:
Sub EnableControl(Id As Integer, Enabled As Boolean)
    Dim CB     As CommandBar
    Dim C      As CommandBarControl
    For Each CB In Application.CommandBars
        Set C = CB.FindControl(Id:=Id, recursive:=True)
        If Not C Is Nothing Then C.Enabled = Enabled
    Next
End Sub

Achter het desbetreffende blad om de optie uit te schakelen en in te schakelen als er een ander blad wordt geselecteerd

Code:
Private Sub Worksheet_Deactivate()
Application.OnKey "^{v}"
    EnableControl 22, True
    EnableControl 755, True
Application.CellDragAndDrop = true
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.CellDragAndDrop = False
If Target.Column = 1 Then
Application.CutCopyMode = False
Application.OnKey "^{v}", ""
    EnableControl 22, False    ' paste
    EnableControl 755, False    ' pastespecial
Else
Application.OnKey "^{v}"
    EnableControl 22, True
    EnableControl 755, True
End If
End Sub

Achter thisworkbook om alles in te schakelen als er een ander bestand wordt geactiveerd of het bestand wordt afgesloten.

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CellDragAndDrop = true
    EnableControl 22, True    ' paste
    EnableControl 755, True    ' pastespecial
    Application.OnKey "^{v}"
End Sub

Private Sub Workbook_Deactivate()
Application.CellDragAndDrop = true
    EnableControl 22, True    ' paste
    EnableControl 755, True    ' pastespecial
    Application.OnKey "^{v}"

End Sub

Weet alleen niet hoe bij excel 2007 in het lint plakken uit te zetten.

Niels
 
Fantastisch Niels! Ik dacht eerst dat de code niet werkte omdat het nog wel mogelijk is om een willekeurige tekst in de cel te plakken. Later zag ik dat ondanks dat, de validatie in tact blijft. Geweldig!! echt super bedankt
 
hmmz... de code werkt perfect als ik IN EXCEL een platte tekst selecteer, kopieër en probeer te plakken in een door jouw code beveilgde cel. De voorkeuzelijst blijft bestaan, en dat is perfect!

Maarrr.. als ik een platte tekst selecteer in een HTML document en deze probeer te plakken, dan verliest de cel alsnog zijn voorkeuzelijst.

Het probleem is dat de mensen die met mn bestand gaan werken, gewend zijn om stukken platte tekst uit een HTML bestand te copy-pasten. Daardoor zal het bestand binnen korte tijd zijn kracht verliezen. Is het mogelijk om de functie plakken volledig uit te zetten voor een bepaalde cellenreeks, kolom, tabblad of werkmap?
 
Je kunt de mensen er toch ook op aanspreken dat er invoer regels zijn en dat niet alles mag.
Alles beveiligen heeft soms het averechts effect.

In het verkeer zijn er toch ook regels: bv 'niet links rijden'
En daar houd iedereen zich toch ook aan?

Of op het werk zul je toch ook andere regels hebben: bv 'tussen die en die tijd beginnen'
 
Ha Willem,

Klopt, maar niet helemaal.

Als ik links rij heb ik kortstondig een probleem. Zodra ik daar achter kom ga ik rechts rijden en blijft de verkeerswet van kracht dus zal men gewoon rechts blijven rijden.

Als in mijn bestand iemand één keer 'links gaat rijden' dan kan daarna iedereen links en rechts en kriskras door elkaar rijden omdat de wet van die cel niet meer van kracht is en ook niet meer van kracht wordt. Over een aantal maanden werk ik niet meer hier en kan ik de wet niet meer van kracht maken. Dan verliest het bestand cel voor cel zijn waarde.

Ik snap de zorgen omtrent 'alles beveiligen'. Maar hier is dat toch echt gewenst. als het kan tenminste...
 
Als jij er niet meer werkt is het jouw probleem niet meer.

Ik bedoelde alleen maar te zeggen dat je mensen kunt vertellen dat je het bestandje op die manier moet gaan gebruiken.
Doe ze dat niet, dan komen ze zelf met in de (grote) problemen, zeker als jij weg bent.
(net zo in de problemen als iedereen dan weer rechts en dan weer links gaat rijden.)

Een eigen stukje verantwoordelijkheid is nooit mis.
Maar als je ze die verantwoordelijkheid niet wilt/kunt/durft te geven dan zul je inderdaad strenge maatregelen moeten nemen.
 
Laatst bewerkt:
Als de gebruikers van het document er niet zorgvuldig mee omspringen, dan hebben andere mensen daar last van. Ook heeft de gebruiker geen besef van de ongemakken die bij anderen ontstaan door de fout die zij gemaakt hebben. Het probleem van gebruiker A veroorzaakt daardoor ongemakken bij vele anderen.

De vraag blijft dus:

"Is het mogelijk om de functie 'plakken' volledig uit te schakelen voor een bepaalde cellenreeks, kolom, tabblad of werkmap?"

De voorkeur gaat uit naar het uitschakelen van deze functie op een bepaald tabblad
 
Laatst bewerkt:
Hoe wordt er dan geplakt?

Ik schakel met de macro het plakken van kolom A op het tabblad waarin de code staat al uit.
Het enige wat mij niet lukt is de plakknop in de ribbon van excel 2007.

De eerder gegeven code in een bestandje geplaatst.


Bekijk bijlage plakken uit.xlsm

Niels
 
Je hebt gelijk Niels. Die code is het gewoon. Voor kolom A werkt hij inderdaad perfect. Als ik hem voor hetzelfde tabblad ook voor andere kolommen wil laten werken, hoe pas ik de code dan aan? ik heb het een en ander geprobeerd in de code achter blad1, maar niet het juiste (het is allemaal nieuw voor me :))
 
Roeldahool1,

2x het zelfde bericht plaatsen heeft geen zin hoor.
Je kunt 1 ervan zelf verwijderen.
 
Het is me gelukt.

"If Not (Target.Column = 100) Then" deed het hem. kolom 100 ligt ver buiten het bereik voor users.

bedankt!!!!!!
 
Vervang de onderste code achter het tabblad door deze en in heel het tabblad is de optie plakken uitgeschakeld.

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.CellDragAndDrop = False
Application.CutCopyMode = False
Application.OnKey "^{v}", ""
    EnableControl 22, False    ' paste
    EnableControl 755, False    ' pastespecial
End Sub

Niels
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan