Hallo,
Ich habe eine WORD-Datei, die auf Knopfdruck per Mail versendet werden soll.
Das Problem dabei ist, dass die eingegebenen Formulardaten zunächst gespeichert werden sollten, aber nicht in der Originaldatei.
Daher speicher ich die Datei bei Klick auf den Button in einem Temporären Verzeichnis und schicke die Temporäre Datei ab. Diese Datei sollte aber bei Klick auf den Schließen-Button mit dem Kill-Befehl wieder gelöscht werden.
Aber ich kann sie nicht löschen, weil ich sie ja in dem Moment noch verwende… 
Wie kann ich die Datei löschen??
Gruß
Martin
Hallo Martin
probier mal folgendes:
Option Explicit
Sub zMloesche()
Dim strFile As String
ActiveWorkbook.ChangeFileAccess xlReadOnly
Kill ActiveWorkbook.FullName
ThisWorkbook.Close False
End Sub
Das Makro einer Schaltfläche zuweisen.
Das Ganze funktoniert allerdings nur, wenn Makros nicht deaktiviert wurden und wenn du sicher stellst, dass der Anwender die Datei nicht über das Menü oder die SchließenSchaltfläche des Fensters schließt.
Gruß
Marion
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Geht nicht 
Hi Marion,
deine Idee funktioniert leider nicht 
Sub zMloesche()
Dim strFile As String
ActiveWorkbook.ChangeFileAccess xlReadOnly
Kill ActiveWorkbook.FullName
ThisWorkbook.Close False
End Sub
WORD markiert mir hier die 3. Zeile mit der Fehlermeldung „Objekt nicht gefunden“.
Kann das sein, dass dein Code für Excel ist?
Weil ich denke, ich muss anstatt „AktiveWorkbook“ „ThisDokument“ nehmen, aber bei „ThisDokument“ gibt es nicht die Funktion „ChangeFileAccess“…
Was nun?
Viele Grüße
Martin
Diese Datei sollte aber bei Klick auf den Schließen-Button mit
dem Kill-Befehl wieder gelöscht werden.
Aber ich kann sie nicht löschen, weil ich sie ja in dem Moment
noch verwende… 
Wie kann ich die Datei löschen??
Hi Martin,
schau mal hier:
http://groups.google.de/group/microsoft.public.de.wo…
und m.E. gehört der Code in die normal.dot, aber ich kann mich da auch irren.
Ansonsten, interessanter Link, ich hatte nicht gewußt wie man direkt aus Excel und Word heraus eine Datei löschen kann.
Gruß
Reinhard
Geht auch nicht 
Hi Reinhard,
Diese Lösung funktioniert auch nicht bei mir.
und m.E. gehört der Code in die normal.dot, aber ich kann mich
da auch irren.
Aber du hast wahrscheinlich Recht, dass der Code in die normal.dot gehört, weil dann würde es wahrscheinlich funktionieren.
Weil das Problem ist, dass WORD erst die Datei schließt, und danach kommt der Kill-Befehl. Aber sobald die Datei geschlossen wird, wird auch die Ausführung des Codes beendet, so dass der Kill-Befehl nie ausgeführt wird.
Ich kann diesen Code aber nicht in die Normal.dot einfügen, weil der Befehl nicht nur bei mir, sondern auch bei anderen Benutzern ausgeführt werden soll.
Ich glaube, so wie ich mir das vorstelle, ist das technisch nicht möglich…
Trotzdem danke für eure Mühe.
Viele Grüße
Martin
Hi,
deine Idee funktioniert leider nicht 
Kann das sein, dass dein Code für Excel ist?
ja, verdammt - sorry
Hab es jetzt geändert.
die überlegung ist:
Beim Versenden der Datei ist die Datei beim Empfänger noch nicht gespeichert, das Speichern und das Speichern unter… wird durch das Makro unterdrückt (wenn über das Makro geschlossen wird und nur dann).
Inwieweit der Empfänger die Datei aus dem temp-Verzeichnis holen kann, … k. A.
vielleicht ist das ein Ansatz, den man weiter verfolgen kann - bin leider noch nicht so bewandert auf dem Gebiet (und word war heut mein erster Versuch)
Option Explicit
Sub zMloesche()
Dim strDocName As String
strDocName = ActiveDocument.FullName
If strDocName = false Then Exit Sub
ActiveDocument.Close savechanges:=wdDoNotSaveChanges
ActiveDocument.Close False
End Sub
Liebe Grüße
Marion
Hab noch einen Gedankenansatz, aber leider keine Zeit mehr, dem nach zu gehen.
Man könnte der Datei z. B. ein Makro mitgeben, dass beim Öffnen der Datei beim Empfänger die Systemzeit incl. Datum in eine Konstante einliest. Beim späteren wiederholten Öffnen der Datei aus dem temporären Verzeichnis wird die Konstante mit der Systemzeit zum Zeitpunkt des Öffnens verglichen, bei Nichtübereinstimmeung (was dann ja immer der Fall ist) wird die Datei sofort wieder geschlossen.
Nun ja, das ist die Idee - aber ich weiß noch nicht, ob das machbar ist.
Lieben Gruß
Marion
1 „Gefällt mir“
hi Martin
keine ahnung, ob das funktionieren wird:
du könntest in deinem makro eine kleine batchdatei wegschreiben. diese batchdatei am ende des makros mit einem shell-befehl aufrufen.
die batchdatei kann nun per at-befehl zeitgesteuert einen befehl aufrufen. dieser befehl wäre nun dein del-statement.
die datei würde damit nicht unmittelbar nach dem schließen sondern erst kurze zeit später verschwinden. nicht ganz sauber die vorgehensweise und auch nicht gerade unkompliziert, müsste aber klappen (v.a. auch auf pcs, die nur das dokument bekommen haben).
lg
erwin
Hi Marion,
ich glaub du hast mich falsch verstanden:
Die WORD-Datei soll später im Intranet abgestellt werden und die verschiedenen Benutzer füllen die Formularfelder online aus und schicken die Datei dann per Knopfdruck an ein Postfach.
Das Problem ist, dass ich die Datei zunächst einmal abspeichern muss, bevor ich sie abschicke, weil sonst kommt nur das unausgefüllte Originalformular an.
Daher muss die Datei einmal lokal auf der Festplatte des Benutzers abgespeichert werden, bevor diese verschickt werden kann.
Da auf den PC aber lokal keine internen Daten gespeichert werden dürfen, muss diese angelegte temporäre Datei beim Schließen wieder gelöscht werden.
Aber ich glaube, das ist mit VBA nicht möglich, denn VOR dem Schließen kann ich die Datei nicht löschen, da sie gerade noch verwendet wird.
Und NACH dem Schließen kann ich sie auch nicht mehr löschen, da nach dem Befehl „ActiveDokument.Close“ auch der nachfolgende Code nicht mehr ausgeführt wird.
Viele Grüße
Martin
Hi Erwin,
eine zeitgesteuerte Batchdatei ist wahrscheinlich die einzigste Lösung.
Das Problem ist nur, dass ich zwar keine Ahnung von Batchprogrammierung habe, aber das werd ich schon irgendwie machen…
Viele Grüße
Martin
Hi Martin,
Aber du hast wahrscheinlich Recht, dass der Code in die
normal.dot gehört, weil dann würde es wahrscheinlich
funktionieren.
Weil das Problem ist, dass WORD erst die Datei schließt, und
danach kommt der Kill-Befehl. Aber sobald die Datei
geschlossen wird, wird auch die Ausführung des Codes beendet,
so dass der Kill-Befehl nie ausgeführt wird.
Ich kann diesen Code aber nicht in die Normal.dot einfügen,
weil der Befehl nicht nur bei mir, sondern auch bei anderen
Benutzern ausgeführt werden soll.
Mein Problem ist, ich kenne zuwenig von Word. In Excel wäre das (ungetestet) z.B. so lösbar, daß beim Öffnen der Datei auf dem Fremdrechner überprüft wird ob eine personl.xls existiert( entspricht in bezug auf Makroausführung wohl der normal.dot), wenn nein wird sie erzeugt, dann wird der makrocode dort eingetragen sofern nicht schon vorhanden und gestartet.
Dies geschieht bei Excel im Workbooks_Open Ereignis (also Öffnen der Datei) , d.h. Code der dort steht wird beim Öffnen der datei ausgeführt.
Leider finde ich bei Word nix dergleichen:frowning:
Ich glaube, so wie ich mir das vorstelle, ist das technisch
nicht möglich…
Schaun wir mal 
Gruß
Reinhard