Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1108to1112
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datei öffnen

Datei öffnen
Werner
Hallo nochmal,
hier bin ich schon wieder mit einen anderen Thema....
ich möchte das die Datei 20 mal geöffnet werden kann, und danach erst mit Passwort.
D.h. wenn die Datei das 21. mal geöffnet wird muß ein Passwort eingegeben werden und nur wenn das Passwort stimmt kann die Datei geöffnet werden, ansonsten wird sie wieder geschlossen.
Wie kann ich das Problem Lösen?
Gruß Werner

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Datei öffnen
12.10.2009 22:34:22
Jogy
Hi.
Als möglicher Ansatz:
1. Alle Blätter bis auf ein Hinweisblatt auf xlVeryHidden - das als Sicherung, damit die Makros auch aktiviert
2. In Workbook_Open ein Code, der die Anzahl der Öffnungen in ein verstecktes (am besten auch mit xlVeryHidden) Arbeitsblatt schreibt und die Arbeitsmappe direkt speichert. Bei der 20. Öffnung muss dann vor dem Speichern noch mit ActiveWorkbook.Password das Passwort zum Öffnen gesetzt werden. Beim 21. Öffnen mußt Du das und den Zähler für die Öffnungen vor dem automatischen Speichern wieder zurücksetzen
3. Danach in Workbook_Open noch ein Code, der das Hinweisblatt ausblendet und die anderen einblendet
4. Das Workbook_BeforeSave Ereignis muss die Speicherung abbrechen (Cancel = True), die Arbeitsblätter dann wieder aus- und das Hinweisblatt einblenden, die Datei dann speichern (hier bei Application.EnableEvents = False und danach wieder auf True) und anschließend wieder die Arbeitsblätter ein- und das Hinweisblatt ausblenden.
5. Das VBA Projekt muss mit Passowrt geschützt werden.
Gruss, Jogy
Anzeige
AW: Datei öffnen
12.10.2009 23:08:40
Werner
Hallo Jogy,
geht das nicht einfacher ? gibt es keine Möglichkeit mit einen Zähler, d.h. bei jeden öffnen wird der Zähler um 1 hochgezählt und wenn er die 20 erreicht hat ist das öffnen nur mit passwort möglich (ich meine so wie bei einer Testversion).
Gruß Werner
AW: Datei öffnen
13.10.2009 00:54:36
Daniel
Hi
das Problem ist, daß die von dir gewünschte Schutzfunktion nur mit einem Makro möglich ist.
allerdings hat der Anwender die Möglichkeit, die Makros beim Öffnen zu deaktivieren und damit deinen Schutz auszuschalten.
dh. wenn du die Datei wirklich schützen willst, musst du das ganze so gestalten, daß die Datei ohne aktivierte Makros nicht sinnvoll nutzbar ist und das geht mit VBA-Bordmitteln derzeit nicht einfacher (zumindest ist und bisher nichts besseres eingefallen, und die Fragestellung tritt immer wieder mal auf.
Gruß, Daniel
Anzeige
VBA Code in BSP-Datei ist geschützt :-(
13.10.2009 12:03:13
NoNet
Hallo Jogy,
Der VBA-Code in Deiner Beispiel-Mappe ist per Passwort geschützt :-( - wie soll Werner das Prinzip erkennen (ohne das VBA-Projekt zu "knacken") ?
Lade doch bitte nochmal eine ungeschützte Version hoch - Danke !
Gruß, NoNet
Passwort
13.10.2009 12:18:16
JogyB
Hi.
Mist, habe ich vergessen... ich hatte den geschützt, damit er gleich die Version hat, wie sie sein sollte (eben mit geschützem Code)... nur sollte ich dann das Passwort schon in das Posting schreiben.
Das Passwort ist "Test".
Gruss, Jogy
Anzeige
AW: Passwort
13.10.2009 21:24:19
Werner
Hallo nochmal,
ich hab da ein par Schwierigkeiten das in meine Datei einzubauen.
Ich habe da eine andere Überlegung und zwar:
Beim öffnen der Datei soll wieder hochgezählt werden und nach den 20. mal öffnen sollen alle Tabellenblätter auser das Tabellenblatt ("Startseite") ausgeblendet werden und ein Passwort abgefragt werden, und erst wenn das Passwort richtig ist werden die anderen Tabellenblätter wieder eingeblendet.
Ich hoffe da gibt es eine Möglichkeit.
Gruß Werner
AW: Passwort
13.10.2009 22:14:17
Jogy
Hi.
Schau Dir das mal an ... diesmal ohne Passwortschutz des Projekts.
https://www.herber.de/bbs/user/65074.xls
Noch ein Hinweis: Ich verwende in der Datei für die Prüfungen CodeName statt Name. Das einfach deswegen, weil der Nutzer den Namen ändern kann, den Codenamen (Eigenschaft (Name) eines Tabellenblatts im VBE) bei geschütztem Projekt dagegen nicht.
Gruss, Jogy
Anzeige
AW: Passwort
13.10.2009 23:03:50
Werner
Hallo Jogy,
irgendwie fehlt mir der Durchblick. Geht das nicht so wie ich dachte, dass nach den 20. Öffnen alle Blätter Ausbeblentet werden (bis auf Startseite) und nur mit Passwort geöfnet werden können ?
Gruß Werner
AW: Passwort
14.10.2009 09:22:08
JogyB
Hi.
Das sollte es doch eigentlich machen, zumindest hat es das bei einem kurzen Test gestern abend so gemacht... ich kann's mir jetzt nicht anschauen, da ich die Datei zu Hause habe und hier nichts runterladen kann. Und für heute abend kann ich nichts versprechen, da ich noch weg muss, kann also bis morgen dauern.
Was genau paßt denn nicht? Dass die Blätter bei deaktivierten Makros ausgeblendet sind geht nicht anders, da sonst der Nutzer einfach ohne Makros öffnen und so den Schutz aushebeln könnte (weil einfach gar nicht hochgezählt wird).
Bis 21 Öffnungen schreibt der die Anzahl der Öffnungen in das versteckte Sheet Config und speichert die Datei dann gleich - die 21 ist noch nötig, damit der nachfolgende Code weiß, dass es jetzt drüber ist, danach kann man sich das sparen (einmal drüber, immer drüber).
Bis 20 Öffnungen blendet der Code die Sheets automatisch ein. Ab 21 Öffnungen dagegen nur, wenn das korrekte Passwort eingegeben wird, das ab der 21. Öffnung auch abgefragt wird (davor nicht, da unnötig).
Dazu kommt dann noch der Code vor dem Speichern, damit es nicht mit eingeblendeten Sheets gespeichert wird. Und der Code vor dem Beenden ist eigentlich nur deswegen drin, weil das sonst beim Speichern vor dem Beenden immer wieder die Abfrage bringt, wenn die Datei gespeichert wird (frag mich nicht wieso, aber das Problem hatte ich des öfteren... obwohl .Saved auf True steht). Dazu wird in beiden Ereignisprozeduren noch abgefangen, dass bei fehlendem Passwort nicht gespeichert wird (da sinnlos).
Gruss, Jogy
Anzeige
AW: Passwort
16.10.2009 18:44:31
Werner
Hallo Jogy,
ich habe das Makro versucht einzubauen.....
Option Explicit
' Passwort
Const myPass = "Test"
' Anzahl der Öffnungen, ab dem ein Passwort gesetzt wird
Const anzOeff = 10
Private Sub Workbook_Open()
Dim mySh
Dim enterPass As String
' Zählt die Anzahl der Öffnungen bis 20 hoch
' damit klar ist, wann ein Passwort abgefragt werden muss
' geht 1 weiter, da Passwort erst ab 21. Öffnung notwendig
If config.Cells(2, 1)  anzOeff Then
enterPass = InputBox("Passwort eingeben:", "Passwort")
End If
' Wenn weniger als 21 Oeffnung oder Passwort korrekt
' dann Sheets einblenden
If config.Cells(2, 1) 
Sheets("Startcenter").ScrollArea = "A1:P48"
Sheets("Tabelle1").ScrollArea = "A1:O40"
Sheets("Tabelle2").ScrollArea = "A1:O40"
Sheets("Tabelle3").ScrollArea = "A1:O40"
Sheets("Tabelle4").ScrollArea = "A1:O40"
Sheets("Tabelle5").ScrollArea = "A1:O40"
Sheets("Tabelle6").ScrollArea = "A1:O40"
Sheets("Tabelle7").ScrollArea = "A1:O40"
Sheets("Tabelle8").ScrollArea = "A1:O40"
Sheets("Tabelle9").ScrollArea = "A1:O40"
Sheets("Tabelle10").ScrollArea = "A1:O40"
Sheets("Tabelle11").ScrollArea = "A1:O40"
Sheets("Tabelle12").ScrollArea = "A1:O40"
Sheets("Tabelle13").ScrollArea = "A1:O40"
Sheets("Tabelle14").ScrollArea = "A1:O40"
Sheets("Tabelle15").ScrollArea = "A1:O40"
Sheets("Tabelle16").ScrollArea = "A1:O40"
Sheets("Tabelle17").ScrollArea = "A1:O40"
Sheets("Tabelle18").ScrollArea = "A1:O40"
Sheets("Tabelle19").ScrollArea = "A1:O40"
Sheets("Tabelle20").ScrollArea = "A1:O40"
Sheets("Tabelle21").ScrollArea = "A1:O40"
Sheets("Tabelle22").ScrollArea = "A1:O40"
Sheets("Tabelle23").ScrollArea = "A1:O40"
Sheets("Tabelle24").ScrollArea = "A1:O40"
Sheets("Tabelle25").ScrollArea = "A1:O40"
Sheets("Stellenbelegungsplan").ScrollArea = "A1:BK39"
Sheets("Gehälter").ScrollArea = "A1:AQ36"
End Sub
'

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'    If CloseMode = 0 Then Cancel = 1
'End Sub

'

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
'Sheets("Startcenter").Activate
'Application.Quit
'End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim mySh
' Speichervorgang abbrechen, wird hier gemacht
Cancel = True
' Hier wird geprüft, ob eines der Datensheets nicht "VeryHidden" ist
' Wenn doch, dann kannte der Nutzer das Passwort nicht und braucht
' auch nicht speichern
' Das ist notwenig, weil diese Prozedur am Ende alle Sheets einblendet
' Alternativ kann diese Abfrage natürlich auch vor den Einblendungen
' erfolgen
If Tabelle1.Visible = xlSheetVeryHidden Then
Call MsgBox("Speichern nicht erlaubt!", vbExclamation, "Abbruch")
Exit Sub
' Speichern unter nicht erlaubt
' Könnte man schon erlauben, nur müßte dann der Speichern-Dialog
' hier "von Hand" gemacht werden
' Habe ich jetzt mal gelassen
ElseIf SaveAsUI Then
Call MsgBox("'Speichern unter' nicht erlaubt!", vbExclamation, "Abbruch")
Exit Sub
End If
' Screenupdating aus, sonst flackert es
Application.ScreenUpdating = False
' Standard bezüglich Ein-/Ausblendungen herstellen
' Alles bis auf Startseite ausblenden
For Each mySh In ThisWorkbook.Sheets
If Not mySh.CodeName = "Startseite" Then
mySh.Visible = xlSheetVeryHidden
End If
Next
' Speichern - dabei Events aus, sonst wird Before_Save wieder ausgeführt
Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True
' Und nun wieder die Arbeitseinstellung für
' Ein-/Ausblendungen
' Alles bis auf Config einblenden
For Each mySh In ThisWorkbook.Sheets
If Not mySh.CodeName = "Config" Then
mySh.Visible = xlSheetVisible
End If
Next
' Und nun das Screenupdating wieder ein
Application.ScreenUpdating = True
' Workbook auf Saved setzen, sonst fragt das beim Beenden nochmal
ThisWorkbook.Saved = True
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim doWhat As Integer
' Auch hier die Prüfung nach dem nicht "VeryHidden" Datensheet,
' Begründung siehe unten
' In dem Fall kein Speichern-Abfrage beim Beenden
If Tabelle1.Visible = xlSheetVeryHidden Then ThisWorkbook.Saved = True
' das Speichern von Änderungen vor dem Beenden muss hier extra gemacht werden,
' da ansonsten der Speichern Dialog vor dem Beenden immer wieder kommt,
' obwohl .saved auf True steht
' keine Ahnung warum, hatte ich aber schon öfter
If Not ThisWorkbook.Saved Then
doWhat = MsgBox("Sollen Ihre Änderungen in '" & ThisWorkbook.Name & "'gespeichert  _
werden?", _
vbYesNoCancel + vbExclamation)
' entspechende Aktionen ausführen
If doWhat = vbNo Then
ThisWorkbook.Saved = True
ElseIf doWhat = vbYes Then
ThisWorkbook.Save
Else
Cancel = True
End If
End If
End Sub
....es wird aber ein kompilierungsfehler angezeigt.
Wo liegt da der Fehler denn das makro wird auch nicht ausgelöst?
Gruß Werner
Anzeige
AW: Passwort, Hallo Jogy
18.10.2009 18:04:23
Werner
Hallo Jogy,
nochmals herzlichen Dank für die Hilfe!!, auch wenn es etwas gedauert hat bis ich es so Einbauen konnte, dass es funktioniert, denn deine Datei hat ja funktioniert :-). Das Problem meinerseits war es in meine Datei einzubauen.Obwohl du das Makro sehr genau beschrieben hast.
Doch ich binn noch Lernfähig und froh, dass es das Forum gibt.
Das Ergebnis:
Option Explicit
' Passwort
Const myPass = "Test"
' Anzahl der Öffnungen, ab dem ein Passwort gesetzt wird
Const anzOeff = 10
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("Startcenter").Activate
Application.Quit
Dim doWhat As Integer
' Auch hier die Prüfung nach dem nicht "VeryHidden" Datensheet,
' Begründung siehe unten
' In dem Fall kein Speichern-Abfrage beim Beenden
If Tabelle1.Visible = xlSheetVeryHidden Then ThisWorkbook.Saved = True
' das Speichern von Änderungen vor dem Beenden muss hier extra gemacht werden,
' da ansonsten der Speichern Dialog vor dem Beenden immer wieder kommt,
' obwohl .saved auf True steht
' keine Ahnung warum, hatte ich aber schon öfter
If Not ThisWorkbook.Saved Then
doWhat = MsgBox("Sollen Ihre Änderungen in '" & ThisWorkbook.Name & "'gespeichert  _
werden?", _
vbYesNoCancel + vbExclamation)
' entspechende Aktionen ausführen
If doWhat = vbNo Then
ThisWorkbook.Saved = True
ElseIf doWhat = vbYes Then
ThisWorkbook.Save
Else
Cancel = True
End If
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Dim mySh
' Speichervorgang abbrechen, wird hier gemacht
Cancel = True
' Hier wird geprüft, ob eines der Datensheets nicht "VeryHidden" ist
' Wenn doch, dann kannte der Nutzer das Passwort nicht und braucht
' auch nicht speichern
' Das ist notwenig, weil diese Prozedur am Ende alle Sheets einblendet
' Alternativ kann diese Abfrage natürlich auch vor den Einblendungen
' erfolgen
If Tabelle1.Visible = xlSheetVeryHidden Then
Call MsgBox("Speichern nicht erlaubt!", vbExclamation, "Abbruch")
Exit Sub
' Speichern unter nicht erlaubt
' Könnte man schon erlauben, nur müßte dann der Speichern-Dialog
' hier "von Hand" gemacht werden
' Habe ich jetzt mal gelassen
ElseIf SaveAsUI Then
Call MsgBox("'Speichern unter' nicht erlaubt!", vbExclamation, "Abbruch")
Exit Sub
End If
' Screenupdating aus, sonst flackert es
Application.ScreenUpdating = False
' Standard bezüglich Ein-/Ausblendungen herstellen
' Alles bis auf Startseite ausblenden
For Each mySh In ThisWorkbook.Sheets
If Not mySh.CodeName = "Startseite" Then
mySh.Visible = xlSheetVeryHidden
End If
Next
Sheets("Startcenter").Activate
Application.Quit
' Speichern - dabei Events aus, sonst wird Before_Save wieder ausgeführt
Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True
' Und nun wieder die Arbeitseinstellung für
' Ein-/Ausblendungen
' Alles bis auf Config einblenden
For Each mySh In ThisWorkbook.Sheets
If Not mySh.CodeName = "Config" Then
mySh.Visible = xlSheetVisible
End If
Next
' Und nun das Screenupdating wieder ein
Application.ScreenUpdating = True
' Workbook auf Saved setzen, sonst fragt das beim Beenden nochmal
ThisWorkbook.Saved = True
End Sub


Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then Cancel = 1
End Sub

Private Sub Workbook_Open()
Dim mySh
Dim enterPass As String
' Zählt die Anzahl der Öffnungen bis 10 hoch
' damit klar ist, wann ein Passwort abgefragt werden muss
' geht 1 weiter, da Passwort erst ab 21. Öffnung notwendig
If Config.Cells(2, 1)  anzOeff Then
enterPass = InputBox("Passwort eingeben:", "Passwort")
End If
' Wenn weniger als 11 Oeffnung oder Passwort korrekt
' dann Sheets einblenden
If Config.Cells(2, 1) 

Gruß Werner
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige