7.4k Aufrufe
Gefragt in Datenbanken von
Hallo,

ich möchte eine Report-Datei "Rep_EDuplex_Befund_single", in unsere Intranet schreiben ("DOCMD.OutputTo acOutputReport, "Rep_EDuplex_Befund_single", acFormatRTF, FileName, False"),. das funktioniert auch so, allerdings nur, wenn diese Datei nicht schon existiert. Ich müsste also zuerst prüfen, ob diese Datei schon (in einer alten Version) existiert, sie dann ggf. löschen und könnte anschließend die Datei neu mit o.g. Befehlszeile schreiben.

Es gibt die FileExists-Methode und die DeleteFile-Methode, mit denen ich diese Aufgabe lösen können müsste. Ich habe aber überhaupt keine Vorstellung, wie die Syntax aussehen müsste. Die in der Hilfe angegebenen Beispiele helfen mir da überhaupt nicht weiter.

Kann mir jemand einen Tipp geben?

Herzlichen Dank im Voraus

6 Antworten

0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo,

binde zunächst im VBA-Modul unter dem Menüpunkt "Extras-->Verweise", den Verweis "Microsoft Scripting Runtime" ein (Häkchen setzen).
Danach kannst du folgenden Code in deine Funktion aufnehmen:
Dim fs As New Scripting.FileSystemObject
...
if fs.FileExists(<dateiname>) then fs.delete (<dateiname>,true)
....


Gruß
Ralf
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo,

es heisst
fs.DeleteFile (<filename>,true)
, sorry.

Gruß
Ralf
0 Punkte
Beantwortet von
Hallo Ralf,

zunächst eimal ganz herzlichen dank für dier rasche Antwort. Irgendein Wurm ist aber noch drin: der Compiler akzeptiert die Syntax nicht, egal ob ich die Zeile übernehme, so wie Du sie vorgeschlagen hast oder ob ich ein Endif dranhänge oder das ganze auf drei Zeilen verteile.

Hier noch einmal die ganze Prozedur:

Private Sub SF_Befund_ins_Intranet_schreiben_Click()

On Error GoTo err_file_click

DOCMD.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

Dim FileName As String
Dim Birthdate As Date
Dim Path As String

Birthdate = Me![Geburtsdatum]
FileName = Me![Nachname] & " " & Me![Vorname] & " (" & Str(Aufnahmenr) & ") ECD Nr " & Str(ECD_ID) & ".doc"
Path = "N:\Befunde\" & Format(Untersuchungsdatum, "yyyy") & "\" & Format(Untersuchungsdatum, "yyyy mm") & "\"
Rem Path = "N:\Organisation\Computer\EEG-Befundung\"
FileName = Path & FileName
Dim fs As New Scripting.FileSystemObject
If fs.FileExists(FileName) Then fs.DeleteFile(FileName, True) endif

DOCMD.OutputTo acOutputReport, "Rep_ECD_Befund_single", acFormatRTF, FileName, False

exit_file_click:
Exit Sub

err_file_click:
MsgBox Err.Description, , "Dateiexport"
Resume exit_file_click


End Sub

Kannst Du mir den Fehler nennen? Ohne diese neue Such- und Lösch-Zeile fuktioniert die Propzedur klaglos - eben bis auf das Problem mit der schon existierenden Datei, die ich ggf. überschreiben möchte. Übrigens: es handelt sich um Access 2002.

Grüße

Simon2000
0 Punkte
Beantwortet von
HI,

Ich z.B. lagere sowas gern aus. Diesem Sub übergebe ich dann den kompletten Pfad des zu löschenden Files. Wenn das File existiert, wird es gelöscht, wenn nicht, dann wird der Fehler unterdrückt und das Sub beendet.

Sub us_KillDat(ueberg)
On Error GoTo weiter:
Kill ueberg
weiter:
On Error GoTo 0
End Sub


Bye
malSchauen
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo,

@malSchauen:
ja, die Funktion "kill" ist prima, die vergesse ich immer wieder ;-)

@Simon2000:
Wenn der Verweis fehlt, wird die Syntax nicht erkannt. Hast du den Verweis aufgenommen?

Gruß
Ralf
0 Punkte
Beantwortet von
@malSchauen:

besten Dank für den Tip mit der "Kill-Funktion". Den Trick, den Fehler einer nicht existierenden zu löschenden Datei einfach ins Leere laufen zu lassen, kannte ich noch nicht. Ich habe das Ganze als Funktion unter "Module" abgelegt. Läuft klaglos.

@malSchauen:

der Fehler lag wohldarin, dass ich den Verweis aktiviert, aber offenbar versehentlich wieder ausgeknipst hatte.

Auch dir herzlichen Dank für die Unterstützung.
...