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

Excel bestand als alleen lezen na bepaalde tijd

Status
Niet open voor verdere reacties.

shalhevet

Gebruiker
Lid geworden
9 okt 2007
Berichten
231
Hallo,

Ik heb een Excel bestand die ik graag als voorbeeld naar klanten wil sturen. Ze kunnen dan het bestand voor een periode gebruiken om te testen. De bedoeling is dat na de test periode het bestand niet meer te bewerken wordt maar wel nog gelezen kan worden.

In het Engels noemen ze dat " Time bombing".

Nu heb ik op internet rond gekeken en heb onderstaand code gevonden maar deze werkt niet (of doe ik iets verkeerd).

Weet iemand welke code zou ik kunnen gebruiken?

Alvast bedankt!

Code:
Sub TimeBombWithDefinedName()
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' TimeBombWithDefinedName
' This procedure uses a defined name to store this workbook's
' expiration date. If the expiration date has passed, a
' MsgBox is displayed and this workbook is closed.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim ExpirationDate As String

On Error Resume Next
ExpirationDate = Mid(ThisWorkbook.Names("ExpirationDate").Value, 2)
If Err.Number <> 0 Then
    '''''''''''''''''''''''''''''''''''''''''''
    ' Name doesn't exist. Create it.
    '''''''''''''''''''''''''''''''''''''''''''
    ExpirationDate = CStr(DateSerial(Year(Now), _
        Month(Now), Day(Now) + C_NUM_DAYS_UNTIL_EXPIRATION))
    ThisWorkbook.Names.Add Name:="ExpirationDate", _
        RefersTo:=Format(ExpirationDate, "short date"), _
        Visible:=False
End If

''''''''''''''''''''''''''''''''''''''''''''''''''''''
' If the today is past the expiration date, close the
' workbook. If the defined name didn't exist, we need
' to Save the workbook to save the newly created name.
''''''''''''''''''''''''''''''''''''''''''''''''''''''
If CDate(Now) > CDate(ExpirationDate) Then
    MsgBox "This workbook trial period has expired.", vbOKOnly
    ThisWorkbook.Close savechanges:=False
End If

End Sub
 
Volgens mij zou je gebruik moeten maken van een event om de code te triggeren, bv. het workbook_open event.

Daarnaast moet je zorgen dat je code verborgen is, de "expirationdate" niet gewijzigd kan worden, en moet de klant het workbook openen met macro's aan.
 
Probeer het eens.
Code:
Private Sub Workbook_Open()
 If Date > DateValue("11-06-2017") Then
   With ThisWorkbook
        If Not .ReadOnly Then .ChangeFileAccess xlReadOnly
          .Saved = True
        End With
  End If
End Sub
 
Melding na openen van het bestand

Hoi HSV,

Ik heb jouw code onder de ThisWorkBook geplaatst.

Nu als ik het probeer te openen (na wijzigen van de datum op mijn computer natuurlijk) krijg ik eerst een melding

Do you want to save changes before switching file status?

Als ik dan op ja klik dan wordt het bestand automatisch opgeslagen en vervolgens op alleen lezen gezet. Klik ik op nee dan gaat het bestand naar alleen lezen modus.

Ik kan echter nog steeds gegevens invoeren in het bestand. Als ik vervolgens het bestand wil opslaan kan ik het niet onder dezelfde naam maar kan ik deze alsnog wel als een kopie opslaan.

Maar dat wil ik dus helemaal niet. Ik wil dat alle sheets beveilidgd worden zodat niks meer gewijzigd kan worden. Een kopie van het bestand opslaan wil ik ook niet. De bedoeling is dat men alleen kan kijken in het bestand, verder niks.

Enig idee wat kan ik doen?
 
Dit bedoel je?
Code:
Private Sub Workbook_Open()
Dim sh As Worksheet
For Each sh In Sheets
 sh.Protect "shalhevet", , , , -1
Next sh
End Sub
Het wachtwoord is je pseudoniem.
 
Ja maar

Ja, is wel wat ik bedoel maar is niet zoals ik het wil.

Ik heb even een voorbeeld bestand gemaakt misschien dat als je het open doet zie je wat ik bedoel.
 

Bijlagen

  • Voorbeeld.xlsm
    204,9 KB · Weergaven: 27
Ik zie helaas niets; ja de oude code uit #3 staat erin, maar dat wil je niet.

[Alleen Lezen] staat er bovenaan.
 
Laatst bewerkt:
Sla ik er ook een slag naar. Zoiets?
Code:
Option Explicit

Public origValue As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Date > DateValue("11-06-2017") Then
    If Target.Count = 1 Then
        origValue = Target.Formula
    End If
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Date > DateValue("11-06-2017") Then
    If Target.Count = 1 Then
        Application.EnableEvents = False
        MsgBox "Expiratiedatum bereikt. U mag geen wijzigingen meer aanbrengen. Neem contact op met ... bla bla bla ..."
        Target.Formula = origValue
        Application.EnableEvents = True
    End If
End If
End Sub
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan