Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1360to1364
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

Code wird nach Befehl nicht mehr ausgeführt

Code wird nach Befehl nicht mehr ausgeführt
08.05.2014 11:26:00
Mani
Hallo zusammen,
ich habe ein kleines Problem bzw. eine Aufgabenstellung bei einem Makro.
Ausgangssituation:
Ich habe 2 Buttons in einer Excel-Tabelle, mit denen ich das Schreibrecht für das Dokument holen und abgeben kann - das funktioniert soweit ganz gut!
Beim Holen des Schreibrechts benutze ich u.a. folgenden Code:
ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
Das Problem:
Ich würde gerne nach dieser Codezeile noch weitere Dinge ausführen z.B. in irgendeine Zelle einen Wert schreiben. Das funktioniert aber leider nicht... Nach dieser Zeile wird das Makro sofort beendet. Ich habe dann zwar das Schreibrecht, aber die weiteren Befehlszeilen im Makro werden nicht mehr ausgeführt.
Warum ist das so und was kann ich dagegen tun?
Ich bin für jeden Tipp dankbar!
Danke und LG,
Mani

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code wird nach Befehl nicht mehr ausgeführt
08.05.2014 12:12:05
Mani
Ergänzung:
der ganze Code sieht so aus:
Sub Schreibrecht_holen()
If ThisWorkbook.ReadOnly = True Then
ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
End If
'hier würde ich gerne noch weitere Befehle ausführen... das funktioniert leider nicht :(
End Sub

AW: Code wird nach Befehl nicht mehr ausgeführt
08.05.2014 12:43:52
Mani
Noch eine Ergänzung:
Was ich eigentlich machen möchte ist relativ simpel:
Ich möchte in der Excel-Tabelle darstellen, ob man derzeit gerade das Schreibrecht besitzt, oder abgegeben hat! Das hätte ich einfach in eine Zelle schreiben wollen und dann z.B. mit bedingter Formatierung hervorheben oder etwas in der Art.
Ich brauche also eigentlich nur eine Art Auswertung, ob das Schreibrecht gerade erteilt ist, oder nicht.
Vielleicht hilft das weiter...
Danke und LG,
Mani

Anzeige
AW: Code wird nach Befehl nicht mehr ausgeführt
08.05.2014 12:48:49
Daniel
Hi
ob du Schreibrecht hast oder nicht, kannst du doch einfach über Workbook(..).ReadOnly abfragen.
laut Hilfe ist ReadOnly übrigens eine schreibgeschützte Eigenschaft, die du nicht so einfach ändern kannst (die Hilfe zu ChangeFileAccess schreibt von "erneutem Öffnen"), was eigentlich auch verständlich ist, weil beispielsweise das ReadOnly ja zwangsweise gesetzt sein kann, weil jemand anderes bereits zuvor die Datei mit Schreibzugriff geöffnet hat, dann kannst du dir nicht selber plötzlich Schreibrecht geben.
Gruß Daniel

AW: Code wird nach Befehl nicht mehr ausgeführt
08.05.2014 13:24:24
Mani
Hallo Daniel,
so ganz weiß ich zwar nicht, was du meintest, aber an und für sich funktioniert das mit den Schreib- und Leserechten bei mir schon problemlos!
Die Datei wird automatisch "read only" geöffnet.
Dann hole ich mir das Schreibrecht, verändere die Datei und gebe das Schreibrecht wieder her.
Jetzt holt sich ein Kollege (Datei liegt auf Server) das Schreibrecht - in dem Moment sieht er meine Änderungen bzw. bekommt den Letztstand der Datei angezeigt. Er kann sie seinerseits verändern und speichern.
Klappt bei uns soweit super!
Nur eine deutlich Anzeige des Status direkt in der Excel-Tabelle will mir einfach nicht gelingen...
LG Mani

Anzeige
AW: Code wird nach Befehl nicht mehr ausgeführt
08.05.2014 12:53:47
Rudi
Hallo,

Ich brauche also eigentlich nur eine Art Auswertung, ob das Schreibrecht gerade erteilt ist, oder nicht.

das steht doch in der Titelleiste.
Sub Schreibrecht()
With ThisWorkbook
If .ReadOnly Then
.Sheets(1).Cells(1, 1)= "NUR LESEN"
Else
.Sheets(1).Cells(1, 1)= "SCHREIBEN"
End If
End With
'weiterer Code
End Sub
Gruß
Rudi

AW: Code wird nach Befehl nicht mehr ausgeführt
08.05.2014 13:20:47
Mani
Vielen Dank für eure Antworten!
@Rudi:
Der Code funktioniert an und für sich ja super! Nur muss ich dieses Makro natürlich jedesmal ausführen, wenn ich den aktuellen Status in die Zelle A1 schreiben möchte.
Deshalb hätte ich genau diesen Code gerne nach dem Befehl:
ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
stehen, weil dann automatisch beim ändern des Schreibrechtes in der Zelle A1 das richtige steht.
Weißt du was ich meine?
Genau das gelingt mir nicht - nach dem "übernehmen" des Schreibrechtes per Makro, werden keine weiteren Zeilen des Makros mehr ausgeführt... Ich kann auch kein anderes Makro nach dieser Zeile starten (zumindest klappt es bei mir einfach nicht...)
Hab ich irgendeinen Denkfehler?
Danke und LG,
Mani

Anzeige
AW: Code wird nach Befehl nicht mehr ausgeführt
08.05.2014 13:58:21
Daniel
machs doch VOR dem Befehl, wenn danach nichts mehr geht.
hilft dir aber nicht viel.
um von ReadOnly auf ReadWrite zu wechseln, MUSS die Datei geschlossen und erneut geöffnet werden, um auszuschließen, dass sie zwischenzeitlich von einem anderen Bearbeiter mit ReadWrite geöffnet wurde.
Es gibt zwar die Funktion "ChangeFileAcess" um den Status zu wechlseln, aber diese führt genau das aus, sie schließt die Datei und öffnet sie sofort wieder.
Dh alle Änderungen, die du zwischenzeitlich in der Datei gemacht hast, gehen verloren.
Ebenso müssen alle Makroaktivitäten gestoppt werden, weil die Datei ja geschlossen wird.
wenn sich die Datei im Modus "ReadOnly" befindet, dann wird das in der Fensterüberschrift hinter dem Dateinamen angezeigt.
Gruß Daniel

Anzeige
AW: Code wird nach Befehl nicht mehr ausgeführt
08.05.2014 14:12:49
Mani
Vor dem Befehl geht leider auch nicht, weil ich dadurch im "read only" Modus in eine Zelle schreibe und DANACH das Schreibrecht hole. Das führt zu einem Konflikt - ich kann dann diese Änderung nur verwerfen... klappt so also auch nicht!
Wenn ich von ReadOnly auf ReadWrite wechsle und in der Zwischenzeit ein anderer User die Datei auf ReadWrite gesetzt hat, dann geht ein Dialogfenster auf mit dem Hinweis, dass ich die Schreibrechte nicht ziehen darf. Das habe ich getestet!
Und wenn zwischendurch ein anderer die Datei verändert hat und die Schreibrechte wieder abgegeben hat, dann sehe ich beim nächsten Wechsel auf ReadWrite automatisch die geänderte Datei.
Frag mich nicht warum, aber das funktioniert tadellos!
Die Fensterüberschrift "SCHREIBGESCHÜTZT" sehe ich - das hilft natürlich auch schon! Aber ich hätte das gern auch in der Tabelle selber, sodass da auch sicher nichts passieren kann!
LG Mani

Anzeige
AW: Code wird nach Befehl nicht mehr ausgeführt
08.05.2014 14:19:05
Daniel
Hi
dann Schreibe in die Zelle, in welcher du den Status zusätzlich anzeigen willst den Text "Schreiben möglich" und speichere die Datei so.
ändere dann diesen Text in "Schreibeschützt", wenn du per Makro von ReadWrite auf ReadOnly wechselst (bei diesem Wechsel laufen die Makros weiter)
In diesem Status kann die Datei ja nicht gespeichert werden.
Beim Wechsel von ReadOnly auf ReadWrite ist keine Aktion erforderlich, weil du ja die Datei von der Festplatte neu liest.
Zusätzich solltest du noch im WorkbookOpen-Event die Prüfung einbauen, ob die Datei ReadOnly oder ReadWrite ist und dann den Text in der Zelle entsprechend anpassen. Hier musst du den Status ja nur abfragen, daher sollte das Problemlos funktionieren.
Gruß Daniel

Anzeige
AW: Code wird nach Befehl nicht mehr ausgeführt
08.05.2014 15:47:37
Mani
Hallo!
Das gelingt mir leider auch nicht zufriedenstellend... Ich muss da nochmal gründlich überlegen...
Außerdem stellt sich bereits das nächste Problem beim Praxistest:
In meiner "richtigen" Tabellen (also nicht im Test-excel) funktioniert das alles nicht so super...
Ich setze ja gleich nach dem Start des excel alles auf "ReadOnly", was im Test-Excel super geklappt hat! Im "echten" Excel (große Tabelle) bekomme ich dann sofort die Fehlermeldung "Änderung vor dem Wechseln des Dateistatus speichern?"
Excel glaubt also, dass ich in der kurzen Zeit zwischen öffnen und Ausführen des Makros etwas in der Datei geändert habe.
Ich nehme an, dass das mit Formeln in meiner Datei zusammenhängt... ich habe z.B. eine =Heute() Zelle in der excel, die wahrscheinlich gleich nach dem Start die Datei veändert...
Vielleicht kann ich das umgehen, indem ich direkt vor dem Wechsel auf "ReadOnly" nochmal die Datei automatisch speichern lasse (passieren dürfte eigentlich ja nichts, denn öffnen und speichern kann ich ja sowieso nur eine "aktuelle" Datei mit Schreibrechten.
Oh Mann... komplexer als gedacht... (meinen Ausführungen kann man vermutlich ohnehin nicht mehr folgen;))
LG Mani

Anzeige
AW: Code wird nach Befehl nicht mehr ausgeführt
08.05.2014 18:11:15
Daniel
Hi
ja, so Formeln wie Heute() werden beim Öffnen neu berechnen und ergeben dann eine Änderung, worauf Excel vor dem Schließen (oder beim Wechsel in den Status ReadOnly) dann nachfragt, ob die zwischenzeitlich gemachten Änderungen gespeichert werden sollen (sonst gehen sie verloren)
man kann Excel aber vorgaukeln, dass es keine ungespeicherten Änderungen gibt, in dem man die Zeile einfügt:
ThisWorkbook.Saved = True
dann geht Excel davon aus, dass alle gemachten Änderungen gespeichert wurden und diese Rückfragen unterbleiben.
Gruß Daniel

Anzeige
AW: Code wird nach Befehl nicht mehr ausgeführt
09.05.2014 13:10:47
Mani
Hallo :)
Ah, das ist ja cool - dieser Befehl ist definitiv hilfreich!
Ich habe es jetzt zwischendurch so gelöst, dass ich einfach tatsächlich speichere, was auch kein Problem macht.
Diesen "True" Wert, wird sich excel dann aber bestimmt merken... Das heißt man muss beim Schließen aufpassen, dass man auch tatsächlich vorher speichert, weil keine Rückfrage mehr kommt... Da muss ich vorsichtig sein, da ja auch einige Kollegen mit dieser Datei arbeiten werden ;)
Vorerst vielen Dank für die große Hilfe!!! Ganz am Ziel bin ich noch nicht, aber ich hatte dafür einfach zu wenig Zeit... Nächste Woche will ich die Datei fertigstellen - hoffe, dass mir damit jetzt alles gelingt!
Vielen Dank und schönes Wochenende!
LG Mani

Anzeige
AW: Code wird nach Befehl nicht mehr ausgeführt
09.05.2014 13:40:42
Daniel
Excel merkt sich diesen Wert nicht!
.Saved bleibt nur solange True, bis du eine Änderung in der Tabelle machst.
Sobald du an der Tabelle was änderst, wird diese Eigenschaft von Excel auf False gesetzt.
Gruß Daniel

314 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige