[word 2007] beveiligingsmacro *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • niels100
  • Registratie: September 2009
  • Laatst online: 18-12-2023
hallo,

ik ben bezig met een macro te maken om gemakkelijk een document te beveiligen.
om de beveiliging in te schakelen heb ik:

Visual Basic:
1
2
3
4
5
6
7
8
9
Sub Callback13(control As IRibbonControl)

    If ActiveDocument.ProtectionType = wdNoProtection Then
    ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=InputBox("Voer een wachtwoord in om de beveiliging in te schakelen", "beveiliging inschakelen", "")

    End If
    MsgBox "Beveiliging ingeschakeld"

End Sub


en om hem weer uit te schakelen heb ik:

Visual Basic:
1
2
3
4
5
6
7
8
Sub Callback14(control As IRibbonControl)

    If ActiveDocument.ProtectionType <> wdNoProtection Then
    ActiveDocument.Unprotect Password:=InputBox("Voer een wachtwoord in om de beveiliging uit te schakelen", "beveiliging uischakelen", "")
    End If
    MsgBox "beveiliging uitgeschakeld"
    
End Sub


deze code werkt wel alleen niet goed.
als je bijvoorbeeld de macro om hem te beveiligen start en vervolgens op annuleren klikt. wordt het document beveiligt. of als je de beveilging uit wilt schakelen en je typt een fout wachtwoord krijg je een vb melding, zou dit ook kunnen in een msgbox?

ik krijg het maar niet voor elkaar.

alvast bedankt!:D

[ Voor 0% gewijzigd door Verwijderd op 18-05-2010 13:59 . Reden: codetags aub! ]


Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
Waarom sleep je niet gewoon de standaard 'protect document' functie in een van balken?

In jouw methode wordt het wachtwoord zichtbaar, en zonder controle ingevoerd. 1 typfout en een gebruiker kan z'n document niet meer unprotecten :)

Maar als je het per se zo wilt doen; zet het wachtwoord dan eerst in een variabele, en test die op inhoud voordat je het document beveiligt.

Acties:
  • 0 Henk 'm!

  • niels100
  • Registratie: September 2009
  • Laatst online: 18-12-2023
en waar kan ik de standaard 'protect document' functie vinden?

Acties:
  • 0 Henk 'm!

  • niels100
  • Registratie: September 2009
  • Laatst online: 18-12-2023
iemand anders miss?

Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
ik zag later pas dat het om 2007-versie ging, sorry ik weet te weinig van het customizen van de ribbon.

Ik lees wel iets over een 'quick access toolbar' waar je zelf standaardfuncties aan toe moet kunnen voegen;
http://office.microsoft.com/en-us/word/HA102277541033.aspx

Je kan daar de beveiliging-button in slepen, dan staat hij altijd in beeld.

Acties:
  • 0 Henk 'm!

  • niels100
  • Registratie: September 2009
  • Laatst online: 18-12-2023
ja dan staat hij in de quick access toolbar, maar zou ik hem ook in een zelf gemaakte tab zetten?

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Kan vast, maar waarom zou je :)

Maar goed, het probleem van je code is dat je niet aan foutafhandeling doet. Het simpelste is het password in een variabele zetten en checken of die variabele niet leeg is (dat is wat er gebeurt als je op annnuleren drukt).

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • niels100
  • Registratie: September 2009
  • Laatst online: 18-12-2023
ik ben echt een noobie op het gebied van variabele zou je/iemand miss een simpel voorbeeldje maken?

alvast bedankt

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Aardig bedoeld: als je jezelf n00b noemt wil je je niet bezig gaan houden met beveiliging maar eerst zorgen dat je de basics kent en weet waatr je moet zoeken voor de rest.

paswd = input...
... Password:=paswd ...

Maar check dus de VBA-help eerst om te zien hoe variabelen werken.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • niels100
  • Registratie: September 2009
  • Laatst online: 18-12-2023
zo iets?:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
Sub TestNumeriek()
    Dim StrPassw As String

    StrPassw = "123"
    
    If ActiveDocument.ProtectionType = wdNoProtection Then
    ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=InputBox("Voer een wachtwoord in om de beveiliging in te schakelen", "beveiliging inschakelen", "")
    MsgBox "beveiliging ingeschakeld"
    Else
        MsgBox "beveiliging mislukt"
    End If
End Sub

[ Voor 1% gewijzigd door Verwijderd op 18-05-2010 13:59 . Reden: codetags aub! ]


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Nee :P

Lees eens 'in mensentaal' wat hier nu staat: je doet helemaal niets met strPassw terwijl je nog steeds binnen de protect-methode met de inputbox()-functie het password uitvraagt. Haal dat er dus buiten. En doe wat met de input: IF strPasswd="" THEN stoppen met foutmelding ELSE beveiligen met strPasswd

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • niels100
  • Registratie: September 2009
  • Laatst online: 18-12-2023
lijkt dit er meer op?:

