Wichtig: VBA-Script!? Dateiprüfung?
Felix
- sonstiges
hallo,
leider passt mein post nicht ganz in das forum, aber dieses script stammt auch hierher.
ich habe eine excel und in der 1. spalte stehen die kundennummern und in der 2. die kundenberater.
habe nun ein makro:
Sub Makro1()
'
' Makro1 Makro
' Makro am 11.01.06 von **** aufgezeichnet
'
Dim lngZ As Long
Dim strQuellpfad As String, strZielpfad As String
Dim datname As String
'Schleife über die Zellen:
For lngZ = 1 To Cells(Rows.Count, 1).End(xlUp).Row
'Quellpfad zusammenbasteln:
strQuellpfad = "C:\test" & Cells(lngZ, 1) & ".pdf"
'Zielpfad zusammenbasteln:
strZielpfad = "C:\test" & Cells(lngZ, 2) & "" & Cells(lngZ, 1) & ".pdf"
'Kopieren:
FileCopy strQuellpfad, strZielpfad
End If
Next
End Sub
das makro kopiert die pdfs ("kundenummer".pdf) in den ordner der kundenberater ...
bricht dies aber ab, weil in der excel auch kundennummern vorhanden sind, wo es keine pdfs gibt.
wie könnte man dies prüfen?
habe auch schon etwas rumprobiert:
datname = Cells(lngZ, 1) & ".pdf"
If Dir(datname) <> "" Then
es gab aber keinen erfolg, da ich in diesem gebiet nicht ernsthaft ahnung habe.
günstig wäre vielleicht, auch wie eine messagebox, die sagt, welche kundennummer nicht vorhanden ist ...
ich danke schonmal für die kompetenten antworten ...
have a nice day!
lg felix
Hallo,
ich habe eine excel und in der 1. spalte stehen die kundennummern und in der 2. die kundenberater.
das makro kopiert die pdfs ("kundenummer".pdf) in den ordner der kundenberater ...
bricht dies aber ab, weil in der excel auch kundennummern vorhanden sind, wo es keine pdfs gibt.
wie könnte man dies prüfen?
habe auch schon etwas rumprobiert:
datname = Cells(lngZ, 1) & ".pdf"
If Dir(datname) <> "" Thenes gab aber keinen erfolg, da ich in diesem gebiet nicht ernsthaft ahnung habe.
günstig wäre vielleicht, auch wie eine messagebox, die sagt, welche kundennummer nicht vorhanden ist ...
Such mal in der VBA-Hilfe nach "On Error". Damit kannst Du eine Fehlerbehandlung für Laufzeitfehler implementieren.
Sub Makro1()
'
' Makro1 Makro
' Makro am 11.01.06 von **** aufgezeichnet
'Dim lngZ As Long
Dim strQuellpfad As String, strZielpfad As String
Dim datname As String
'Fehlerbehandlung abschalten
On Error GoTo 0
'Schleife über die Zellen:
For lngZ = 1 To Cells(Rows.Count, 1).End(xlUp).Row
'Quellpfad zusammenbasteln:
strQuellpfad = "C:\test" & Cells(lngZ, 1) & ".pdf"
'Zielpfad zusammenbasteln:
strZielpfad = "C:\test" & Cells(lngZ, 2) & "" & Cells(lngZ, 1) & ".pdf"
'Fehlerbehandlung aktivieren
On Error GoTo mark
'Kopieren:
FileCopy strQuellpfad, strZielpfad
Next
'ohne Fehler ist hier Schluss
Exit Sub
'bei Fehler
mark:
MsgBox ("C:\test" & Cells(lngZ, 1) & ".pdf" & " ist nicht vorhanden.")
'setze in der Zeile nach der Fehlerzeile fort
Resume Next
End Sub
viele Grüße
Axel
Hallo
bricht dies aber ab, weil in der excel auch kundennummern vorhanden sind, wo es keine pdfs gibt.
wie könnte man dies prüfen?
Nutze die MSDN, Shell Lightweight API. Du benötigst aus dem Artikel folgende Deklaration:
' ======= FILE FUNCTIONS ========
Private Declare Function PathFileExists Lib "Shlwapi" _
Alias "PathFileExistsW" _
(ByVal lpszPath As Long) As Boolean
und diese Funktion:
' ==============================================
' Testing the validity of file and folder names.
' ==============================================
Public Function FileExists(Path As String) As Boolean
' Returns True if the path name is valid.
FileExists = PathFileExists(StrPtr(Path))
End Function
Anwendung:
' Stattdessen Existenz überprüfen.
' Es wird kein eventuell teurer Versuch gemacht, eine nicht
' vorhandene Datei zu öffnen
if FileExists(strQuellpfad) then
FileCopy strQuellpfad, strZielpfad
else
' Generiere z.B. einen Eintrag in einem Fehlerlog
end if
Anmerkung:
Bitte beachte die Systemvoraussetzungen in verlinktem Artikel,
d.h. IE 4 oder höher unter Windows 95/NT4 erforderlich, alle
neueren Versionen von Windows problemlos.
Freundliche Grüße
Vinzenz
Hallo,
Nutze die MSDN, Shell Lightweight API.
Meinst Du mich?
Nein, das werde _ich_ nicht tun. Solange es geht, verlasse ich mich lieber auf das, was nativ vorhanden ist.
Felix kann Deinen Vorschlag natürlich gerne mit in seine Überlegungen einbeziehen.
Du benötigst aus dem Artikel folgende Deklaration:
' ======= FILE FUNCTIONS ========
Private Declare Function PathFileExists Lib "Shlwapi" _
^eben...
viele Grüße
Axel
Hallo Vinzenz,
' ======= FILE FUNCTIONS ========
Private Declare Function PathFileExists Lib "Shlwapi" _
Alias "PathFileExistsW" _
(ByVal lpszPath As Long) As Boolean
meinst Du nicht, dass das etwas wie das Schießen mit Kanonen auf Spatzen ist?
if dir(strQuellPfad) <> "" then FileCopy strQuellpfad, strZielpfad
tut es auch.
Viele Grüße
Jörg
Hi felix,
datname = Cells(lngZ, 1) & ".pdf"
If Dir(datname) <> "" Then
fast. ;-)
Dim lngZ As Long
Dim strQuellpfad As String, strZielpfad As String
Dim datname As String
'Schleife über die Zellen:
For lngZ = 1 To Cells(Rows.Count, 1).End(xlUp).Row
'Quellpfad zusammenbasteln:
strQuellpfad = "C:\test" & Cells(lngZ, 1) & ".pdf"
'Zielpfad zusammenbasteln:
strZielpfad = "C:\test" & Cells(lngZ, 2) & "" & Cells(lngZ, 1) & ".pdf"
'Kopieren:
if dir(strquellpfad) <> "" then
FileCopy strQuellpfad, strZielpfad
else
msgbox strquellpfad & " nicht vorhanden."
end if
Next
End Sub
(ungetestet)
Viele Grüße
Jörg