MS Word: Makro per Befehlsschaltfläche

Hallo,

habe in Word ein Makro aufgezeichnet und will es über eine Schaltfläche innerhalb des Dokuments aufrufen können. Das Makro ist im übrigen innerhalb des DOKUMENTS gespeichert.

Ich habe also eine Befehlsschaltfläche eingefügt und den Code des Makros als Code der Schaltfläche eingefügt. Auch Versuche, der Schaltfläche einen Code zu verpassen, der dann das Makro aufruft, sind fehlgeschlagen.

Beim Klick auf die Schaltfläche passiert einfach nichts (egal ob im Entwurfmodus und egal ob das Formular geschützt ist oder nicht).

Gruß, Lucas

Hallo,

Ebenfalls Hallo!

habe in Word ein Makro aufgezeichnet und will es über eine
Schaltfläche innerhalb des Dokuments aufrufen können. Das
Makro ist im übrigen innerhalb des DOKUMENTS gespeichert.

Ich habe also eine Befehlsschaltfläche eingefügt und den Code
des Makros als Code der Schaltfläche eingefügt. Auch Versuche,
der Schaltfläche einen Code zu verpassen, der dann das Makro
aufruft, sind fehlgeschlagen.

Beim Klick auf die Schaltfläche passiert einfach nichts (egal
ob im Entwurfmodus und egal ob das Formular geschützt ist oder
nicht).

Also der Entwurfsmodus in der Visual-Basic-Symbolleiste muss unbedingt ausgeschaltet sein, sonst gelingt es Dir lediglich, die Schaltfläche zu markieren.
Prüfe auch, ob unter Menü Extras->Makro->Sicherheit keine hohe Sicherheitsstufe eingestellt ist, sonst wird es nicht funktionieren auch nur ein Makro zu starten.

Viele Grüße, tester!

Danke sehr!

Das hat das Problem gelöst. Warum auch immer ich daran nicht gedacht habe - Mann bin ich blöd!

Gruß, Lucas

Hallo,

jetzt taucht das nächste Problem auf: Das auszuführende Makro stoppt einfach an einer Stelle.
Zur Erklärung: Bezweckt werden soll, dass per Klick auf die Schaltfläche ein anderes vorhandenes Dokument geöffnet wird, dessen Inhalt dann in das Dokument mit der Schaltfläche kopiert wird und das kopierte Dokument wieder geschlossen wird. So soll ein Ansehen der Datei ermöglicht werden, ohne dass für andere Benutzer (im Netzwerk) der Schreibschutz aktiv wird, diese also Eintragungen machen können.

Das Makro läuft also zunächst gut, jedoch hört der Prozess einfach an der Stelle auf, an der das andere Dokument geöffnet ist und alles markiert wurde. Ich sehe also die Markierung - dann passiert nichts mehr - nicht mal ein Fehler.
Komischerweise ist das Originaldokument mit der Schaltfläche in diesem Moment nicht mehr geöffnet - alles sehr seltsam.

Ich habe mal den Code des Makros kopiert, meiner Meinung nach stoppt das Ganze direkt vor „ActiveWindow.Close“…

Private Sub CommandButton1_Click()

’ import Makro
’ Makro aufgezeichnet am 18.09.2007 von arzt

Documents.Open FileName:="\Dmm-01\tumor-schwerpunkt$\Tumorkonsil\KonsilAnmeldung\Daten\aktuelles Konsil.doc", ConfirmConversions:= _
False, ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
WritePasswordTemplate:="", Format:=wdOpenFormatAuto, XMLTransform:=""
Selection.WholeStory
Selection.Copy
ActiveWindow.Close
Selection.PasteAndFormat (wdPasteDefault)
End Sub

Vielleicht kann mir ja auch hier wieder jemand helfen.
Vielen Danks chonmal für die Bemühungen,

Gruß,

Lucas

hi lucas

zunächst mal: warum öffnest du die datei nicht einfach schreibgeschützt? oder kopierst die datei einfach lokal ins temp-verzeichnis? ginge einfacher als die datei auf diese art in ein anderes reinzukopieren.

ausserdem hast du trotzdem das problem, dass du eine fehlermeldung bekommst, wenn das dokument bereits bearbeitet wird. deine idee geht also nur dann auf, wenn das dokument zum zeitpunkt des klicks auf den button geschlossen war.

zum eigentlichen problem: makros innerhalb von dokumenten sind immer eine schlechte idee. vor allem desshalb, weil bestimmte events (z.b. der documentclose) manche anderen events unterbrechen - was in deinem fall passiert sein dürfte.

abgesehen davon, dass du die sicherheitseinstellungen auf niedrig stellen musst - was nie eine gute idee ist.

sinnvoller wäre es, ein eigenes add-in zu basteln. geht einfacher als mann denkt. einfach eine neue vorlage, dort ein neues modul, das makro reinkopieren, die vorlage ins startup-verzeichnis von word, fertig. dann noch eine eigene symbolleiste in der vorlage speichern, mit einem symbol dass dann dieses makro aufruft. vorteil: du hast weniger nebenwirkungen mit irgendwelchen events. ausserdem kannst du die sicherheit auf hoch lassen.

lg
erwin

Moinmoin,

danke für die Vorschläge! Zuerst meine Frage, die sich daraus ergibt: Wenn ich das Dokument schreibgeschützt öffne, kann der nächste, der es öffnet Änderungen vornehmen? Das wäre natürlich dann alles viel einfacher. Es geht nämlich schlicht darum, dass jemand Änderungen vornehmen kann, während ein andere die Datei zum Betrachten geöffnet hat.

Zu den Makros: Ich habe sehr eingeschränkte Möglichkeiten: Die Dokumente inkl. Makros müssen im Netzwerk des ganzen Klinikums funktionieren, daher muss ich die Makros im Dokument speichern. Damit die Sicherheitsstufe nicht herabgesetzt werden muss, habe ich eine Signatur angelegt - insofern kein Problem.
Leider habe ich aber eben im Klinikum nur Zugriff auf diesen einen PC und das Netzlaufwerk, auf dem das Ganze stattfindet.

Gruß, Lucas

hallo Lucas

habe etwas herumprobiert. ich fürchte, so einfach, wie ich mir es gedacht habe, geht es nicht. word „sperrt“ auch dann die datei, wenn sie schreibgeschützt geöffnet wurde. damit kann nun kein anderer die datei ändern. scheint zumindest bei word 2003 so zu sein.

word bietet auch die möglichkeit, eine datei als kopie zu öffnen. leider ist auch das blöd, da diese kopie tatsächlich im filesystem erzeugt wird.

aber auch dein vorgesehener weg bietet ein paar tücken. das problem ist der beschränkte platz in der zwischenablage. kopierst du ein dokument in die zwischenablage und das dokument hat nicht platz im speicher, so kopiert word lediglich einen link auf das dokument in die zwischenablage. wird dann aus der zwischenablage eingefügt, wird der text direkt aus dem dokument heraus herauskopiert. folge: das dokument ist auch dann im zugriff von word auch wenn es gar nicht offen ist sondern nur zuvor der text daraus rauskopiert wurde und die zwischenablage noch nicht geleert wurde. ist nicht immer so aber tritt bei umfangreichen dokumenten hin und wieder auf.

ich denke, die beste lösung ist, das dokument per makro zuerst auf die lokale platte zu kopieren (geht auch, wenn das dokument geöffnet ist) und dann das lokale dokument einfach zu öffnen (ist ja nun egal, ob schreibgeschützt oder nicht). ist vermutlich auch für den anwender sinnvoller.

lg
erwin

Hallo Erwin,

ich habe im Internet eine Seite mit VBA-Befehlen gefunden und wollte mal deine Meinung zum Befehl „Lock“ hören.
Damit müsste das noch gehen - wenngleich ich nicht weiß, wie ich diesen Befehl in das Makro integrieren muss und was ich genau dahinterschreiben muss…

Hier die Adresse: http://turku.wi-bw.tfh-wildau.de/~kmeyer/vb/M+T25514…

Gruß,

Lucas

Post Scriptum: Meine Programmierkenntnisse gehen doch reichlich nah an Null heran…

hi lucas

also, der lock-befehl bringt dir nur was, wenn du die datei mit dem basic-befehl „open“ geöffnet hast. hat nichts mit dem word-befehl „documents.open“ zu tun sondern ist ein überbleibsel der alten basica- bzw. quickbasic-vergangenheit von vba. du öffnest damit die datei nicht im word sondern du legst quasi nur einen datenkanal zur datei an, über den du dann die datei byte für byte auslesen kannst. da in einem word-dokument aber jede menge binärer infos drinnen sind, mit denen du nichts anfängst, ist das sicher nicht der für dich optimale weg.

ev. interessant:

die datei einfach mit dem filecopy-befehl vom server auf die lokale platte kopieren. dann mit einem normalen „documents.open“ die datei öffnen.

geht dann einfach, wenn die einzelnen pcs möglichst ähnlich konfiguriert sind, d.h. es klar ist, auf welches lokale verzeichnis problemlos zugegriffen werden kann.

ansonsten wird es etwas kompliziert: du musst über die registry rausfinden, wo das lokale temp-verzeichnis ist. ist für leute mit etwas erfahrung zwar nicht schwer, nur für anfänger aber nicht ganz so einfach.

alternative: du kannst auch das includetext-feld verwenden. geht im prinzip ganz einfach:

strg-f9 drücken (ein geschwungenes klammernpaar {} erschient)
includetext „pfad“
f9 drücken, um das feld zu berechnen

fertig - der inhalt des dokuments mit pfadnamen „pfad“ wird in dein aktuellen dokument eingefügt, allerdings ohne einen dokumentlock zu erzeugen.

bsp: dein dokument liegt unter c:\temp\test.doc, dann schaut das feld dann so aus:

{ includetext „c:\temp\test.doc“ }

das einfügen des feldes kannst du auch per makro erledigen:

Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldIncludeText, Text:="""c:\\temp\\test.doc""", preserveformatting:=False

ach ja, die dreifachen hochkomma und die doppelten backslashes sind absicht, kein tippfehler. anders funkt es nicht richtig.

ist vermutlich einfacher so als das herumkopieren und einfügen.

lg
erwin

Hallo,

probier doch mal

Documents.Add Template:=„Pfad+NameDerDatei.doc“

im Code.

Läuft analog Datei -> Neu -> Auswahl Dokumentvorlage und legt ein neues Dokument mit einer Kopie des Dateiinhalts (Template = Vorlage) an. Geht auch mit doc statt dot-Dateien.
Konnte leider nicht testen, ob das auch funktioniert, wenn die Datei durch einen anderen Nutzer im Netz geöffnet ist. Aber probier doch selbst einfach mal.

Gruß, tester

Hallo Erwin,

echt super, was ich hier alles noch für Funktionen kennenlerne. Das mit dem IncludeText ist ja echt genial. Leider bringt es mir in diesem Fall nicht viel, da eben gerade die entscheidenden Teile des Dokuments nicht mir eingefügt werden - nämlich die Formularfelder.

Werde es also damit probieren, die Datei per Makro zu kopieren und dann zu öffnen. Theoretisch könnte ich sie dafür auch auf dem Netzlkaufwerk kopieren (zum Beispiel in einen dortigen Ordner Temp), oder? Denn die Rechner sind alle sehr unterschiedlich eingerichtet.

Gruß, Lucas

hi lucas

ich denke mal, der tipp von tester weiter oben ist für dich der optimale. falls es tatsächlich so wie vorgesehen funkt, sicher besser als das umkopieren. das umkopieren hat schließlich den nachteil, dass du entweder pro benutzer eine neue kopie bekommst und damit den server vollmüllst oder erst wieder die zugriffsprobleme hast (nur dann halt auf der kopie und nicht am original).

lg
erwin

Hallo,

Ich habe doch glatt diesen Vorschlag ganz aus den Augen verloren gehabt. Funktionieren tut das nämlich ganze gut (wenngleich ich die Zugriffsproblematik noch nicht testen konnte).
Nur habe ich nun komischerweise ein anderes Problem: Ich habe das Makro erstellt, welches dieses Template erstellt. Wenn ich das Makro über Extras->Makros-> usw. ausführe, geht alles wunderbar. Wenn ich den Code jedoch als Code für die Befehlsschaltfläche verwende, passiert beim Klick auf selbige mal wieder nichts. Die Sicherheitseinstellung ist es diesmal nicht. Habe ich schon probiert.

Was mache ich denn jetzt schonwieder falsch?

Gruß,
Lucas

Hallo, tut mir Leid: Es hat sich schon wieder erledigt! Habe den Fehler gefunden - kleiner Tippfehler im Pfad - führte zu einem Makro, welches nur Text formatiert. Da kein Text vorhanden war, merkt man dann natürlich nicht, dass ein makro ausgeführt wurde…

Der Weg über diese Template-Geschichte jetzt ganz gut. Muss nur am Montag nochmal testen, ob es zu Problemen bei Simultanzugriff kommen wird.

Danke für den Tipp - hat mir echt geholfen!

Viele Grüße,

Lucas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]