• 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 uitvoeren na een bepaalde tijd

Status
Niet open voor verdere reacties.

westra77

Gebruiker
Lid geworden
2 mrt 2007
Berichten
149
hallo
ik wil graag dat een werkblad na een bepaalde datum onbruikbaar wordt.
bv door een macro die alle gegevens verwijdert nadat het bestand 100 keer is geopend.
of op een bepaalde tijd bv 1-1-2010
of een macro die alle aanwezige macro's uitbruikbaar maakt.
is dit mogelijk?
 
Dan krijg je zoiets.

Cobbe
 
Laatst bewerkt:
deze oplossing voldoet niet helemaal, ik wil namelijk dat zonder een messagebox op een bepaalde datum, het bestand onbruikbaar wordt. De gebruiker mag hier geen invloed op kunnen uit oefenen.
 
Deze code verwijdert alle lijnen uit de VBE in ThisWorkbook

Code:
Private Sub Workbook_Open()
With Application.VBE.ActiveVBProject.VBComponents("Thisworkbook").CodeModule
      .DeleteLines 1, .CountOfLines
   End With
End Sub

ThisWorkbook kunnen je vervangen door het tabblad of je kunt deze bijvoegen.
Dus die code enkele keren uitvoeren.

En niet vergeten Application.save bij te voegen anders dient het tot niets.

Let dus op wat ge doet en je moet nog het tijdstip van werken invoegen.

Cobbe
 
Laatst bewerkt:
alvast bedankt
als ik op 1-1-2010 wil dat deze code wordt uitgevoerdt
hoe plaatst het tijdstip dan in de code
 
Code:
Private Sub Workbook_Open()
einddatum = "01/01/2010"
    If Date < einddatum Then Exit Sub
With Application
    .DisplayAlerts = False
    .VBE.ActiveVBProject.VBComponents("Thisworkbook").CodeModule.DeleteLines 1, .CountOfLines
    .ActiveWorkbook.Save
    .Quit
End With
End Sub

Wel ook je VBA-code afschermen, alhoewel dit ook geen soelaas meer biedt.

Cobbe
 
zoals je al in de gaten had ben ik geen ster in vba, de code die je hebt geschreven is echter wel goed begrijpelijk.
Het doel is dat klanten ons excel bestand gaan gebruiken.
Indien deze niet meer klant zijn in 2010, dient het bestand niet meer te werken. zodat ze in de toekomst niet verder kunnen werken met door ons aangeleverde progamma's
de overige klanten ontvangen van ons ons in 2010 een nieuwe versie.
ik heb al een code met:
Private Sub Workbook_Open()
kan ik deze code er gewoon onder plakken?

en wat bedoel je met:

Wel ook je VBA-code afschermen, alhoewel dit ook geen soelaas meer biedt.
hopelijk is de bedoeling duidelijk en wil je me ook met het laatste stukje vba helpen
alvast bedankt
 
Die code daar onder plakken zal niet lukken.
Alles hangt af van de code die je nu in Thisworkbook_Open hebt staan.

Als je de VBA-code niet afschermt met een wachtwoord kan eenieder dat toch aanpasen.

Dat wachtwoord kun je plaatsen door in de VBE het VBA-project te selecteren en via Eigenschappen het wachtwoord ingeven.

Cobbe
 
