PDA

Vollständige Version anzeigen : Speicheroptionen in XLT-Vorlage hinterlegen?


derbermoe
11.03.2009, 10:19
Hallo zusammen,

ich habe eigentlich nur eine ganz kurze Frage:

Ich habe mir eine XLT-Vorlage erstellt, würde nun aber gerne wissen, wie ich dort hinterlegen kann, wie eine neu erstellte Arbeitsmappe heißen soll und wo Excel diese ablegt.

Diese Einstellungen sollen nur für diese Vorlage gelten. Kann mir da jemand weiterhelfen?

IngGi
11.03.2009, 11:04
Hallo derbermoe,

kopiere folgende Codezeilen in das Codemodul DieseArbeitsmappe deiner Vorlagendatei. Dateiname und Pfad musst du im Code anpassen. Unter Extras | Optionen | Sicherheit | Button "Makrosicherheit" | Reiter "Vertrauenswürdige Quellen" muss die Option Zugriff auf Visual Basic-Projekt vertrauen aktiviert sein (Häkchen gesetzt). Damit das Makro ausgeführt werden kann, muss die Makrosicherheit auf Niedrig (nicht zu empfehlen) oder Mittel eingestellt sein. Bei Stufe Mittel muss der Anwender jedesmal, wenn er eine neue Mappe auf Basis der Vorlage erstellt, die Sicherheitsabfrage, ob Makros aktiviert werden sollen, mit Aktivieren beantworten. Dies kann mit einer Signatur des VB-Projektes umgangen werden.

Das Makro speichert die neue Datei unter dem angegebenen Pfad und Namen, wobei eine bereits bestehende gleichnamige Datei ohne Rückfrage überschrieben wird. Anschließend löscht sich das Makro selbst, so dass die neue Datei künftig keine Makros hat und somit auch die Sicherheitsabfrage nicht mehr kommt.

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Option</span> <span class="TOKEN">Explicit</span>
&nbsp;
<span class="TOKEN">Private Sub</span> Workbook_Open()
Me.VBProject.VBComponents(1).CodeModule.DeleteLines 2, 7
Application.DisplayAlerts = <span class="TOKEN">False</span>
Me.SaveAs &quot;C:\Test.xls&quot;
Application.DisplayAlerts = <span class="TOKEN">True</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span>&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Gruß Ingolf

derbermoe
11.03.2009, 11:34
Wow das ging ja schnell, vielen Dank für die schnelle Antwort.

Dein Makrocode hat auch tatsächlich funktioniert, leider kommt in den neu erzeugten Dateien weiterhin die Sicherheitsabfrage, das Makro ist also nicht gelöscht.

Ist aber auch egal, ich werde mich nun mal ein wenig damit beschäftigen, danke!

IngGi
11.03.2009, 11:49
Hallo derbermoe,

leider kommt die Makroabfrage, obwohl keine Makros mehr vorhanden sind. Wenn man die Datei nochmal von Hand speichert, ist die Abfrage weg. Komisch. Das kann ich mir auch nicht erklären. Leider ist das automatisiert nicht hinzubekommen. Vielleicht weiß da noch jemand anderes eine Lösung. Würde mich auch interessieren.

Gruß Ingolf

Madrapour
11.03.2009, 11:59
Hallo Ingolf,

Bei Stufe Mittel muss der Anwender jedesmal, wenn er eine neue Mappe auf Basis der Vorlage erstellt, die Sicherheitsabfrage, ob Makros aktiviert werden sollen, mit Aktivieren beantworten. Dies kann mit einer Signatur des VB-Projektes umgangen werden.

wie lässt sich das umsetzen?

Und was genau bewirkt:

Me.VBProject.VBComponents(1).CodeModule.DeleteLines 2, 7
?

Vielen Dank,

Stefan.

IngGi
11.03.2009, 13:25
Hallo Stefan,

zu deiner ersten Frage siehe Beitrag #4 in diesem Link (http://www.ms-office-forum.net/forum/showthread.php?t=241897).

Die angesprochene Codezeile löscht das Makro. VBComponents(1) ist ein Bezug auf das Modul DieseArbeitsmappe. VBComponents(2 bis ?) wäre ein Bezug auf die Module der einzelnen Tabellenblätter und anschließend würden dann die allgemeinen Module kommen, sofern welche angelegt wurden. DeleteLines 2, 7 bedeutet, dass ab Codezeile zwei sieben Codezeilen (und damit das gesamte Makro) gelöscht werden. Lediglich Option Explicit in der ersten Codezeile bleibt stehen. Aber das sollte ja ohnehin in jedem Codemodul automatisch stehen (das tut es bei dir doch auch?).

Gruß Ingolf

Madrapour
11.03.2009, 16:46
Hallo Ingolf,

vielen Dank für deine Erklärungen!

Lediglich Option Explicit in der ersten Codezeile bleibt stehen. Aber das sollte ja ohnehin in jedem Codemodul automatisch stehen (das tut es bei dir doch auch?).


Nein, aber vielleicht sollte ich mir das mal EXPLIZIT angewöhnen. :)

Warum wär's denn nicht möglich bzw. konsequenter gewesen, gleich alle Zeilen (also 1 - 8) zu löschen?

Gruß,

Stefan

IngGi
11.03.2009, 17:09
Hallo Stefan,

wie gesagt lasse ich Option Explicit in der ersten Codezeile absichtlich stehen, weil das in jedes Modul gehört! Eine wirklich sehr einprägsame Erklärung dazu findest du bei Peter Haserodt (Link) (http://www.online-excel.de/excel/singsel_vba.php?f=4). Ganz unten in dem Artikel steht auch eine Beschreibung, wie man sich Option Explicit von Excel automatisch in jedes neue Modul eintragen lassen kann.

Gruß Ingolf

Madrapour
11.03.2009, 17:37
Danke Ingolf, die Tutorials dort sind eine super Geschichte! Und ja, als Neuling versucht man sich erstmal codemäßig "durchzuwurschteln", da sind solche Hinweise zu einem guten Programmierstil echt Gold wert.

Tschö,

Stefan.