Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
864to868
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
864to868
864to868
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Schreibgeschützt öffnen

Schreibgeschützt öffnen
23.04.2007 13:47:40
Ben
Hallo Forum
Ich habe einen VBA-Code mit Hilfe des Archivs zusammen "gebastelt". Eine definierte Auswahl an Usern soll die Datei mit lesen/schreiben öffnen können, der Rest nur mit Leserecht:
Option Explicit

Private Sub Workbook_Open()
'definieren, wer schreiben darf
Select Case LCase(Environ("username"))
Case "meier", "mueller", "schulze", "schmidt"
Case Else
ThisWorkbook.ChangeFileAccess xlReadOnly
End Select
If ThisWorkbook.ReadOnly = True Then
MsgBox ("Sie öffnen die Datei schreibgeschützt. Grund: Sie haben nur Leserechte oder die Datei  _
wird von einem anderen Benutzer bearbeitet." + Chr(13) + Chr(13) + "KEINE MUTATIONEN VORNEHMEN, SPEICHERN IST NICHT MÖGLICH." + Chr(13) + Chr(13) + "Beim Beenden DATEI OHNE SPEICHERN SCHLIESSEN.")
End If
If ThisWorkbook.ReadOnly = True Then
ReadGlobalState = True
Else
ReadGlobalState = False
End If
End Sub


Das funktioniert eigentlich gut, das Problem ist nur, dass wenn ich die Datei schreibgeschützt öffne, immer zuerst die Rückfrage kommt: "Änderungen vor dem Wechseln des Dateistatus speichern? Ja/Nein." Lässt sich diese Rückfrage verhindern, ohne dass man die Datei zuerst speichern muss?
Und noch etwas: Wenn jemand die Datei schreibgeschützt öffnet, kann er Änderungen nicht speichern, weil ich "speichern unter" mit VBA-Code nicht zulasse. Kann mam die Rückfrage, ob man speichern wolle ganz unterdrücken? Das wäre ideal.
Vielen Dank für jeden Hinweis.
Gruss
Ben

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schreibgeschützt öffnen
23.04.2007 14:06:00
peter
hi,
einfach am anfang des makros reinschreiben:
Application.DisplayAlerts = False
WICHTIG:
Am Ende des Makros diesen Wert unbedingt wieder auf True setzen. Excel "merkt" sich diese Einstellung nämlich!
Ich hoffe es klappt alles, sonst einfach nochmal schreiben!
LG Peter

AW: Schreibgeschützt öffnen
23.04.2007 14:32:00
Ben
Hi Peter
Danke schonmal. Habe den DisplayAlert folgendermassen eingebaut:

Private Sub Workbook_Open()
Application.DisplayAlerts = False
'definieren, wer schreiben darf
Select Case LCase(Environ("username"))
Case "meier", "mueller", "schulze", "schmidt"
Case Else
ThisWorkbook.ChangeFileAccess xlReadOnly
End Select
If ThisWorkbook.ReadOnly = True Then
MsgBox ("Sie öffnen die Datei schreibgeschützt. Grund: Sie haben nur Leserechte oder die Datei  _
wird von einem anderen Benutzer bearbeitet." + Chr(13) + Chr(13) + "KEINE MUTATIONEN VORNEHMEN, SPEICHERN IST NICHT MÖGLICH." + Chr(13) + Chr(13) + "Beim Beenden DATEI OHNE SPEICHERN SCHLIESSEN.")
End If
If ThisWorkbook.ReadOnly = True Then
ReadGlobalState = True
Else
ReadGlobalState = False
End If
Application.DisplayAlerts = True
If ReadGlobalState = True Then Exit Sub
DaZeit = "0:00:05"
ThisWorkbook.Worksheets("2_FR").Range("A1") = CDate(DaZeit)
Zeitmakro
End Sub


Das führt aber dazu, dass die Datei zuerst gespeichert wird, wenn ich sie schreibgeschützt öffne. Das möchte ich eigentlich vermeiden.
Und dann hatte ich noch eine 2. Frage (Und noch etwas: Wenn jemand die Datei schreibgeschützt öffnet, kann er Änderungen nicht speichern, weil ich "speichern unter" mit VBA-Code nicht zulasse. Kann mam die Rückfrage, ob man speichern wolle ganz unterdrücken?) Hast Du hier auch eine Idee?
Danke und Gruss
Ben

Anzeige
AW: Schreibgeschützt öffnen
23.04.2007 22:25:16
Kurt
Option Explicit

Private Sub Workbook_Open()
'definieren, wer schreiben darf
Select Case LCase(Environ("username"))
Case "meier", "mueller", "schulze", "schmidt"
Case Else
Me.ChangeFileAccess xlReadOnly
End Select
If Me.ReadOnly = True Then
MsgBox "Sie öffnen die Datei schreibgeschützt. Grund: Sie haben nur Leserechte oder die  _
Datei" & _
"wird von einem anderen Benutzer bearbeitet." & Chr(10) & Chr(10) & _
"KEINE MUTATIONEN VORNEHMEN, SPEICHERN IST NICHT MÖGLICH." & Chr(10) & Chr(10) & _
"Beim Beenden DATEI OHNE SPEICHERN SCHLIESSEN."
End If
If Me.ReadOnly = True Then
Me.Saved = True
ReadGlobalState = True
Else
ReadGlobalState = False
End If
End Sub


Ungetestet!
mfg Kurt

Anzeige
AW: Schreibgeschützt öffnen
24.04.2007 09:43:00
Ben
Hi
Danke Forum: Mit Eurer Hilfe habe ich einmal mehr meine Probleme gelöst: Mit folgendem Code lässt bei schreibgeschütztem Öffnen der Datei 1. die lästige Rückfrage "Änderungen vor dem Wechseln des Dateistatus speichern? Ja/Nein." vermeiden und 2. wird beim Schliessen nicht gefragt, ob man speichern will.

Private Sub Workbook_Open()
'definieren, wer schreiben darf
Select Case LCase(Environ("username"))
Case "meier", "mueller", "schulze"
Case Else
Me.Saved = True
            ThisWorkbook.ChangeFileAccess xlReadOnly
End Select
If ThisWorkbook.ReadOnly = True Then
MsgBox ("Sie öffnen die Datei schreibgeschützt. Grund: Sie haben keine Schreibrechte oder die  _
Datei wird von einem anderen Benutzer bearbeitet." + Chr(13) + Chr(13) + "KEINE MUTATIONEN VORNEHMEN, SPEICHERN IST NICHT MÖGLICH." + Chr(13) + Chr(13) + "Beim Beenden DATEI OHNE SPEICHERN SCHLIESSEN.")
End If
If ThisWorkbook.ReadOnly = True Then
ReadGlobalState = True
Else
ReadGlobalState = False
End If
If ReadGlobalState = True Then Exit Sub
DaZeit = "0:00:05"
ThisWorkbook.Worksheets("2_FR").Range("A1") = CDate(DaZeit)
Zeitmakro
End Sub


----------------------------


Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
If ReadGlobalState = True Then
'schreibgeschützt schliessen ohne speichern-Rückfrage
ThisWorkbook.Close SaveChanges:=False
End If
If ReadGlobalState = True Then Exit Sub
Application.OnTime EarliestTime:=VaEt, Procedure:="Zeitmakro", Schedule:=False
End Sub



Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If ReadGlobalState = True Then Exit Sub
ThisWorkbook.Worksheets("2_FR").Range("A1") = DaZeit
End Sub


Gruss
Ben

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige