Ich habe mal eine Frage, welche Lösung Eurer Meinung nach sinnvoll und einfach ist.
Ich habe ein Feld [Ordnername], in dem man Namen eintragen kann, die als Ordner entstehen sollen. Dann brauche ich einen Button, der beim Klicken einen Ordner erstellt, der so heißt wie der Name in dem Feld. Sollte der Ordner schon existieren, soll eine Fehlermeldung zurück gegeben werden.
In den Ordner sollen nach dem Erstellen bereits vorhandene Datei-Vorlagen (Formulare in pdf, doc etc.) hinein kopiert werden.
Wie macht man sowas am Einfachsten? Oder gibt es einen besseren Ansatz?
Carl
Zweck: Es sollen ausgefüllte Formulare (Dateien unterschiedlichster Art) gesammelt werden, die, weil es viele sein werden, mittels der Datenbank dann nach Inhalten sortiert dargestellt werden, was übersichtlicher ist als eine Baumstruktur auf dem Laufwerk.
Hallo,
ZitatEs sollen ausgefüllte Formulare gesammelt werden
ich glaube, Du hast falsche Vorstellungen von Access. Es ist nicht notwendig ausgefüllte Formulare zu sammeln.
Man verwendet ein Formular, das auf die anzuzeigenden Daten gefiltert wird.
Beschreibe das Vorhaben doch mal im kompletten Zusammenhang.
Hallo Carl,
Wie Klaus schon sagt
ZitatEs ist nicht notwendig ausgefüllte Formulare zu sammeln.
Dazu nimmt man besser einen Bericht mit der gleichen DS-Herkunft wie
das Formular, und speichert ihn als .PDF (Code dazu findest du zu Hauf).
gruss ekkehard
Ach so, ich meinte Formulare in z.B. Word. Also Dateien.
Die sollen nicht generiert werden, sondern gesammelt, da sie aus anderen Quellen stammen und unterschiedliche Formate haben.
Gibt es einen VBA-Code, der hinter einem button einen Ordner erstellt, sofern der noch nicht existiert?
hallo
ZitatGibt es einen VBA-Code, der hinter einem button einen Ordner erstellt, sofern der noch nicht existiert?
versuch
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal sPath As String) As Long
Private Sub DEINBUTTON_Click()
MakeSureDirectoryPathExists "C:\DeinPath1\DeinUPath1\"
End SubAnpassungen hinsichtlich des Paths und Buttonnamens musst du noch vornehmen.
Ich habe es hingekriegt mit
Sub VerzeichnisAnlegen()
On Error Resume Next
MkDir "N:\ABCD\workorderkatalog\" & Me!WOOrdnername
'wobei WOOrdnername ein Feld in der DB ist.
End Sub
Private Sub Befehl122_Click()
On Error GoTo Err_Befehl122_Click
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
VerzeichnisAnlegen
Exit_Befehl122_Click:
Exit Sub
Err_Befehl122_Click:
MsgBox Err.Description
Resume Exit_Befehl122_Click
End Sub
Er legt jetzt den Ordner an, und wenn ein Ordner vorhanden ist, macht er nix.
Ich habe noch Fragen:
* Ich würde gern den Pfad "N:\ABCD\workorderkatalog" in diesem Code abrufen lassen aus der Tabelle "tblcodeschnipsel", um die Datenbank später wartungsärmer verschieben zu können. In dieser Tabelle ist "N:\ABCD\workorderkatalog\" im Datensatz mit der ID=1 angelegt. Was muss ich oben eintragen, damit die Funktion (MkDir "N:\ABCD\workorderkatalog\" & Me!WOOrdnername) ausgeführt wird, indem der Pfad aus der Tabelle abgerufen wird?
* nächste Frage: In den neu zu erstellenden Ordner sollen just beim erstellen des Ordners IMMER vier gleiche Dateien einkopiert werden: 1.doc, 2.doc, 3.doc und 4.doc. Diese befinden sich im Ordner "N:\ABCD\vorlagen". Welchen Code muss ich einbauen, um die da hinein zu kopieren?
Carl
Zitat* nächste Frage: In den neu zu erstellenden Ordner sollen just beim erstellen des Ordners IMMER vier gleiche Dateien einkopiert werden: 1.doc, 2.doc, 3.doc und 4.doc. Diese befinden sich im Ordner "N:\ABCD\vorlagen". Welchen Code muss ich einbauen, um die da hinein zu kopieren?
Sub VerzeichnisAnlegen()
On Error Resume Next
MkDir "N:\ABCD\workorderkatalog\" & Me!WOOrdnername
'wobei WOOrdnername ein Feld in der DB ist.
FileCopy N:\ABCD\vorlagen\1.doc, N:\ABCD\workorderkatalog\" & Me!WOOrdnername & "\1.doc"
.....'
End Sub
Zitat* Ich würde gern den Pfad "N:\ABCD\workorderkatalog" in diesem Code abrufen lassen aus der Tabelle "tblcodeschnipsel", um die Datenbank später wartungsärmer verschieben zu können. In dieser Tabelle ist "N:\ABCD\workorderkatalog\" im Datensatz mit der ID=1 angelegt. Was muss ich oben eintragen, damit die Funktion (MkDir "N:\ABCD\workorderkatalog\" & Me!WOOrdnername) ausgeführt wird, indem der Pfad aus der Tabelle abgerufen wird?
versuch MkDir Dlookup(............) & Me!WOOrdnername
die Punkte anpassen
Mit
MkDir DomWert("Hilfstexte";"tblHilfstexte";"ID=1")
will er immer debuggen. Ich glaube ich habe da Hochkommas Anführungszeichen nicht richtig. Kannst Du Die Zeile mal richtig schrieben?
War jetzt eher als VBA gemeint:
Sub VerzeichnisAnlegen()
On Error Resume Next
MkDir Dlookup("Hilfstexte","tblHilfstexte","ID=1") & Me!WOOrdnername
'wobei WOOrdnername ein Feld in der DB ist.
FileCopy N:\ABCD\vorlagen\1.doc, N:\ABCD\workorderkatalog\" & Me!WOOrdnername & "\1.doc"
.....'
End Sub
Ach, wunderbar, er legt den ordner an.
Sag mal, ist es nicht möglich, den gesamten Inhalt eines Ordners in den neu anzulegenden ordner zu kopieren? Dann muss man später nicht mehr ran, wenn doch noch Datei hinzu kommen oder weg fallen.
versuch
With CreateObject("wscript.shell")
.Run Environ$("comspec") & " /c copy " & "N:\ABCD\vorlagen\*.*" & " " & DLookup("Hilfstexte", "tblHilfstexte", "ID=1") & Me!WOOrdnername & "\", 0, True
End With
Wo muss ich das den implementieren?
Ich habe jetzt den Code:
Sub VerzeichnisAnlegen()
On Error Resume Next
MkDir DLookup("Hilfstexte", "tblHilfstexte", "ID=1") & Me!WOOrdnername
'wobei WOOrdnername ein Feld in der DB ist.
End Sub
Private Sub Befehl122_Click()
On Error GoTo Err_Befehl122_Click
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
'DoCmd.GoToRecord , , acNewRec
VerzeichnisAnlegen
Exit_Befehl122_Click:
Exit Sub
Err_Befehl122_Click:
MsgBox Err.Description
Resume Exit_Befehl122_Click
End Sub
ggf so, ist aber evtl eher suboptimal weil ich jetzt nicht getestet hab inwieweit schon vorhandene Dateien den Copy befehl zum abbruch bringen, ggf müsste man die schon vorhandenen vorher löschen.
Sub VerzeichnisAnlegen()
On Error Resume Next
MkDir DLookup("Hilfstexte", "tblHilfstexte", "ID=1") & Me!WOOrdnername
'wobei WOOrdnername ein Feld in der DB ist.
With CreateObject("wscript.shell")
.Run Environ$("comspec") & " /c copy " & "N:\ABCD\vorlagen\*.*" & " " & DLookup("Hilfstexte", "tblHilfstexte", "ID=1") & Me!WOOrdnername & "\", 0, True
End With
End Sub
Uff, das funktioniert nicht, selbst bei sämtlichen Kombinationen in der Umformulierung ... :-(
Sieht jemand, was an diesem code falsch ist? Fehler beim kompilieren ist: "Zeilennummer oder Sprungmarke oder Anweisung oder Anweisungsende" falsch.
FileCopy N:\ABC D\Massnahmen\AEAP\Ablauf(plan)_Inhalte\Standardaufgaben\TREP\workorderkatalog\ordnervorlage\Aufgabenbeschreibung.docx, N:\ABC D\Massnahmen\AEAP\Ablauf(plan)_Inhalte\Standardaufgaben\TREP\workorderkatalog" & Me!WOOrdnername & "\Aufgabenbeschreibung.docx"
Hallo,
ZitatFileCopy "N:\ABC D\Massnahmen\AEAP\Ablauf(plan)_Inhalte\Standardaufgaben\TREP\workorderkatalog\ordnervorlage\Aufgabenbeschreibung.docx", "N:\ABC D\Massnahmen\AEAP\Ablauf(plan)_Inhalte\Standardaufgaben\TREP\workorderkatalog\" & Me!WOOrdnername & "\Aufgabenbeschreibung.docx"
FileCopy "N:\...", ...
Ah, super. Wahnsinn, danke. Du weißt wirklich alles!
Ich habe jetzt versucht, den Dateinahmen durch *.* zu ersetzen, um den gesamten Inhalt von Ordner "ordnervorlage" in den neu erstellten Ordner zu bekommen, doch dann kopiert er garnichts.
ordnervorlage enthält seinerseits zwei Ordner und vier Dateien. Wir kann ich die in den Kopiervorgang mit einbeziehen?