Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mehrfachzugriff/-öffnen sperren

Forumthread: Mehrfachzugriff/-öffnen sperren

Mehrfachzugriff/-öffnen sperren
07.12.2012 16:32:07
Kie
Hallo Forum,
Problemstellung: Eine Excel-Datei soll immer nur von einem Nutzer zum Öffnen möglich sein.
Ich möchte für meine Excel-Datei keine Mehrfachbenutzung oder Mehrfachöffnung zulassen. Ist die Datei durch jemand anderen geöffnet, soll sie für alle anderen gesperrt werden und ein Hinweis ausgegeben: Datei durch Benutzer "xya" gesperrt. Auch keine Öffnung einer Kopie soll zugelassen werden.
Wie ist das möglich?
Daanke.
Option Explicit

Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly = True Then
MsgBox "schon in Benutzung"
ThisWorkbook.Close
End If
End Sub

Vielen Dank für die Antwort.
Leider bin ich erst heute dazugekommen es zu testen. Es funktioniert nicht.
Also die IF Abfrage klappt, aber beim Schließen der Datei kommt es zu einem Fehler und die Datei bleibt geöffnet. Was kann ich tun?

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrfachzugriff/-öffnen sperren
07.12.2012 16:37:34
Hajo_Zi
bei mir kam kein Fehler.

AW: Mehrfachzugriff/-öffnen sperren
07.12.2012 16:38:27
Kie
kann es daran liegen, dass ich noch eine Workbook_BeforeClose () Methode habe?

AW: Mehrfachzugriff/-öffnen sperren
07.12.2012 16:42:34
Hajo_Zi
Keine Ahnung die sehe ich nicht. Ich habe den kompletten Code im Beitrag, warum sollte ich nur ein Teil posten.
Ich baue das Beispiel aber nicht wieder nach. Das hatte ich schon für die Testung gemacht.
Gruß Hajo

Anzeige
AW: Mehrfachzugriff/-öffnen sperren
07.12.2012 16:55:33
Kie
Danke für den Hinweis. Ist natürlich klar, dass du das nicht nochmal nachbauen kannst. Ist ja auch nicht einfach zu testen, denn es müssen ja immer mindestens 2 Leute dafür zur Verfügung stehen.
Es läuft so ab:
Bei Workbook_Open wird die Abfrage durchgeführt
Er erkennt, dass ein anderer Nutzer die Datei öffnet
Gibt dann per MsgBox eine Meldung aus ("schon benutzt durch" & name)
Möchte dann schließen
Und läuft dabei in Fehler 1004 rein
Jetzt kam mir die Idee: Ich besitze eine Methode die lautet: Workbook_BeforeClose(Cancel As boolean), die schreibschutzdinge vornimmt.
Ich nehme an, dass er nun ebenfalls in diese Methode läuft und dort einen Fehler produziert.
Kann das sein? Das wäre ein Dilemma. Denn auf Workbook_BeforeClose kann ich nicht verzichten.

Anzeige
AW: Mehrfachzugriff/-öffnen sperren
07.12.2012 17:09:06
Kie
Hallo Hajo,
es lag wirklich an Workbook_BeforeClose ().
Habe dort nochmals eine Abfrage reinprogrammiert, nun funktioniert es wie du es vorhergesagt hast.
VIELEN DANK!
Kannst du mir jetzt noch sagen, wie ich das Formular "Speichern, Speichern Unter, Abbrechen" (der beim normalen Schließen durch Excel geöffnet wird) ausblenden kann. Denn wenn nun der Nutzer abbrechen drückt, kommt er doch wieder in das Programm rein.

Anzeige
AW: Mehrfachzugriff/-öffnen sperren
07.12.2012 17:19:09
Hajo_Zi
Das ist nur sehr kompliziert möglich. Du musst die Befehlsgruppe ausblenden und neu erstellen ohne diese Schalter.
Gruß Hajo

AW: Mehrfachzugriff/-öffnen sperren
07.12.2012 23:49:31
Nepumuk
Hallo,
einfach so:
Private Sub Workbook_Open()
    If ReadOnly Then
        MsgBox "schon in Benutzung"
        Call Me.Close(SaveChanges:=False)
    End If
End Sub

Gruß
Nepumuk

Anzeige
AW: Mehrfachzugriff/-öffnen sperren
08.12.2012 12:19:12
Sonnenpeter
Hallo Nepumuk,
toll wäre da noch ein MsgBox "Durch USERNAME" & "schon in Benutzung"
Geht das?
Gruß SP

AW: Mehrfachzugriff/-öffnen sperren
08.12.2012 14:25:55
Nepumuk
Hallo,
für xls-Dateien gibt es eine Lösung, aber die funktioniert mit den neuen Formaten xlsx / m / b nicht mehr. Es wurde auch noch keine neue Methode gefunden.
Gruß
Nepumuk

Anzeige
AW: Mehrfachzugriff/-öffnen sperren
08.12.2012 22:17:11
Sonnenpeter
Nochmal hallo und Danke für die Info.
Gruß SP

Forumthreads zu verwandten Themen

Anzeige

Infobox / Tutorial

Excel-Datei für Mehrfachzugriff sperren


Schritt-für-Schritt-Anleitung

Um eine Excel-Datei so zu konfigurieren, dass sie nur einmal geöffnet werden kann, kannst Du folgenden VBA-Code verwenden. Dieser Code sollte im ThisWorkbook-Modul eingefügt werden:

Private Sub Workbook_Open()
    If ActiveWorkbook.ReadOnly = True Then
        MsgBox "Die Datei ist bereits in Benutzung."
        ThisWorkbook.Close False
    End If
End Sub
  1. Öffne die Excel-Datei, die Du sperren möchtest.
  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Wähle im Projekt-Explorer die Datei aus.
  4. Doppelklicke auf ThisWorkbook.
  5. Füge den obenstehenden Code ein.
  6. Schließe den VBA-Editor und speichere die Datei als Makro-fähige Datei (*.xlsm).

Mit diesem Code wird die Excel-Datei gesperrt, wenn sie bereits geöffnet ist. Wenn ein anderer Nutzer versucht, die Datei zu öffnen, erhält er eine Meldung.


Häufige Fehler und Lösungen

  • Fehler 1004 beim Schließen der Datei: Wenn Du die Datei mit dem Workbook_BeforeClose()-Ereignis schließt, kann es zu Konflikten kommen. Stelle sicher, dass dieser Code nicht in Konflikt mit dem Workbook_Open()-Ereignis steht. Überprüfe die Logik in Deiner Workbook_BeforeClose()-Methode.

  • Datei öffnet sich doppelt: Wenn die Meldung nicht korrekt angezeigt wird, könnte das an der Reihenfolge der Ereignisse liegen. Achte darauf, dass die Workbook_Open()-Methode zuerst aufgerufen wird.


Alternative Methoden

Eine alternative Möglichkeit, einen mehrfachen Zugriff auf die Datei zu verhindern, ist die Verwendung von Dateien im XLS-Format. Diese bieten von Haus aus eine gewisse Art von Zugriffsschutz, sind jedoch nicht so flexibel wie die VBA-Lösung.

Du kannst auch einen Schreibschutz für die Datei aktivieren, wenn Du nur möchtest, dass sie nicht bearbeitet werden kann.


Praktische Beispiele

  1. Benutzername in der Meldung anzeigen: Um den Namen des Benutzers in der Meldung anzuzeigen, könntest Du den Code wie folgt anpassen:

    Private Sub Workbook_Open()
       If ActiveWorkbook.ReadOnly = True Then
           MsgBox "Die Datei ist bereits in Benutzung durch " & Environ("USERNAME")
           ThisWorkbook.Close False
       End If
    End Sub
  2. Schutz vor doppeltem Öffnen: Wenn Du verhindern möchtest, dass die Excel-Datei doppelt geöffnet wird, kannst Du den Code anpassen, um den Status der Datei in einer externen Datei oder Datenbank zu speichern.


Tipps für Profis

  • Überlege, ob Du die Datei zusätzlich mit einem Passwort schützen möchtest, um den Zugriff weiter einzuschränken.
  • Teste Deine Implementierungen in einer Testumgebung, bevor Du sie in einer produktiven Umgebung verwendest.
  • Halte den VBA-Code gut dokumentiert, um später Änderungen vorzunehmen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Datei immer nur einmal geöffnet wird? Durch die Implementierung des oben genannten VBA-Codes wird sichergestellt, dass die Datei nur im ReadOnly-Modus geöffnet werden kann, wenn sie bereits in Benutzung ist.

2. Gibt es eine Möglichkeit, die Meldung anzupassen? Ja, Du kannst die Anzeige der Meldung durch Anpassungen im VBA-Code ändern, indem Du den Text im MsgBox-Befehl anpasst.

3. Funktioniert diese Methode bei allen Excel-Versionen? Die vorgestellten Methoden sind in den meisten modernen Versionen von Excel anwendbar, jedoch solltest Du die Kompatibilität überprüfen, wenn Du mit älteren Formaten arbeitest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige