5.3k Aufrufe
Gefragt in Tabellenkalkulation von acr Mitglied (215 Punkte)
Hallo Exelgemeinde..

Ich habe folgendes Problem. Ich möchte Dateien aus einem Ordner in einen anderen ordner verschieben, wenn ein bestimmtes Ereignis stattgefunden hat.
Bei Eingabe eines Datums in Zelle M8 bis M1000 soll eine Datei (pdf-Datei), die in Zelle B8 bis B1000 spezifiziert ist, verschoben werden.
Die Datei befindet sich auf dem Laufwerk X: im Ordner "aktuell" und soll nach Ordner "zur Zeit in Abrechnung" verschoben werden.
Zum besseren Verständnis habe ich eine Testdatei hochgeladen.
Ich hoffe, mir kann in dieser Frage jemand helfen.
Ich benutze Exel 2003.

M.f.G
Horst

Dateidownload: http://www.file-upload.net/download-8071826/Test.xls.html

19 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi :-)

korrigiert ^^

gruss nighty

Private Sub worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Application.Intersect(Target, Range("M8:M1000")) Is Nothing Then
If IsDate(Target) = True Then
Dim objFSO As Object
Dim DateiName As String
Set objFSO = CreateObject("Scripting.FileSystemObject")
DateiName = Dir("D:\temp\" & "*.pdf")
Do While DateiName <> ""
If Cells(Target.Row, 2) = Mid(DateiName, 1, Len(Cells(Target.Row, 2))) Then
objFSO.MoveFile "D:\Quelle\" & DateiName, "C:\Ziel\"
End If
DateiName = Dir
Loop
End If
End If
Application.EnableEvents = True
End Sub
0 Punkte
Beantwortet von acr Mitglied (215 Punkte)
Hallo nighty

Funktioniert leider nicht

Vielleicht drücke ich mich ja ein wenig umständlich aus, Verzeihung für einen Exel"benutzer" mit wenig Ahnung
Um es ein bischen verständlich zu machen benutze ich jetzt folgende Ordner, die meine Dateien aufnehmen: Quelle (C:\Temp) --> Ziel (D:\Temp). Die im Ordner Quelle befindlichen Dateien haben folgende Namensgebung erhalten:
Beispiel: 16.09.2013 Meier.pdf (also Datum aus Spalte 1) Name aus Spalte 2 und der Bezeichnung .pdf. Zwischen Datum und Name ist ein Leerzeichen vorhanden.
Es muß also geprüft werden, ob im ersten Teil der Datei das Datum stimmt so wie im zweiten Teil der Datei der Name. Beide sind also Suchkriterien. Sie werden beide benötigt, weil es von einem Namen mehrere Rechnungsbelege geben kann. Im nachfolgenden Code funktioniert alles, solange es nur EINE Rechnung gibt (dann allerdings OHNE Datum vorweg).


Private Sub worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Application.Intersect(Target, Range("M8:M1000")) Is Nothing Then
If IsDate(Target) = True Then
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists("C:\Temp\" & Cells(Target.Row, 2) & ".pdf") = True Then
objFSO.MoveFile "C:\Temp\" & Cells(Target.Row, 2) & ".pdf", "D:\Temp\"
MsgBox ("Datei " & Cells(Target.Row, 2) & ".pdf" & " wurde verschoben")
Else
MsgBox ("Datei ist nicht vorhanden")
End If
End If
End If
Application.EnableEvents = True
End Sub


Vielleicht gelingt es ja, den vorhandenen Code umzuschreiben.....
Die letzte Download_URL gilt noch...

Gruß
Horst

PS Vielleicht hat ja noch ein anderer eine Lösung für mich???
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi :-)

bring doch mal ein Beispiel wie sich der Name zusammensetzt

1)wieviele teile und woher ^^
2)nur eine Datei oder teilname mit mehreren Verschiebungen ?


gruss nighty
0 Punkte
Beantwortet von acr Mitglied (215 Punkte)
@nighty

Anwort per Pager...
0 Punkte
Beantwortet von acr Mitglied (215 Punkte)
Hallo

Habe mein Problem im "ms-office-forum.net" veröffentlicht und dort eine Antwort bekommen.
Vielen Dank trotzdem für die Bemühungen.
Gruß Horst
0 Punkte
Beantwortet von acr Mitglied (215 Punkte)
Bevor ich es vergesse. Hier die Lösung:

Private Sub worksheet_Change(ByVal Target As Range)
Dim objFSO As Object
Dim datei As String
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Application.EnableEvents = False 'in diesem Code nicht nötig
If Not Application.Intersect(Target, Range("M8:M1000")) Is Nothing Then
If IsDate(Target) = True Then
datei = "C:\Temp\" & Cells(Target.Row, 1) & " " & Cells(Target.Row, 2) & ".pdf"
If objFSO.FileExists(datei) = True Then
objFSO.MoveFile datei, "D:\Temp\"
MsgBox ("Datei " & Cells(Target.Row, 2) & ".pdf" & " wurde verschoben")
Else
MsgBox ("Datei ist nicht vorhanden")
End If
End If
End If
Application.EnableEvents = True
End Sub

Gruß Horst
0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo Horst,

freut mich zu vernehmen, dass nunmehr das Problem gelöst ist, obwohl ich das mit dem vorgelagerten Datum nicht optimal finde.
Eingangsrechnungen werden normalerweise mit internen laufenden Nummern versehen, um sie unterscheiden zu können, wenn an einem Tag vom gleichen Lieferanten Rechnungen einlangen.

Ich bin trotzdem der Meinung, dass das Problem schon bereits in unserem Forum gelöst wurde, obwohl sich im Verlauf der Anfrage die Verhältnisse ständig änderten und im Endeffekt nur mehr der Tupfen auf dem I fehlte.

Vielleicht ist es beim nächsten Mal umgekehrt.

Gruß

Paul1
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi :-)

jo,paul hat es gut getroffen ^^
das die ereignisausschaltung ueberfluessig ist,bezweifle ich erstmal da ja Maximum 3 cells zugriffe erfolgen ^^
ein Testlauf wuerde das beantworten denk ich oder eine profi antwort die grundlegendes der Ereignisse beschreibt ^^

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi :-)

betreff ereignissabschaltung ja/nein

nach Testläufen ergab sich folgendes Ergebnis

ein aufruf erzeugt
bei true=2 durchlaeufe
bei false=1 durchlauf

somit ist eine ereignisabschaltung zwingend

gruss nighty
...