[OPGELOST] Macro die elke cel apart gaat beveiligen.

[OPGELOST] Macro die elke cel apart gaat beveiligen.

Berichtdoor Johan » do okt 08, 2009 9:23 am

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) 607 keer gedownload
Laatst bijgewerkt door Johan op vr okt 09, 2009 8:19 pm, in totaal 1 keer bewerkt.
Johan
 
Berichten: 496
Geregistreerd: di jun 02, 2009 11:53 pm

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

Berichtdoor GerardV » do okt 08, 2009 10:57 am

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   UitklappenInklappen
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   UitklappenInklappen
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....
GerardV
 
Berichten: 68
Geregistreerd: za sep 12, 2009 10:20 pm
Woonplaats: Nederland

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

Berichtdoor Johan » do okt 08, 2009 3:27 pm

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:
Johan
 
Berichten: 496
Geregistreerd: di jun 02, 2009 11:53 pm

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

Berichtdoor GerardV » vr okt 09, 2009 12:40 am

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   UitklappenInklappen
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....
GerardV
 
Berichten: 68
Geregistreerd: za sep 12, 2009 10:20 pm
Woonplaats: Nederland

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

Berichtdoor Johan » vr okt 09, 2009 10:03 am

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:
Johan
 
Berichten: 496
Geregistreerd: di jun 02, 2009 11:53 pm

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

Berichtdoor GerardV » vr okt 09, 2009 12:56 pm

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....
GerardV
 
Berichten: 68
Geregistreerd: za sep 12, 2009 10:20 pm
Woonplaats: Nederland

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

Berichtdoor Johan » vr okt 09, 2009 8:18 pm

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!!
Johan
 
Berichten: 496
Geregistreerd: di jun 02, 2009 11:53 pm


Keer terug naar Macro's

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 0 gasten

cron