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

Macro beveiligen

Status
Niet open voor verdere reacties.

biettie

Gebruiker
Lid geworden
26 jan 2009
Berichten
47
Kan ik er op een of andere manier voor zorgen, dat als de lezer van het excel-document geen schrijfbevoegdheid heeft, dat dan de knop van de macro niet werkt (dat hij grijs blijft oid)?
 
In ThisWorkbook:
Code:
Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly Then
    'Code om knoppen e.d. grijs te maken.
End If
End Sub

Met vriendelijke groet,


Roncancio
 
Kan ik er op een of andere manier voor zorgen, dat als de lezer van het excel-document geen schrijfbevoegdheid heeft, dat dan de knop van de macro niet werkt (dat hij grijs blijft oid)?
Wat Roncancio schrijft is een goede mogelijkheid.
Ik neem aan dat je een macroknop IN het werkblad bedoelt.
Een eenvoudige, maar geen erg 'safe' methode, is om in je macro dit op te nemen:
Code:
If ActiveWorkbook.ReadOnly Then
Exit Sub
End If
Je moet dan natuurlijk ook andere beveiligingen instellen, maar zoals je weet zijn ook die in Excel nogal gemakkelijk te doorbreken.
 
In ThisWorkbook:
Code:
Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly Then
    'Code om knoppen e.d. grijs te maken.
End If
End Sub

Met vriendelijke groet,


Roncancio

Maar hoe moet ik dan de knop dan blokkeren?
 
Maar hoe moet ik dan de knop dan blokkeren?
Als het een kop is van de werkset besturingselementen, als die zich in het eerste werkblad bevindt, en als die knop Commanbutton1 heet, kun je dit gebruiken:
Code:
Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly Then
Sheets(1).CommandButton1.Enabled = False
End If
End Sub
 
Bedankt voor de reactie. Ik heb de code geprobeerd, maar hij werkt niet zoals ik zou willen. Ook in read-only verschijnt het formulier gewoon. Wellicht moet er iets veranderen ivm met de aanroep van de macro?
Code:
Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly Then
Sheets("Herhalers").Knop1_Klikken.Enabled = False
End If
End Sub
-----------------------------------------------
Sub Knop1_Klikken()
frmGegevensAanpassen.Show
End Sub
 
Een alternatief om bij het klikken op de knop een melding te geven als het bestand ReadOnly is.
Code:
Sub Knop1_Klikken()
If ActiveWorkbook.ReadOnly = True Then
   MsgBox "U heeft geen bevoegdheid om dit formulier te bekijken.", vbCritical, "Geen toegang"
Else
    frmGegevensAanpassen.Show
End If
End Sub

Met vriendelijke groet,


Roncancio
 
Als het een kop is van de werkset besturingselementen, als die zich in het eerste werkblad bevindt, en als die knop Commanbutton1 heet, kun je dit gebruiken:
Code:
Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly Then
Sheets(1).CommandButton1.Enabled = False
End If
End Sub
Hoe bedoel je, hoe die knop heet? Het is idd een knop uit de werkset besturingselementen en hij heeft als tekst 'Gegevens aanpassen'. Is dat de naam die je bedoelt? Ik heb geprobeerd deze naam te gebruiken, maar het werkt nog niet...
 
Een alternatief om bij het klikken op de knop een melding te geven als het bestand ReadOnly is.
Code:
Sub Knop1_Klikken()
If ActiveWorkbook.ReadOnly = True Then
   MsgBox "U heeft geen bevoegdheid om dit formulier te bekijken.", vbCritical, "Geen toegang"
Else
    frmGegevensAanpassen.Show
End If
End Sub

Met vriendelijke groet,


Roncancio
Bedankt, Roncancio.
Dit werkt prima! Weer een probleem minder. Bedankt, jongens!:thumb:
 
Ik heb de code geprobeerd, maar hij werkt niet zoals ik zou willen. Ook in read-only verschijnt het formulier gewoon. Wellicht moet er iets veranderen ivm met de aanroep van de macro?
Ik ben in mijn vorige berichten ervan uitgegaan dat het om een knop ging in het werkblad. Uit je reactie blijkt nu (althans zo begrijp ik het) dat het om een knop gaat in een formulier. En bovendien schrijf je nu dat je niet alleen de knop wil uitschakelen, maar het formulier (met daarop de knop neem ik aan) niet wil laten verschijnen. Dat is een andere opgave !
Wijzig je macro "Sub Knop_Klikken()" als volgt:
Code:
Sub Knop1_Klikken()
If ActiveWorkbook.ReadOnly Then
frmGegevensAanpassen.Enabled = False
Else
frmGegevensAanpassen.Show
End IF
End Sub
Als de knop in het formulier staat dat je niet wil laten verschijnen, dan hoef je de knop niet uit te schakelen, want gebruikers kunnen er dan toch niet op klikken. In dat geval kan de code daaromtrent in "Private Sub Workbook_Open()" vervallen.
 
Hoe bedoel je, hoe die knop heet? Het is idd een knop uit de werkset besturingselementen en hij heeft als tekst 'Gegevens aanpassen'. Is dat de naam die je bedoelt? Ik heb geprobeerd deze naam te gebruiken, maar het werkt nog niet...
Een antwoord in de marge van dit topic, want je vraag is opgelost.
Maar om antwoord te geven op je vraag: "Hoe bedoel je hoe die knop heet?", het volgende:

Voor Excel (en vba) is de naam van de knop de naam die bij de eigenschappen van de knop staat vermeld. Die naam is niet noodzakelijk gelijk aan de tekst die op de knop staat. Door de tekst op de knop te wijzigen, verander je de naam van de knop niet. Dat kan een eerste reden zijn dat jouw aanpassing niet werkte.

En verder: als het niet om zonder meer een knop in een blad gaat, maar om een knop op een formulier, dan moet
Sheets(1).CommandButton1.Enabled = False
gewijzigd worden in:
Userform1.Commandbutton1.Enabled = False
(dit in de veronderstelling dat Userform1 de echte naam van het formulier is en CommanButton1 de echte naam van de knop). Dat kan een tweede reden zijn waarom jouw aanpassing niet werkte.

Bij de eerste beantworoding van je vraag waren de namen van het formulier en van de knop niet bekend. Daarom gebruikte ik daarvoor de namen Userform1 en Commandbutton1, omdat dat de namen zijn die bij plaatsing van de objecten er standaard aan worden gegeven.

Bovenstaande louter terzijde, want als je het formulier mét de knop verbergt, dan hoef je met de knop niets te doen (zoals ik hierboven al schreef).
Als je bij je vraag een voorbeeldbestandje had gevoegd, zou je vraag waarschijnlijk duidelijker geweest zijn en de antwoorden navenant.
 
dank je, Zapatr, voor dit leermoment. Het is een knop die op het werkblad staat, niet een op het formulier. Ik heb nog gekeken waar ik de naam van de knop dan kan vinden, maar het enige dat ik kan is in de ontwerpmodus op de rechtermuisknop klikken en 'besturingselement opmaken' kiezen. Maar daar vind ik geen naam. Ik krijg het idee dat ik gewoon zo'n muts ben die weer helemaal niets snapt van excel....
 
Het is een knop die op het werkblad staat, niet een op het formulier. Ik heb nog gekeken waar ik de naam van de knop dan kan vinden, maar het enige dat ik kan is in de ontwerpmodus op de rechtermuisknop klikken en 'besturingselement opmaken' kiezen. Maar daar vind ik geen naam. Ik krijg het idee dat ik gewoon zo'n muts ben die weer helemaal niets snapt van excel....
Nee hoor, je begrijpt het best. Het is gewoon een weetje en dat heeft niets met intelligentie te maken.
Rechtsklik in de ontwerpmodus op de knop en kies in het dan verschijnende menu: "Eigenschappen". Op het tabblad "Algemeen" zie je dan als eerste staan: (Name) en wat daarnaast staat is de echte naam van de knop (standaard is dat Commandbutton1). Die naam zie je ook helemaal bovenaan staan (Commandbutton1 Commandbutton). Wijzig je de naam bij (Name), dan verandert die naam ook bovenaan. Als je de naam van de knop in je vba-code nodig hebt, dan is het díe naam die je moet gebruiken. De tekst die op de knop staat, vind je in hetzelfde venster naast "Caption" (en die kun je daar ook wijzigen). Voor Excel en vba wordt "Caption" beschouwd als een opschrift, maar niet als de naam van de knop. Als je de knop plaatst, dan geeft Excel die standaard de naam Commandbutton1 en is het opschrift op de knop ook Commandbutton1. Begrijpelijk dat dat voor verwarring zorgt.
Hopelijk is het nu iets duidelijker.
 
Laatst bewerkt:
Zeker, ik ben er nu ook achter dat ik een formulierbesturingselement heb gemaakt (knop) en daaraan een macro heb toegewezen. Jouw uitleg is van toepassing op een activeX-besturingselement. Ik ben weer helemaal bij, bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan