Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1424to1428
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Kopieren und umbenennen einer Vorlage

Kopieren und umbenennen einer Vorlage
22.05.2015 14:01:23
Markus
Hallo liebe Excel-Freunde,
ich benötige ein wenig Hilfe für ein Projekt.
Ich habe eine Tabelle mit 20 Zellen untereinander, mit Dateinamen (teilweise ausgefüllt) und eine Zelle mit dem Arbeitsverzeichnis mit dem Inhalt "C:\Projekt"
Ein Klick auf einen Button soll mir nun die Datei "Vorlage.dat" (im Unterordner "Vorlagen")in die Dateinamen umbenennen und ins Arbeitsverzeichnis kopieren.
Wie gehe ich die ganze Sache am geschicktesten an, ich würde gerne mehr VBA anwenden können und nicht nur stur einen Code rein kopieren. Könnt ihr mir dabei helfen?
Beste Grüße
Markus

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren und umbenennen einer Vorlage
22.05.2015 17:27:06
Michael
Hi Markus,
wenn du "gerne mehr VBA anwenden können" willst, solltest Du nen Kurs belegen, z.B. bei der VHS vor Ort.
Oder schnüffel Dich halt durch Tutorials, u.a. hier beim Herrn Herber - er bietet auch CDs an.
Was soll ich Dir zu einem "Dreizeiler" erzählen?
Ich recherchiere bei einer bekannten Suchmaschine nach: excel vba datei kopieren
und finde ganz oben zwei Einträge des Forums, und wenn ich die Suchmaschine machen lasse, wird die Suche ergänzt um den Begriff "filecopy", es wird also gesucht nach: excel vba datei kopieren filecopy
und findet https://www.herber.de/forum/archiv/588to592/589058_Datei_per_VBA_kopieren.html
wo ganz unten ein netter Code von Frank steht, den Du Dir mal kopieren kannst.
Die untere, aufrufende Funktion muß nur durch eine Schleife ergänzt werden, die Deine Zellen durchsucht.
Also recherchiere mal: excel vba for-schleife und sehe Dir die Infos an.
Sub schleife()
Dim i As Long
For i = 1 To 20
MsgBox "Dein Dateiname: " & Range("A" & i).Value
Next
End Sub

Hier mußt Du nur die MsgBox durch den Aufruf von Franks Kopierfunktion ersetzen - fertig!
Schöne Grüße,
Michael
P.S.: ach so, da steht "teilweise ausgefüllt", also solltest Du noch ne if-Abfrage rein machen, ob die Zelle leer ist. Recherchiere nach: excel vba if-Abfrage
P.P.S.: wenn Du es dann noch ganz richtig machen willst, recherchierst Du noch: excel vba fehlerbehandlung und siehst Dir den link an: http://www.online-excel.de/excel/singsel_vba.php?f=145
(Vorsicht, das ist schon der zweite Teil)
P.P.P.S.: Ich weiß schon, um was zu suchen, muß man bereits eine gewisse Ahnung haben, sonst hat man keine Suchbegriffe parat. Ich stelle immer excel vba voran.
Naja, was will man machen? Learning by doing... Beschäftige Dich damit, recherchiere, und irgendwann bist Du fit! Und: Kurse an der VHS kann ich nur wärmstens empfehlen, um einen gewissen Grundstock zu haben, halt mal grob eine Vorstellung von der Geschichte zu bekommen.

Anzeige
AW: Kopieren und umbenennen einer Vorlage
26.05.2015 14:29:13
Markus
Hi Michael, vielen Dank für die ausführliche Antwort.
Jetzt hab ich ne kleine einfache Hilfestellung zum erstellen eines Programms, das fehlt mir bei sowas immer am Anfang ("Wie fang ich jetzt an")
mein Code sieht wie folgt aus und funktioniert soweit:

Sub VorlagenErstellen(ByVal Arbeitsverzeichnis As String, _
ByVal FileName As String, _
ByVal Dateiendung As String)
Dim src As Variant, dst As Variant
src = Arbeitsverzeichnis & "\00_Vorlagen\vorlage" & Dateiendung   ' Namen der Quelldatei  _
festlegen."
dst = Arbeitsverzeichnis & "\" & FileName & Dateiendung   ' Namen der Zieldatei festlegen.
FileCopy src, dst    ' Quell- in Zieldatei kopieren.
End Sub


Sub CmdVorlagenErstellen_Click()
Dim i As Long
For i = 1 To 50
n = 4 + i
On Error GoTo Fehler
If Range("C" & n).Value  "" Then
Call VorlagenErstellen(Range("B1").Value, _
Range("C" & (i + 4)).Value, _
".dat")
End If
Next
Exit Sub
Fehler:
MsgBox "Fehler beim Generieren der Datei " & Range("C" & (i + 4)).Value & " aufgetreten"
End Sub
Die Fehler-MsgBox erscheint leider nicht, wenn ich ein Zeichen in die "Dateinamen"-Variable schreibe, welches nicht für Dateinamen geeignet ist (beispielsweise "|"). Die Datei wird einfach nicht regeneriert. Könntest du mir dabei bitte noch helfen?
Vielen Dank für deine Hilfe!

Anzeige
AW: Kopieren und umbenennen einer Vorlage
26.05.2015 16:50:47
Michael
Hi Markus,
das sieht doch schon mal ganz gut aus!
Zum Testen stelle ich ein paar Sachen um, weil ich zu faul bin, die Verzeichnisstruktur bei mir anzulegen.
Vorab sehe ich zwei Möglichkeiten, mit den Fehlern zu hantieren:
1. Man könnte eine "globale Variable" verwenden, die die Information bereithält, ob ein Fehler aufgetreten ist *oder* zum Kopieren anstelle einer sub eine function verwenden, die die Fehlerinformation "nach oben durchreicht"; prinzipiell sind beide Möglichkeiten auch im o.g. Tutorial beschrieben (sofern Du es vollständig durchgeackert hast).
2. Man könnte den Dateinamen auf "falsche" Zeichen prüfen, bevor man die Kopierroutine überhaupt aufruft. Dann kann man sich meines Erachtens das on error schenken - es könnten zwar Fehler auftreten, aber die wären dann so schwerwiegend (Fehler auf Festplatte oder so), daß es auch schon wurscht ist, ob das Makro mit einer Fehlermeldung abbricht - kommt drauf an, wer mit dem Ding dann arbeiten soll.
In beiden Fällen könntest Du das Ergebnis der Prüfung/Kopieraktion z.B. rechts in Spalte D speichern, also z.B. "ok" bzw. "Fehler Nr. 1234, sehen Sie im Handbuch nach" & chr(10) & "Sie HABEN doch das Handbuch nicht verräumt?!"
Grundsätzlich muß der Fehler immer dort abgefangen werden, wo er auftritt, und das ist in dem Fall der Befehl filecopy.
Also:

Function VorlagenErstellen(ByVal src As String, ByVal dst As String) As String
On Error Resume Next
FileCopy src, dst    ' Quell- in Zieldatei kopieren.
If Err = 0 Then
VorlagenErstellen = "ok"
Else
VorlagenErstellen = Err.Description
End If
End Function
Sub CmdVorlagenErstellen_Click()
Dim i As Long
Dim Arbeitsverzeichnis As String
Arbeitsverzeichnis = Range("B1").Value
' nur *einmal* nötig, geht so "schneller"
For i = 5 To 54            ' n ist überflüssig
If Range("C" & i).Value  "" Then
Range("D" & i).Value = _
VorlagenErstellen(Arbeitsverzeichnis & "\00_Vorlagen\vorlage.dat", _
Arbeitsverzeichnis & "\" & Range("C" & i).Value & ".dat")
'           VorlagenErstellen(Arbeitsverzeichnis & "\Test\Klein.bmp", _
'            Arbeitsverzeichnis & "\" & Range("C" & i).Value & ".dat")
' tut!
End If
Next
End Sub
Jetzt hast Du doch was "Fertiges", aber Mann, ich will auch erst testen, bevor ich Dir was erzähle...
Mann könnte die function auch as boolean definieren und das dann abfragen, aber so erhältst Du gleich den Fehlertext.
Programmieren für Faule, hehe.
Happy Exceling,
Michael
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige