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

Forumthread: Makros nur ausführen, wenn nicht schreibgeschützt

Makros nur ausführen, wenn nicht schreibgeschützt
24.04.2006 15:15:54
Ben
Hallo
Habe anhand von Forumsbeiträgen für eine Excel-Datei ein paar Makros hinterlegt. Z.B. wird automatisch angezeigt, wann das letzte mal gespeichert wurde und die Datei schliesst automatisch nach 10 Min. falls keine Änderung vorgenommen wurde.
Auf die Datei sollen verschiedene User zugreifen können; wenn schon geöffnet dann schreibgeschützt. Wie kann ich erreichen, dass die Makros im Falle, dass die Datei schreibgeschützt geöffnet wurde, nicht aktiviert werden?
Besten Dank für jeden Hinweis.
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makros nur ausführen, wenn nicht schreibgeschü
24.04.2006 17:08:30
Ramses
Hallo
in das Workbook.open Ereignis
If Thisworkbook.ReadOnly = True then
ReadGlobalState = True
Else
ReadGlobalState = False
End If
In ein Modul
Dim ReadGlobalState As Boolean
Allerdings, und darum kommst du nicht herum, musst du nun in jedem Makro den Status von "ReadGlobalState" abfragen.
In die erste Zeile eines Jeden Makros
if ReadGlobalState = True then Exit sub
Gruss Rainer
Anzeige
AW: Makros nur ausführen, wenn nicht schreibgeschü
25.04.2006 08:21:02
Benno
Hallo Rainer
Vielen Dank für den Tipp. Nur, wo geanau muss ich den Status von ReadGlobalState in die einzelnen Makros kopieren. Wenn ich ihn ganz zu Beginn einfüge, z.B. vor
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column &gt 13 Then Exit Sub
Kommt die Fehlermeldung: "Fehler beim Kompilieren. Ausserhalb einer Prozedur ungültig."
Wenn ich ihn nach
Private Sub Worksheet_Change(ByVal Target As Range)
einfüge kommt die Fehlermeldung
"Fehler beim Kompilieren Variable nicht definiert."
Und noch etwas: Wie könnte ich - falls ein User eine Änderung an der schreibgeschützten Datei vornehmen will eine Message-Box anzeigen z.b. mit der Meldung "Diese Datei ist schreibgeschützt - Änderungen können nicht gespeichert werden."
Danke und Gruss
Ben
Anzeige
AW: Makros nur ausführen, wenn nicht schreibgeschü
25.04.2006 16:16:30
Ramses
Hallo
Hast du es genau so gemacht wie ich geschrieben habe ?
In ein Modul !!!!
Dim ReadGlobalState As Boolean

Dann funktioniert der Aufruf immer, z.B.

Private Sub Worksheet_Change(Target as Range)
if ReadGlobalState = True then Exit sub
...Dein Code
End Sub

Die Zeile muss immer nach der ersten Zeile eines Makros stehen
Die Meldung "Schreibgeschützt" musst du nicht generieren, wenn die Datei Schreibgeschützt geöffnet wurde und der User speichern will, macht EXCEL die Meldung von sich aus.
Gruss Rainer
Anzeige
AW: Makros nur ausführen, wenn nicht schreibgeschü
26.04.2006 09:10:19
Benno
Hallo
Ich bilde mir ein, die Codes genau nach Deinen Anweisungen eingegeben zu haben. Trotzdem läuft das Ganze nicht. Habe die Datei deshalb hochgeladen:
https://www.herber.de/bbs/user/33118.xls
Könntest Du mal nachschauen woran es liegt.
Danke und Gruss
Benno
Anzeige
AW: Makros nur ausführen, wenn nicht schreibgeschü
28.04.2006 05:53:18
Mustafa
Hallo Benno, hallo Ramses,
ich wollte mich zwar nicht einmischen aber muss es nicht:
Public ReadGlobalState As Boolean
heißen?
Rückmeldung obs hilft wäre nett.
Viele Grüße aus Köln.
AW: Makros nur ausführen, wenn nicht schreibgeschü
28.04.2006 12:42:43
Benno
Hallo Mustafa
Herzlichen Dank für die "Einmischung" und den Tipp. Jetzt funktionierts.
Ich habe aber noch 3 andere Problempunkte:
Ich habe folgenden Code, um jeweils Benutzername und Datum/Zeit der letzten Änderung in Zeile 14 - 16 zu schreiben.

Private Sub Worksheet_Change(ByVal Target As Range)
If ReadGlobalState = True Then Exit Sub
If Target.Column > 13 Then Exit Sub
Cells(Target.Row, 15) = Date
Cells(Target.Row, 16) = Time
Cells(Target.Row, 14) = Application.Username
End Sub