alvast bedankt voor de hulp:thumb:
ik kom er echter nog niet uit::(
de macro code:
Code:
Sub DeleteThisModule()

einddatum = "01/01/2010"
    If Date < einddatum Then Exit Sub

Dim vbCom As Object

     

    MsgBox "het bestand is onbruikbaar, bel voor een nieuwe versie "

     

    Set vbCom = Application.VBE.ActiveVBProject.VBComponents

    
 vbCom.Remove VBComponent:= _

   
    vbCom.Item ("Module1")

     
End Sub
werkt niet
ik krijg een foutmelding bij
Code:
vbCom.Remove VBComponent:= _

de bedoeling is dat indien de datum van 1-1-2010 is bereikt de macro start
niet bij Private Sub Workbook_Open().

In het scherm (blad 1 mag eerst zichtbaar worden), dient de melding
Code:
MsgBox "het bestand is onbruikbaar, bel voor een nieuwe versie "
te verschijnen.
indien de datum 1-1-2010 nog niet is bereikt dienen alle overige macro's nog gewoon te werken.
de code moet dus eerst controleren of de datum 1-1-2010 is bereikt en daarna module("naam") verwijderen. het mooiste zou zijn als de code automatisch wordt aangeroepen, zonder macro knop.

Ik weet niet of bovenstaande mogelijk is, hopelijk willen jullie me verder helpen dit probleem op te lossen.
 
Westra77, TEST VOLGENDE CODE OP EEN KOPIE VAN JE BESTAND ( dit is niet roepen maar een stevige waarschuwing)

In ThisWorkbook
Code:
Private Sub Workbook_Open()
Call DeleteThisModule
End Sub

Bovenaan in module Naam
Code:
Sub DeleteThisModule()
Dim vbCom As Object
'einddatum = 40179 'vertegenwoordigt 01/01/2010
einddatum = 39774 'vertegenwoordigt 22/11/2008
    If Date < einddatum Then Exit Sub
MsgBox "het bestand is onbruikbaar, bel voor een nieuwe versie "

Set vbCom = Application.VBE.ActiveVBProject.VBComponents
    vbCom.Remove VBComponent:= _
        vbCom.Item("Naam")
End Sub

Sla je bestand op en sluit af. Heropen je bestand en kijk maar eens in VBA-project

@Cobbe Je gaf eindatum door als string en daardoor werd geen vergelijking gemaakt met Date :thumb:

Mvg

Rudi
 
Laatst bewerkt:
dank je rubbi en cobbe
de code werkt bijna perfect.:thumb:
ik heb in nu drie modules:
module 1 bevat: Sub DeleteThisModule()
module 2 een code die aan een macro knop hangt, en module drie die ook aan een macro knop hangt.
vbCom.Remove VBComponent:= _
vbCom.Item("module3")
vbCom.Item ("module2")
vbCom.Item ("module1")

module 2 en 1 worden echter niet verwijdert.
het verwijderen van module 1 (de delete mode) is van belang, omdat anders nadat het bestand wederom wordt geopend de macro vastloopt.:confuse

daarnaast heb ik onderstaande code er tussen geplaatst om te zorgen dat ook de bladen 2 en 3 (met formules) worden gewist. dit werkt echter niet.:(

Code:
Sheets("Blad2").Select
    Cells.Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Selection.Interior.ColorIndex = xlNone
    Selection.Font.ColorIndex = 0
    Selection.ClearContents
Sheets("Blad1").Select
Cells.Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Selection.Interior.ColorIndex = xlNone
    Selection.Font.ColorIndex = 0
    Selection.ClearContents
    Range("a1").Select
 
Laatst bewerkt:
ik heb nu zelf de code aangepast volgens onderstaand vb
deze werkt prima, maar graag hoop ik dat 1 van jullie deze wil "nakijken"
alvast bedankt

Code:
Sub DeleteThisModule()
Dim vbCom As Object
'einddatum = 40179 'vertegenwoordigt 01/01/2010
einddatum = 39774 'vertegenwoordigt 23/11/2008
    If Date < einddatum Then Exit Sub
strprompt = "De datum van het bestand is verlopen," & vbCrLf & "Neem contact op met uw specialist voor een nieuwe versie"
MsgBox strprompt, vbCritical, "beveiligingswaarschuwing"

Dim c As Range
    
    For Each c In Sheets("blad2").Range("a1:d5")
    c.Borders(xlDiagonalDown).LineStyle = xlNone
    c.Borders(xlDiagonalUp).LineStyle = xlNone
    c.Borders(xlEdgeLeft).LineStyle = xlNone
    c.Borders(xlEdgeTop).LineStyle = xlNone
    c.Borders(xlEdgeBottom).LineStyle = xlNone
    c.Borders(xlEdgeRight).LineStyle = xlNone
    c.Borders(xlInsideVertical).LineStyle = xlNone
    c.Borders(xlInsideHorizontal).LineStyle = xlNone
    c.Interior.ColorIndex = xlNone
    c.Font.ColorIndex = 0
    c.ClearContents
    Next

Set vbCom = Application.VBE.ActiveVBProject.VBComponents
    vbCom.Remove VBComponent:= _
        vbCom.Item("module3")
    vbCom.Remove VBComponent:= _
        vbCom.Item("module2")
    vbCom.Remove VBComponent:= _
        vbCom.Item("module1")

ActiveWorkbook.Save
End Sub
 
Laatst bewerkt:
Westra, open bijlage en bekijk modules en kader op blad2. Wijzig nu datum in thisworkbook naar het verleden, sla op en open terug. Sluit en open opnieuw. Klinkt belachelijk, maar ja

Mvg

Rudi
 

Bijlagen

westra77,

Het werkt inderdaad maar ik moest deze code in This Workbook zetten en kreeg toen pas bij het opstarten de melding.
Code:
Sub Workbook_Open()
  DeleteThisModule
End Sub
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan