[OPGELOST] Macro die elke cel apart gaat beveiligen.

Johan
Berichten: 496
Lid geworden op: di jun 02, 2009 11:53 pm

[OPGELOST] Macro die elke cel apart gaat beveiligen.

Bericht door Johan »

In de bijlage vindt u "Voorbeeld.ods" terug. Indien u deze bijlage opent, ziet u een sudokuraster op blad 1. Naast dit raster staat een knop met het opschrift "Opmaken". De bedoeling is dat als men op deze knop klikt, een macro actief wordt, die elke cel gaat beveiligen in het sudokuraster die een cijfer bevat. Momenteel is geen enkele cel in het sudokuraster beveiligd. De macro mag automatisch het werkblad beveiligen, zodat de reeds ingevulde cijfers niet meer kunnen aangepast worden. Het sudokuraster heb ik gekozen omdat ik het een prachtig voorbeeld vindt voor deze specifieke macro. :mrgreen: Hartelijk dank voor uw aandacht.
Bijlagen
Voorbeeld.ods
(12.05 KiB) 905 keer gedownload
Laatst gewijzigd door Johan op vr okt 09, 2009 8:19 pm, 1 keer totaal gewijzigd.
GerardV
Berichten: 68
Lid geworden op: za sep 12, 2009 10:20 pm
Locatie: Nederland

Re: Macro die elke cel apart gaat beveiligen naargelang inhoud.

Bericht door GerardV »

Hallo johan,

Er zijn twee stappen die je moet nemen om een cel te beveiligen. Je moet de cel beveiligen met CellProtection.IsLocked = True en daarna moet je het blad beveiligen door .protect() methode aan te roepen.
Hier een voorbeeld van hoe je Cell B2 zou kunnen beveiligen.

Code: Selecteer alles

Dim CellProtect as New "com.sun.star.util.CellProtection"
Doc = ThisComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1,1)

Sheet.Protect("Password")
CellProtect.IsLocked = True
'Andere elementen, voor het geval je deze ook zou willen veranderen:
'CellProtect.IsFormulaHidden = False
'CellProtect.IsHidden = False
'CellProtect.IsPrintHidden = False

Cell.CellProtection = CellProtect
Om de beveiliging van het blad / cel op te heffen:

Code: Selecteer alles

Sheet.unProtect("Password")
CellProtect.IsLocked = False
Cell.CellProtection = CellProtect
Groeten
Gerard
OpenOffice 3.1 op Windows Vista
Nog niet gehinderd door enige vorm van kennis....
Johan
Berichten: 496
Lid geworden op: di jun 02, 2009 11:53 pm

Re: Macro die elke cel apart gaat beveiligen naargelang inhoud.

Bericht door Johan »

Eén enkele cel of een samenhangende groep cellen gaan beveiligen gaat vlug. Daarvoor heb ik geen macro nodig. De macro moet kijken of er in een vooropgestelde groep cellen een waarde staat. Bevat cel B1 een waarde, dan moet deze worden beveiligd. Is cel B1 echter leeg, dan mag er niks aan veranderen en moet de volgende cel van de vooropgestelde groep aan dezelfde test worden onderworpen. Dit tot dat iedere cel van de vooropgestelde groep cellen aan deze test is onderworpen. Als vervolgens het rekenblad wordt beveiligd, kan men in het voorbeeld de nu reeds ingevulde cijfers niet meer gaan aanpassen. De lege cellen die tussenin liggen kunnen vervolgens wel nog worden ingevuld, daar deze niet beveiligd werden. Zodoende kan men met het gegeven voorbeeld een soort van sudoku wedstrijdje online spelen, waarbij één persoon de opgave aanmaakt. Ik weet niet of het mogelijk is om een macro te schrijven die elke cel van een vooropgestelde groep gaat overlopen. Mogelijks is er een scriptje nodig per cel? Dan heb ik aan één scriptje voldoende. Ik zal het kopiëren en plakken en iedere keer een andere cel laten testen totdat de groep cellen is overlopen. Er zal gelijk hoe moeten gewerkt worden met "IF", daar er een waarde dient in de cel te staan alvorens deze te beveiligen. Hopelijk begrijpt u waar ik naartoe wil? :roll:
GerardV
Berichten: 68
Lid geworden op: za sep 12, 2009 10:20 pm
Locatie: Nederland

Re: Macro die elke cel apart gaat beveiligen naargelang inhoud.

Bericht door GerardV »

Johan,

Ik had je vraag wel begrepen, wilde echter niet meteen alles verklappen..... :mrgreen:
Kan je wel wat verder op weg helpen hoor, je moet het gebied wat je wilt controleren, nalopen.

