Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
840to844
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
840to844
840to844
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Bitte noch einmal Unterstützung, hatte vorgestern

Bitte noch einmal Unterstützung, hatte vorgestern
26.01.2007 12:24:04
Walter
Hallo Zusammen,
es geht nur noch darum, ich müßte die Datei löschen.
Aber nur wenn die Datei von LotusNotes aus aufgerufen wird.
Ich habe dann die Datei AKTIV.
Hier ist der Pfad mit Dateiname:
' ChDir "C:\Documents and Settings\walli\Local Settings\Temp\notes9D76E5"
aktWb.Close
' ChDir aktWb.FullName
ActiveWorkbook.ChangeFileAccess xlReadOnly
Kill aktWb.FullName
leider klappt dies nicht.
Vielleicht hat noch jemand eine Idee ?
gruß Walter

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bitte noch einmal Unterstützung, hatte vorgestern
26.01.2007 15:14:23
fcs
Hallo Walther,
folgende Anpassung löscht die zuvor geschlossene Datei. Das Ganze funktioniert natürlich nur, wenn sich das Makro nicht in der Datei aktWb befindet, denn mit dem schliessen der Datei werden auch alle darin enthaltenen Makros gestoppt.

strAktWB = aktWb.FullName 'Dateinamen mit Pfad merken
aktWb.Close
ActiveWorkbook.ChangeFileAccess xlReadOnly
Kill strAktWB

Gruß
Franz
Danke Franz aber
26.01.2007 19:04:28
Walter
Hallo Franz,
Danke aber wie kann ich das anders lösen?
Kann man von Excel aus eine BAT Datei Starten und diese Zeilen verarbeitet werden ?
Wäre nett wenn Du mir was dazu sagen könntest.
mfg Walter
Anzeige
AW: Danke Franz aber
27.01.2007 21:42:44
fcs
Hallo Walter,
die Selbstzerstörung einer Excel-Datei in VBA zu realiseren ist etwas tricky und läßt sich ohne eine zweite Steuerungsdatei nicht realiseren.
Als Steuerdatei kann man entweder die Persönliche Arbeitsmappe (macht nur Sinn bei einer Einzelplatzanwendung) verwenden oder eine separate Excel-Datei.
Diese Steuerdatei muss von der sich selbst-zerstörenden Datei per Makro geöffnet werden und das Makro in der Steuerdatei zum Schliessen und Löschen der Datei gestartet werden.
Der entsprechende Code in der Selbstmörder-Datei sieht dann etwa so aus:

Sub Test()
Dim aktWb As Workbook
'Aufruf der Selbstzerstörung
Set aktWb = ActiveWorkbook
Workbooks.Open "C:\Test\DateiKiller.XLS"
aktWb.Activate
Application.Run "DateiKiller.XLS!CloseAndKillme"
End Sub

In der Steuerdatei sind zwei Makros erforderlich.
Im ersten Makro wird per OnTime-Methode das 2. Makro zum Löschen der Datei aktiviert und die zu löschende Datei geschlossen.
Das 2. Makro wird dann zeitverzögert ausgeführt.
Diese Vorgehensweise ist notwendig, da mit dem Schließen der zu löschenden Datei auch alle von der Datei gestarteten Prozeduren beendet werden. Es muss also sichergestellt werden, dass das Löschen der Datei von einer unabhängigen Prozedur ausgeführt wird.
Der Code in der Steuerdatei schaut etwa so aus, wobei ich auch eine Sicherheitsabfrage eingebaut hab. Die Steuerdatei schließt sich nach dem Löschvorgang automatisch wieder.

Sub CloseAndKillme()
'Schließt und löscht die aktive Exceldatei
If ActiveWorkbook.Name = ThisWorkbook.Name Then
MsgBox "Dieses Makro darf nur von einer anderen aktiven Datei aus gestartet werden!"
Else
'Dateiname in Zelle der Tabelle der Arbeitsmappe speichern
ThisWorkbook.Worksheets(1).Range("C8").Value = ActiveWorkbook.FullName
If MsgBox("Aktive Excel-Datei " & vbLf & vbLf & ActiveWorkbook.FullName & vbLf & vbLf _
& "wirklich löschen?" & vbLf & vbLf & "Löschung erfolgt ca. 5 Sekunden nach Klick auf Ja", _
vbCritical + vbYesNo + vbDefaultButton2, "Datei killen") = vbNo Then
Else
'Datei killen mit 5 Sekunden Verzögerung
Application.OnTime Earliesttime:=Now + 5 / 3600 / 24, Procedure:="DateiSchliessen"
End If
End If
ActiveWorkbook.Close savechanges = False
End Sub
Sub DateiSchliessen()
If Not IsEmpty(ThisWorkbook.Worksheets(1).Range("C8")) Then
Kill ThisWorkbook.Worksheets(1).Range("C8").Value
ThisWorkbook.Worksheets(1).Range("C8").Clear
ThisWorkbook.Save
End If
ThisWorkbook.Close savechanges:=False
End Sub

Hier ein Beispiel für die Steuerungsdatei, in die ich noch einen Not-Stopp-Button eingebaut hab, mit dem man in der Verzögerungszeit den Löschvorgang noch abbrechen kann.
https://www.herber.de/bbs/user/39972.zip
Vorsicht beim Testen dieser verbundenen Prozeduren!!!
Vor dem Start der Kill-Makros immer die Datei unter einem anderen Namen/in einem anderen Verzeichnis sichern!!!! Oder immer die Sicherheitsabfrage mit Nein beantworten.
Möglicherweise kann man auch eine Batchdatei erstellen, die mit der Shell-Methode gestartet wird und mit Zeitverzögerung (zum Schliessen der Datei in Excel) die Datei löscht. Wichtig ist dabei immer die vollständige Entkopplung der Löschprozedur von der zu löschenden Excel-Datei. Leider bin ich auf Betriebssystem-Ebene (DOS, Windows) nicht fit genug, um dir hier weiter helfen zu können.
Gruß
Franz
Anzeige
Danke und -)
28.01.2007 14:00:18
Walter
Hallo FRanz,
DANKE !
Da hast Du aber viel Arbeit für mich durchgeführt, ich denke das ich das hinkrigen kann,
werde es morgen in der Fa. testen.
Wünsche Dir noch einen schönen Sonntag!
mfg Walter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige