Clever-Excel-Forum

Normale Version: "Tabellenblatt freigeben" per VBA starten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe folgendes Problem, zu dem ich leider auch nichts sinnvolles ergoogeln konnte:

ich lasse aus einer anderen Excel-Datei (Grunddatei) automatisiert per Makro monatlich ein neues Excel-Arbeitsblatt als separate Datei für ein Team zur gemeinsamen Nutzung erstellen.
Dazu wird das entsprechende Sheet nach Klick auf einen Button zunächst innerhalb der Grunddatei per VBA kopiert und automatisch fertigformatiert.
Dann wird daraus eine neue Datei erstellt und automatisch abgespeichert, z.B. mit:
Sheets("Januar").Move und 
ActiveWorkbook.SaveAs ...


Das klappt auch alles sehr gut!  ABER:

In den neuen, monatlichen Dateien sollen jetzt Änderungen 30 Tage lang protokolliert werden.
Das wäre also die klassische Menü-Funktion "Überprüfen" - "Arbeitsmappe freigeben".

Dabei sind aber leider 2 Bedingungen zu beachten:
1. die neue, monatliche Excel-Datei muss weiterhin als xlsx. (also ohne Makros) gespeichert werden können (Firmenbeschränkungen) und 
2. ich möchte, dass die Freigabe bzw. die Protokollierung nicht in jeder neuen Monatsdatei manuell neu eingerichtet werden muss (jeder im Team muss sofort ohne Voreinstellungen und Vorkenntnisse dort arbeiten können)

Daher meine Frage:
wie könnte ich meinen vorhandenen Code in der Grunddatei erweitern, damit die neue Datei von vornherein alle Änderungen protokolliert?
Gibt es also eine Möglichkeit, z.B. per VBA auf die o.g. Menüpunkte ("Arbeitsmappe freigeben") zuzugreifen?

Für Ideen wäre ich sehr dankbar   21

Viele Grüße
Micha
Hi,

der Makrorecorder erspart so manche Anfrage. Bei Deiner ist er durchaus hilfreich...
Vermutlich ist nur die Reihenfolge der Anweisungen das Problem.


1. 2 Objektvariablen (Dat1 und Dat2) vom Typ Workbook erstellen und 
2. Originaldatei als Dat1 setten
3. Schutz in Dat1 aufheben
4. neue Datei erstellen, als xlsx speichern 
5. Neue Datei als Dat2 setten
6. gewünschtes Blatt aus Dat1 nach Dat2 verschieben
7. Schutz in Dat1 wiederherstellen
8. Dat2 schließen
Moin Ralf,

danke erstmal für die schnelle Antwort!

ja, das hatte ich schon probiert, aber der Rekorder funktioniert meines Wissens nicht, sobald die Arbeitsmappe zur gemeinsamen Nutzung freigegeben wird.
Insofern bin ich damit leider nicht weitergekommen.

Das wäre ja praktisch genau der Punkt, der mir helfen würde, wenn der Rekorder die Freigabe aufzeichnen würde. Aber an der Stelle kommt dann eine Fehlermeldung und die Aufzeichnung wird abgebrochen...

Gibt es da evtl. noch andere Lösungen? Oder habe ich einen Gedankenfehler?
...aha.... wenn das so ist: 

Code:
ActiveWorkbook.Unprotect
Hallo Ralf,

wahrscheinlich habe ich mich ungenau ausgedrückt, da sich das "activeworkbook.unprotect" auf geschützte/gesperrte Dateien bezieht, was nicht mein Problem ist. Das bitte ich dann zu entschuldigen.

Ich bräuchte einen Code/Befehl, der praktisch die neue Datei zur gemeinsamen Nutzung freigibt und von vornherein die Protokollierung startet,
also praktisch das manuelle Klicken auf "Arbeitsmappe freigeben" und "Bearbeitung von mehreren Nutzern zulassen" mitsamt Protokollierung ersetzt und automatisiert.

- falls das überhaupt geht...?   Huh
Excel ist ja von Haus aus keine Mehrbenutzeranwendung. Eine geöffnete Datei bleibt für andere Nutzer solange schreibgeschützt, bis sie wieder geschlossen ist. Ausnahme, sie liegt in der Cloud. Aber in der Cloud ist VBA sowieso nicht möglich. Selbst wenn es eine Makrodatei wäre. Sie müsste, um die Makros ausführen zu können, erst heruntergeladen werden. Oder Du verwendest 2 Dateien. Eine als Front- die andere als Backend. Denkbar wäre auch der Einsatz von PQ. 
Wenn Du aber etwas protokollieren willst, dann bräuchtest Du jedoch wieder Makros, oder wie soll das mit dem Protokoll sonst funktionieren? 

Die Freigabe erfolgt auch nicht über das Menü Überprüfen, sondern über Start --> Freigeben. 
Irgendwie verstehe ich nicht so ganz was Du willst...
hab es hinbekommen   57


Code:
With ActiveWorkbook
.KeepChangeHistory = True
.SaveAs Filename:="C:\Users\Mustermann\Desktop\Test.xlsx", AccessMode:=xlShared
.HighlightChangesOptions When:=xlAllChanges
.ListChangesOnNewSheet = False
.HighlightChangesOnScreen = True
End With