Je hebt in je voorbeeld van de Sudocu dus 9 rijen met 9 kolommen.
Om het makkelijk te houden kun je dus bijvoorbeeld met een For..Next funktie de rijen nalopen en door een tweede For...Next funktie in de eerste te nesten de kolommen nalopen.
Je kunt bijvoorbeeld kijken of er een getal ongelijk aan 0 (geen waarde is 0) in de cel staat, is dat het geval, dan de cel beveiligen...

Dus bijvoorbeeld:

Code: Selecteer alles

Sub BeveiligVolleCellen
    Dim CellProtect as New "com.sun.star.util.CellProtection"
    Doc = ThisComponent
    Sheet = Doc.Sheets(0)
	CellProtect.IsLocked = True
	Sheet.Protect("Password")
	
	'Rij 2 t/m 10 en kolom B t/m J
    For x = 1 to 9
    	For y = 1 to 9
			Cell = Sheet.getCellByPosition(y,x)
         	CellVal = Cell.getValue()   'Waarde uit de cel lezen
         	
			'Als de waarde 0 is, is staat er dus geen getal moet deze worden beveiligd.
			If CellVal <> 0 then
    			Cell.CellProtection = CellProtect
    		endif
    	Next
    Next
End Sub
OpenOffice 3.1 op Windows Vista
Nog niet gehinderd door enige vorm van kennis....
Johan
Berichten: 496
Lid geworden op: di jun 02, 2009 11:53 pm

Re: Macro die elke cel apart gaat beveiligen naargelang inhoud.

Bericht door Johan »

Hartelijk dank!! Deze macro doet inderdaad het gevraagde. Maar toch een bijkomend vraagje: Als ik het rekenblad ingevuld terug krijg, kan ik dan de beveiliging opheffen zonder een macro te gebruiken? Zojuist heb ik dit geprobeerd maar dit blijkt me niet te lukken.

Nog een vraagje uit bewondering voor uw kennis: waar heeft u dit geleerd? U lijkt mij er echt wel een crack in te zijn. :roll: :ugeek:
GerardV
Berichten: 68
Lid geworden op: za sep 12, 2009 10:20 pm
Locatie: Nederland

Re: Macro die elke cel apart gaat beveiligen naargelang inhoud.

Bericht door GerardV »

Johan schreef:........ kan ik dan de beveiliging opheffen zonder een macro te gebruiken?
Ja dat kan.
Ga daarvoor naar : Extra -> Document beveiligen -> vBlad.....
Je krijgt nu een Dialoog 'Bladbeveiliging opheffen' waar je het password kan invullen wat je in de macro gebruikt voor het beveiligen van het blad. In het Voorbeeld is dat dus Password. Na het drukken van de OK knop is je blad beveiliging opgeheven.
Je kunt ook op deze manier ook je blad weer beveiligen...
Johan schreef: Nog een vraagje uit bewondering voor uw kennis: waar heeft u dit geleerd? U lijkt mij er echt wel een crack in te zijn. :roll: :ugeek:
Een crack ben ik echt niet hoor, heb er nooit enige cursus in gedaan. Ben ooit begonnen met VBA schrijven voor Excel.
Het belangrijkste is dat je precies weet wat je wilt gaan doen met een macro, dat schrijf ik eerst op. Vervolgens begin ik deze op te breken in blokken, welke ik dan in basic programmeer. Ik laat me niet stoppen als ik iets niet weet of snap, dan zoek ik net zolang tot ik de gewenste oplossing vind. Hiervoor gebruik ik onder andere de Help van OpenOffice.org, de forums en de rest van het internet als informatie bron.

Gerard
OpenOffice 3.1 op Windows Vista
Nog niet gehinderd door enige vorm van kennis....
Johan
Berichten: 496
Lid geworden op: di jun 02, 2009 11:53 pm

Re: Macro die elke cel apart gaat beveiligen naargelang inhoud.

Bericht door Johan »

Bijna had ik hier geplaatst dat op deze manier de beveiliging van het blad niet kon opgeheven worden. Zowel deze ochtend als nu werd mijn password niet aanvaard om de beveiliging van het blad op te heffen. Daar ik traag van begrip ben, heb ik nu pas door dat het Password dient te zijn! (Met een hoofdletter dus.) Daar ik deze dwaze fout nog heb gemaakt, is dit nogmaals een bewijs dat ik geen ezel ben. Een ezel stoot zich nu eenmaal geen tweemaal aan dezelfde steen! :D

VBA voor Excel was voor mij een stuk gemakkelijker aan te leren. Een macro om cellen te overlopen doe je met "For each c". In OoO heb ik me reeds suf gezocht om een oplossing te vinden. U slaagt waar ik faal!! 8-) Hartelijk dank!!
Plaats reactie