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

VBA code uitschakelen en weer toestaan te werken

Status
Niet open voor verdere reacties.

bnymfk

Nieuwe gebruiker
Lid geworden
6 aug 2013
Berichten
4
Hallo,

Deze vraag kan op verschillende manieren benaderd worden denk ik, want ik zoek een soort AAN / UIT code.
En begrijp me goed de vraag is volledig gericht op het EXCEL bestand waar mee gewerkt wordt en mag niet de bedoeling hebben om EXCEL te hacken/blokkeren/ te vernaggelen of zoiets.

1. Ik ben aan het proberen een EXCEL programma te maken met VBA code en hierbij wil ik dat het na een bepaalde datum niet meer mogelijk is om de Macro buttons ( dus VBA) te gebruiken. De VBA codes moeten na die datum dus zijn uitgeschakeld. Ik zoek dus iets van code die min of meer zegt:
Als de datum voorbij 1 januari 2015 is, dan werkt de VBA code niet meer.

De code moet ervoor zorgen dat de andere VBA (die gekoppeld is aan macro buttons) niet meer kan worden bereikt ( of wordt uitgeschakeld )


Het 2e deel ( je voelt hem misschien wel aankomen)
Daarna wil ik dat mensen die het programma willen blijven gebruiken, mij moeten benaderen om de buttons weer te kunnen gebruiken.

Dus moet er bijvoorbeeld een ander EXCEL programmaatje worden geopend ( wat ze bij mij kunnen opvragen ) waarbij de datum code drie jaar kan worden opgeschoven. ( een abonnements verlenging als het ware )

============= wat achtergrond informatie =============

Ik heb het bestand zo ingericht dat mensen altijd op dezelfde opstartsheet terecht komen als ze het openen. ( zelfs als ze het zouden "saven" terwijl ze in een andere sheet staan, want men moet altijd terug naar het hoofdsheet om het .xlsm bestand af te kunnen sluiten.)
Het afsluiten kan namelijk alleen maar met een bepaalde button in de vorm van een RODE X op het afsluit sheet en daarmee wordt het bestand ook automatisch gesaved.
Aangezien door middel van VBA code de Ribbon automatisch weg wordt gehaald (en in geval van EXCEL 2003 alle werkbalken) kan men ook sheets niet opnieuw zichtbaar maken en gaan zoeken waar bepaald data verstopt is) en daarnaast heb ik voor gezorgd dat de "normale EXCEL Rode X" niet meer werkt en ook door rechts te klikken op het EXCEL venster in de taakbalk, kun je het bestand niet meer afsluiten.

De enige manier om het bestand af te sluiten is door te navigeren met de Macro buttons tot je op het aflsuitscherm terug bent, en daar staat een button ( in de vorm van een RODE X ) die de Ribbon terugbrengt, ( of alle standaard werkbalken in EXCEL 2003 ) en het bestand afsluit. Kortom binnen de mogelijkheden van EXCEL maximaal beschermd op oneigenlijk / manipulatief gebruik.
De VBA code ( alt + f11 ) is uiteraard ook password protected dus ook de iets betere EXCEL kenner komt ook daar niet in. ( ongetwijfeld zullen er vast wel een paar hackers zijn die het wel kunnen doorbreken, maar dat is dan jammer, ik richt me op de standaard computer gebruiker.)

Het opstartscherm zal vanaf dag 1 aangeven hoelang het programma nog werkt en daaruit kan men gewoon nog met de "RODE EXCEL X " afsluiten of gewoon sluiten (dat valt dus buiten de VBA code)

============= einde informatie =============

Ik heb nu deze code die een nieuwe datum kan plaatsen in het programma,

Code:
Sub Verleng1()

'Vanuit het EXCEL (abonnement verlengings programmaatje) runt deze macro door op een knop te drukken

'Ga naar het vorige open window ( = het HOOFD programma wat niet meer werkt )
    Windows(2).Activate
    Sheets("START").Select  ' sheet die de nieuwe datum krijgt
    Range("F18").Select ' cel waar de datum staat die bepaald of VBA nog werkt
    ActiveCell.FormulaR1C1 = "1/1/2015"


'terug naar programma om het abbonnement te verlengen.
    Windows(2).Activate
    Sheets("Sheet1").Select
    
End Sub
Het nadeel is dat die code meerdere keren gebruikt kan worden dus tussen gebruikers kan worden uitgewisseld.


Alternatief bedacht:
Code:
Sub Verleng2()

'Vanuit het EXCEL (abonnement verlengings programmaatje) runt deze macro door op een knop te drukken
    Sheets("Sheet2").Select  ' ga naar een sheet die de nieuwe datum heeft staan
    Range("U200").Select ' cel waar de datum staat
    Selection.Copy


'Ga naar het vorige open window ( = het HOOFD programma wat niet meer werkt )
    Windows(2).Activate
    Sheets("START").Select  ' sheet die de nieuwe datum krijgt
    Range("F18").Select ' cel waar de datum staat die de VBA af moet zetten
    ActiveSheet.Paste


'terug naar programma om het abbonnement te verlengen.
    Windows(2).Activate
    Sheets("Sheet2").Select  ' ga naar een sheet die de nieuwe datum heeft staan
    Range("U200").Select ' cel waar de datum staat
    Selection.ClearContents 'delete datum

    Sheets("Sheet1").Select
    
End Sub
Dan is de datum weg, maar kan het opgestuurde abbonnements verlengings programma alsnog een 2e keer worden gebruikt als je het opnieuw opent uit de E-mail.

Dus mijn nieuwe probleem wordt waarschijnlijk dat alle nieuwe datums er zelf in moet gaan zetten. :( en dan maakt het niet uit welke code ik gebruik.
Maar als iemand daar nog een brilliant idee voor heeft.....


Terug naar het hoofd probleem.
1. Is het mogelijk om de datum in een cel in een EXCEL sheet ( Bijvoorbeeld in Sheet: "START" in Cel "F18" ) te gebruiken om d.m.v. die datum de VBA code te deactiveren?
en als je toch op weg bent
2. is het eventueel mogelijk om 1 sub () ( dus VBA Macro ) te excluden van deze datum actie, zodat die Macro altijd werkt (ongeacht of de datum gepasseerd is.

Ik hoop dat het een beetje duidelijk is.
Alvast bedankt voor het meedenken
BNYMFK
 
Laatst bewerkt:
Ik heb niet je hele verhaal gelezen, maar als ik het goed begrijp wil je dat
If HuidigeDatum > Datum in Start.F18 then Thisworkbook.close
Zet dit als eerste regel in Thisworkbook.Open?

De enige manier om een vba programma 100% te beveiligen is mi door kern code van je app in een com-addin (een dll) te zetten en in die ddl de gebruiker te valideren (bijv mbv een website).

Misschien is dit nog wat voor je:
http://pixcels.nl/disable-shift-key-on-open/
en
http://pixcels.nl/mastermind/
 
Inderdaad, volledig beveiligen kan alleen met een separate add-in. Geef me 15 minuten met je excel sheet en ik heb het waarschijnlijk unlocked ;)

Maar goed, waarom niet een nieuwe versie doorsturen met de nieuwe data aan mensen die het langer willen gebruiken? Voor de mensen die het niet willen/kunnen kraken kun je de code overigens wel uniek maken door een berekening via een checksum door te voeren. Je kunt bijvoorbeeld de ingebouwde MD5 / SHA code gebruiken om een unieke code te genereren. Dit is niet zo ingewikkeld, maar kwaadwillenden ermee tegenhouden, daar is VBA gewoon niet sterk genoeg voor.
 
hoi Wampier en Pixcel

Bedankt voor jullie reakties
Ik ben bang dat ik geen van jullie reakties snap en hoop dat jullie iets van voorbeelden kunnen aangeven.

@pixcel
Als ik dit lees:
If HuidigeDatum > Datum in Start.F18 then Thisworkbook.close
Dan lijkt het erop dat het werkboek wordt geclosed, maar kan het daarna nog worden geopend? Maar hoe schrijf je deze code werkelijk uit? want dit pakt VBA niet

@wampier
Je zegt:
" je de code overigens wel uniek maken door een berekening via een checksum door te voeren. Je kunt bijvoorbeeld de ingebouwde MD5 / SHA code gebruiken om een unieke code te genereren. "

Hoe werkt dat.
PS.
Ik ga ervan uit dat mijn gebruikers niet uit hackers zal bestaan. hooguit een goedwillende EXCEL liefhebber.
 
Sorry, gezien je vraag ging ik er vanuit dat je meer dan elementaire vba-kennis hebt. Ik hoop dat iemand anders je kan helpen. Of doe een vba-cursus?
 
Ik heb redelijke kennis van VBA, maar benn geen programmeur. Ik kan een heleboel code goed lezen, maar weet vaak net niet hoe het zelf samen te stellen. Ik probeer een heleboel codes uit die anderen vaak bij vragen hebben weggezety, en zodoende benik heel ver gekomen door trial&error, maar dit is weer net iets anders.
Je optie doe een cursus VBA heb ik al eens gedaan, maar dan was het ofwel "to basic", of gelijk "te hoog". wat dat aangaat kan ik net niks vinden die het gat tussen basic en gevorderd dicht.

Maar goed terug naar mijn vraagstelling.
Kan iemand meverder helpen, met een voorbeeld?

Thanks
BNYMFK
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan