Kopieren und umbenennen einer Vorlage

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Kopieren und umbenennen einer Vorlage
von: Markus
Geschrieben am: 22.05.2015 14:01:23

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

Bild

Betrifft: AW: Kopieren und umbenennen einer Vorlage
von: Michael
Geschrieben am: 22.05.2015 17:27:06
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.

Bild

Betrifft: AW: Kopieren und umbenennen einer Vorlage
von: Markus
Geschrieben am: 26.05.2015 14:29:13
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!

Bild

Betrifft: AW: Kopieren und umbenennen einer Vorlage
von: Michael
Geschrieben am: 26.05.2015 16:50:47
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

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Kopieren und umbenennen einer Vorlage"