Sub TestNumeriek()
Dim StrPassw As String

StrPassw = "123"

If strPasswd = "" Then
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
MsgBox "beveiliging ingeschakeld"

End Sub

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Leg eens regel-voor-regel aan jezelf (en ons) uit wat hier nu staat, dan zie je meteen waar het fout gaat :)

offtopic:
Ik ben me er van bewust dat ik wat schoolmeesterig overkom, maar ik ga hier geen kant-en-klaar antwoord geven. Dat is namelijk - zeker als het over beveiliging gaat - levensgevaarlijk (spreekwoordelijk, al heb ik dat ook een keer letterlijk meegemaakt bij een sheet waar medicijn-inname met Excel werd berekend, incl denkfoutje in de VBA).

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 01:48

Reptile209

- gers -

offtopic:
Kijk eens naar Overzicht van UBB-codes #tag_code voor het gebruik van [code]-tags, met name [code=vb]. Dat maakt je posts wat leesbaarder.


Als je (nog) niet helemaal snapt wat je voorbeeld nu wel of niet doet, zet dan eens een breakpoint in het begin van je functie. Bij het uitvoeren doorloop je dan je code stap voor stap (F8). Na iedere stap kijk je wat er met je variabelen gebeurd is, welke route door een If...Then...Else...End If gelopen wordt (en waarom).

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
Wat F_J_K zegt. En daarnaast; ook nadat je controle op invoer van een wachtwoord hebt toegevoegd; er blijven nadelen; het wachtwoord wordt zichtbaar voor iedereen ingevoerd (ipv *****). Je wil daarnaast ook een gebruikerscontrole ('Voer het wachtwoord een tweede maal in') om zeker te weten dat er geen typo gemaakt is.

Maar ja, dan zit je gewoon de standaardfunctionaliteit van Word na te maken... Maar goed, wel een goede oefening in VBA ;)

Acties:
  • 0 Henk 'm!

  • niels100
  • Registratie: September 2009
  • Laatst online: 18-12-2023
F_J_K schreef op dinsdag 18 mei 2010 @ 12:36:
Leg eens regel-voor-regel aan jezelf (en ons) uit wat hier nu staat, dan zie je meteen waar het fout gaat :)

offtopic:
Ik ben me er van bewust dat ik wat schoolmeesterig overkom, maar ik ga hier geen kant-en-klaar antwoord geven. Dat is namelijk - zeker als het over beveiliging gaat - levensgevaarlijk (spreekwoordelijk, al heb ik dat ook een keer letterlijk meegemaakt bij een sheet waar medicijn-inname met Excel werd berekend, incl denkfoutje in de VBA).
eerst geef je aan dat strpassw een string is.
vervolgens zeg je dat strpassw 123 is.
vervolgens zeg je als strpassw ""(niks) is dan beveilig het document als alleen lezen.
en dan krijg je een msgbox.

en wat gaat er fout?? of leg ik het nu verkeerd uit??

Acties:
  • 0 Henk 'm!

Verwijderd

de probleemstelling is inderdaad vrij nutteloos, ze bootst gewoon de standaard functionaliteit van word na.

het probleem bij de vba-code is dat de opdracht activedocument.protect altijd uitgevoerd wordt, ongeacht het feit of je de inputbox bevestigt met een al dan niet leeg wachtwoord, of annuleert.
de oplossing is dus de invoer van het wachtwoord testen alvorens de protect (of unprotect) opdracht uitgevoerd wordt.

Acties:
  • 0 Henk 'm!

  • niels100
  • Registratie: September 2009
  • Laatst online: 18-12-2023
maar dat doe je nu toch al door middel van:

If strPasswd = "" Then
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
MsgBox "beveiliging ingeschakeld"

of zeg ik nu iets heel geks?

Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
Nee, niet gek. Maar ik denk dat de anderen redeneren 'als er geen wachtwoord ingevoerd wordt, moet het document ook niet beveiligd worden', maar op zich hoeft dat niet zo te zijn. Als een gebruiker besluit geen wachtwoord in te voeren, kan het document nog steeds beveiligd worden. Niets mis mee.

Je code is alleen nog niet af. Er moet nog iets onder als er wél een wachtwoord ingevoerd is;

Visual Basic:
1
2
3
4
Else
    ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=strPasswd
    MsgBox "beveiliging ingeschakeld met wachtwoord " & strPasswd
End if


Nu heb je alleen nog de situatie dat het document (zonder wachtwoord) beveiligd wordt wanneer een gebruiker bij de inputbox op cancel klikt, en dat is wat onlogisch. Bij cancel verwacht je dat de hele handeling stopgezet wordt.

Acties:
  • 0 Henk 'm!

  • niels100
  • Registratie: September 2009
  • Laatst online: 18-12-2023
hehe ze zijn er!:D

bedankt!

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

En, mocht iemand anders het ooit ook zo willen gaan doen en dit topic tegenkomt in de search, wat is het resultaat geworden?

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)

Pagina: 1