Frage 1: Wie muss ich das ändern, damit nur Änderungen in gewissen Spalten (z.B. Nr. 1 und 10) mit Datum/Zeit und User protokolliert werden?
Frage 2: Die Idee wäre, dass der User gemäss dem Netzwerkkennwort in Spalte 14 geschrieben wird. Mit Application.Username scheint das nicht zu klappen. Bei mir zwar schon, bei anderen Usern aber nicht. Gibt es etwas "besseres" als Application.Username?
Frage 3: Mir ist aufefallen, dass die Funktion "rückgängig" in meiner Datei nicht möglich ist. Liegt das an den Makros und falls ja, gibt es einen VBA-Code, der diese Funktion wieder einschaltet?
Ich hoffe, das sind nicht zu viele Fragen.
Vielen Dank und Grüsse aus Basel
Benno
Anzeige
AW: Makros nur ausführen, wenn nicht schreibgeschü
28.04.2006 21:20:59
Gerd

Private Sub Worksheet_Change(ByVal Target As Range)
If ReadGlobalState = True Then Exit Sub
If Target.Column = 1 or Target.Column = 10 Then
Cells(Target.Row, 15) = Date
Cells(Target.Row, 16) = Time
Cells(Target.Row, 14) = Environ.Username
end if
End Sub

"Frage 3: Mir ist aufefallen, dass die Funktion "rückgängig" in meiner Datei nicht möglich ist. Liegt das an den Makros und falls ja, gibt es einen VBA-Code, der diese Funktion wieder einschaltet?"
Nein!
mfg Gerd
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makros nur ausführen, wenn die Datei nicht schreibgeschützt ist


Schritt-für-Schritt-Anleitung

  1. Modul erstellen: Öffne den VBA-Editor (Alt + F11) und füge ein neues Modul hinzu.
  2. Statusvariable definieren: Füge den folgenden Code in das Modul ein:
    Public ReadGlobalState As Boolean
  3. Workbook_Open-Ereignis: Gehe zu ThisWorkbook und füge den folgenden Code ein:
    Private Sub Workbook_Open()
       If ThisWorkbook.ReadOnly = True Then
           ReadGlobalState = True
       Else
           ReadGlobalState = False
       End If
    End Sub
  4. Makros anpassen: In jedes Makro, das du erstellt hast, füge folgende Zeile am Anfang ein:
    If ReadGlobalState = True Then Exit Sub
  5. Testen: Speichere die Datei und öffne sie schreibgeschützt, um sicherzustellen, dass die Makros nicht ausgeführt werden.

Häufige Fehler und Lösungen

  • Fehler beim Kompilieren: außerhalb einer Prozedur ungültig: Dieser Fehler tritt auf, wenn du den Code außerhalb einer Sub-Prozedur einfügst. Stelle sicher, dass der Code innerhalb einer Sub oder Function steht.

  • Variable nicht definiert: Wenn du ReadGlobalState in einem Makro verwendest, stelle sicher, dass die Variable im Modul als Public deklariert ist.

  • Excel-Datei wird als schreibgeschützt angezeigt, obwohl nicht geöffnet: Überprüfe, ob die Datei tatsächlich von einem anderen Benutzer geöffnet ist oder ob sie auf einem Server im schreibgeschützten Modus gespeichert ist.


Alternative Methoden

Eine alternative Methode, um Makros nur bei nicht schreibgeschützten Dateien auszuführen, ist die Verwendung von Application.DisplayAlerts. Damit kannst du Benutzern eine Warnung anzeigen lassen, bevor sie versuchen, Änderungen an einer schreibgeschützten Datei vorzunehmen.

If ThisWorkbook.ReadOnly Then
    Application.DisplayAlerts = True
    MsgBox "Diese Datei ist schreibgeschützt - Änderungen können nicht gespeichert werden."
End If

Praktische Beispiele

Hier ist ein Beispielcode, der Benutzername und Datum/Zeit der letzten Änderung in bestimmten Zellen protokolliert:

Private Sub Worksheet_Change(ByVal Target As Range)
    If ReadGlobalState = True Then Exit Sub
    If Target.Column = 1 Or Target.Column = 10 Then
        Cells(Target.Row, 15) = Date
        Cells(Target.Row, 16) = Time
        Cells(Target.Row, 14) = Environ("Username")
    End If
End Sub

In diesem Beispiel wird nur bei Änderungen in den Spalten 1 und 10 protokolliert.


Tipps für Profis

  • Code modularisieren: Halte deinen VBA-Code modular, indem du häufig verwendete Funktionen in separate Sub-Prozeduren auslagerst.
  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen hinzu, um unerwartete Fehler elegant zu handhaben.
  • Dokumentation: Kommentiere deinen Code ausreichend, damit auch andere Benutzer verstehen, was der Code macht.

FAQ: Häufige Fragen

1. Wie kann ich verhindern, dass Excel-Makros ausgeführt werden, wenn die Datei schreibgeschützt ist? Durch die Verwendung der Statusvariable ReadGlobalState und das Einfügen einer Überprüfung am Anfang jedes Makros kannst du dies erreichen.

2. Was bedeutet "schreibgeschützter Kontakt"? In Excel bezieht sich der Begriff "schreibgeschützt" auf Dateien, die nicht bearbeitet werden können, weil sie bereits von einem anderen Benutzer geöffnet sind oder auf einem Server im schreibgeschützten Modus gespeichert wurden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige