Datei aus Access 2010 kopieren? - Pfad in Tabelle

Hallo,

ich habe hier ein Problem mit dem ich leider echt nich weiter komme. Ich habe eine Access Datenbank und in dieser eine Tabelle mit Artikelnummern. Ich weis nun das es zu jeder dieser Nummer eine PDF Datei gibt und möchte diese zusammenstellen. Der Pfad ist immer gleich und der Dateiname ähnlich
z.B. C:\PDF.pdf

Ich habe leider von diesem ganzen VBA Thema nicht soviel Ahnung. Abfragen in Access stellen aber kein Problem dar.

Also wie kann ich mir alle PDFs, für die es eine Artikelnummer in meiner Tabelle gibt in ein Verzeichniss kopieren lassen?

Ich danke euch wirklich vielmals und wünsche noch einen schönen Tag.

Gruß
Michi

Hallo Michi,
was ist denn schon da?
Und ein paar Rahmenfragen sind unklar: alle PDFs, die in der Tabelle angegeben sind, sollen in ein anderes Verzeichnis kopiert werden, habe ich das richtig verstanden?
Wodurch soll das ausgelöst werden?
Was soll geschehen, wenn es ein pdf gar nicht gibt?
Meinst du mit „Dateiname ist ähnlich“, dass die Datei genau so heißt wie die Artikelnummer lautet, nur mit der Extension „.pdf“?
lg
Katharina

Du musst halt deine Tabelle als Recordset öffnen und in einer Schleife durchlaufen:

 Set Conn = CurrentProject.Connection
 strSQL = "SELECT \* FROM MeineTabelle WHERE ArtikelNummer IS NOT NULL"
 RS.Open strSQL, Conn, adOpenKeyset, adLockPessimistic
 Do Until RS.EOF 
 Filecopy "C:\PDF\" & RS!ArtikelNummer & ".pdf", "C:\wohinauchimmer\" 
 RS.Movenext
 Loop

Gruß
Reinhard Kraasch

Hallo Michi,

also zunächst solltest Du deine Tabelle um die Spalte PFAD vom Typ Hyperlink ergänzen. Hier soll anschließend der Pfad zu dem PDF Dokument stehen.
Dann erzeugst Du im VBA Editor ein neues Modul, in welches Du folgenden Code eingibst:

pubic sub Pfad_anhängen()
dim rs as new adodb.recordset
dim db as new adodob.connection
set db = currentproject.connection
with rs
.activeconnection = db
.source = „Select * from Artikel“
.open,adopenstatic,adlockoptimistic
end with
for i = 1 to rs.recordcount
rs.fields(„pfad“).value = „c:\pdf“ & rs.fields.(„Artikelnummer“).value & „.pdf“
rs.update
rs.movenext
next i
end sub

mit diesem Code fügst Du in die Spalte Pfad jeweils den Pfad zum jeweiligen Dokument eines jeden Artikels ein.
Anschließend einmalig ausführen und fertig.

Sollte sich die Artikeltabelle verändern (neue zusätzliche Artikel oder geänderte Artikelnummern) muss der Code erneut ausgeführt werden.

Liebe Grüße

Stephan

Hallo!

Da ich davon ausgehe, dass du das Script in Access aufbauen willst muss ich leider passen. (VBA-Script in Access unterscheidet sich von dem in Excel deutlich)

Hoffe dass du von anderer Seite eine zufriedenstellende Antwort bekommst.
Andre

Bau ein Formular, wo nur eine Textbox (TB_PDF_File) drinnen ist. Die hat als Steuerelementinhalt das Feld aus Deiner Tabelle, in der die Pdf-Namen stehen.
Dazu schaffe eine Schaltfläche (Button, BTN_Starte) mit dem nachfolgenden Code.
Als letztes Datum muss in Deiner Tabelle bei den PDF-Namen eine 0 (Zahl!) stehen, die leeren Felder der Tabelle müssen mit irgenwas (z.B. 1) gefüllt werden.
Wenn Du den Knopf klicks, werden die Dateien transportiert.

Private Sub BTN_Starte_Click()
Dim Get_Name
Dim Ol_Name As String
Dim Nw_Name As String
Dim Ur_Pfad As String
Dim Ziel_Pfad As String
Dim File_Check As String

Ur_Pfad = „C:\Temp\Urpfad“
Ziel_Pfad = „C:\Temp\Zielpfad“

DoCmd.GoToRecord , , acFirst

While TB_PDF_File 0

Get_Name = TB_EAN13
Ol_Name = Ur_Pfad & Get_Name ’ ggf. & „.pdf“ ’ falls die Endung nicht gespeichert ist

Nw_Name = Ziel_Pfad & Get_Name ’ ggf. & „.pdf“ ’ falls die Endung nicht gespeichert ist
File_Check = Dir(Ol_Name, vbNormal)
If File_Check > „“ Then
FileCopy Ol_Name, Nw_Name
End If
DoCmd.GoToRecord , , acNext

Wend

End Sub

Hallo Michi,

leider verstehe ich Deine Frage nicht ganz.
Ich würde das so interpretieren:
Du hast ein Verzeichnis
c:\PDF\
in diesem Verzeichnis liegen z.B. 5.000 PDFs mit den Namen Artikelnummer.pdf. Nun hast Du in einer Access - Tabelle / Abfrage eine Auswahl von z.B. 100 Artikel. Jetzt willst Du die PDFs zu diesen 100 Artikel aus
c:\PDF\
nach (z.B.)
c:\PDF-Versand\
kopieren.
Ist das so richtig?
Wenn ja, und Du noch keine Lösung gefunden hast, melde dich wieder, ich mache mich dann schlau.

Bis dann
Karsten

Hallo MichaelS84,

ich habe leider derzeit keine Access-Installation zur Hand. Kann erst nach meinem Urlaub am 13.05. eine Lösung anbieten. Falls Du bis dahin noch keine andere Lösung hast, melde Dich nochmals.

Grüße,
BigBen

Es geht natürlich auch ohne Formular:

Die Tabelle heißt bei mir Produkte und das Felsd ArtikelNr

Private Sub Export\_Pdf()
Dim strSQL As String
Dim db As DAO.Database '
Dim rs As DAO.Recordset '
Dim CopyDatei As String
Dim PasteDatei As String
Dim File\_Check As String

strSQL = "SELECT \* FROM Produkte WHERE ArtikelNr IS NOT NULL;"
 
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)

rs.MoveFirst
 Do Until rs.EOF
 CopyDatei = "C:\Temp\Urpfad\" & rs!ArtikelNr & ".pdf"
 PasteDatei = "C:\Temp\Zielpfad\" & rs!ArtikelNr & ".pdf"
 File\_Check = Dir(CopyDatei)
 If File\_Check \> "" Then
 FileCopy CopyDatei, PasteDatei
 End If
 rs.MoveNext
 Loop

End Sub

Hallo Michi,

Leider hast Du praktisch keine Details genannt. Ich werde
also Deine Tabelle mit den Artikelnummern „Artikel“ nennen
und das Feld, welches die Nummern speichert, „ArtNr“. Norma-
lerweise sollte die ArtNr der Primärindex der Tabelle sein,
da Du aber keine Information nennst, werde ich nicht davon
ausgehen. Da Deine PDF’s .pdf heißen, müssen
die Artikelnummern aber alphanumerisch sein. Das PDF-Quell-
verzeichnis nenne ich kurz „Quelle“ (= C:\PDF"), das Ziel-
verzeichnis „Ziel“ (den Verzeichnisnamen mußt Du entsprechend
selbst einsetzen).

Die Prozedur für das Kopieren aller PDF’s, für welche in der
Tabelle „Artikel“ eine Entsprechung in der ArtikelNr vorliegt,
in das Verzeichnis „Ziel“, schreibst Du in einen Modul, die
Ausführung startest Du z.B. im Direktbereich (Aufruf erfolgt
in der Entwicklungsumgebung mit Strg+G), indem Du die Funktion
dort aufrufst. Dazu schreibst Du nur den Funktionsnamen

 PDF\_Copy

und bestätigst dann mit .

Bitte beachte, daß Du einen Verweis auf

"Microsoft DAO 3.6 Object Library"

setzen mußt! Das erledigst Du über das Menü EXTRAS, Menüpunkt
Verweise.

Die Prozedur lautet:

Function PDF\_Copy() As Variant
 Const Quelle As String = "C:\PDF\"
 Const Ziel As String = "C:\PDF\Copy\"
 Const Tabelle As String = "Artikel"
 Const Feld As String = "ArtNr"
 Dim DB As DAO.Database
 Dim RS As DAO.Recordset
 Dim sql As String, Artikel As String

 On Error Resume Next
 sql = "Select [" & Feld & "] from [" & Tabelle & "] order by [" & Feld & "];"
 Set DB = CurrentDb
 Set RS = DB.OpenRecordset(sql, dbOpenSnapshot)
 With RS
 .MoveFirst
 Do While Not .EOF
 Artikel = .Fields(Feld).Value
 FileCopy Quelle & Artikel & ".pdf", Ziel & Artikel & ".pdf"
 If err Then
 MsgBox "Fehler: " & Error, vbOKOnly, "Fehler:"
 End If
 .MoveNext
 Loop
 .Close
 End With
 Set RS = Nothing
End Function

Wenn ein PDF-File zu einer in „Artikel“ vorhandenen ArtNr
in „Quelle“ fehlt, erfolgt eine Fehlermeldung, nach
Bestätigung wird einfach mit der nächsten gespeicherten
ArtNr fortgesetzt wird. Die von Dir benötigten Namen mußt
Du im Beginn der Prozedur bei Const Quelle = usw. nach
Deinem Bedarf einsetzen.

Gruß
gs

Kann dir leider in Access nicht weiterhelfen. bin mehr in Excel (VBA) tätig

War wohl nicht so wichtig …