Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1920to1924
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

Dat. kopieren und versch.Namen speicher

Dat. kopieren und versch.Namen speicher
08.03.2023 12:15:09
Friederich
Hi, ich stecke fest. Ich möchte aus der Datei C:\Users\r5479\Desktop\BÜ-Tool\BÜ-Bearbeitung\MitarbeiterListe.xlsm (hier liegen die Namen ab) heraus per Schaltfläsche, die Datei "" in den Ordner "C:\Users\r5479\Desktop\BÜ-Tool\" kopieren, dann aber mit der Endung, den jeweiligen Namen also zB Bps BÜ-Tool-BearbeitungMeyer.xlsm. Ich weiß schon wie man einen Datei kopiert und gleichzeitig umbenennt.. Aber ich schaffe es nicht zu automatisieren, das der Name angefügt wird. Super wäre eine Überprüfung ob der Dateiname bereits vorliegt (damit man neue Mitarbeiter einfach einfügt)
Hier mein Versuch, meine Ideen (bitte nicht lachen und nicht böse sein über meine dumme Ausführung):
Sub Dateien()
'Hier soll die neue Datei gespeichert werden:
Const cStrgZielOrdner = "C:\Users\r5479\Desktop\BÜ-Tool\"

Dim intX As Range ("A") 'ist das richtig deffiniert?
Dim strgBaseName As String
'Prüfe ob Datei bereits vorliegt:
If .FileExists("C:\Users\r5479\Desktop\BÜ-Tool\BÜ-Bearbeitung\BÜ-Tool-Bearbeitung***.xlsm)
' Abbrechen
Exit Sub
Else
'Nehme den Dateiennamen "C:\Users\r5479\Desktop\BÜ-Tool\BÜ-Bearbeitung\BÜ-Tool-Bearbeitung.xlsm" und setze die Namen der MA dahinter:
'Name der Mitarbeiter sind in Datei "C:\Users\r5479\Desktop\BÜ-Tool\BÜ-Bearbeitung\MitarbeiterListe.xlsm""
strgBaseName = Split(ThisWorkbook.Name, ".")(0)
ThisWorkbook.SaveCopyAs cStrgZielOrdner & strgBaseName & Trim(Str(intX)) & ".xlsm"
Next intX
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dat. kopieren und versch.Namen speicher
08.03.2023 20:00:32
Yal
Hallo Severine,
Ja, der Anfang ist schwer.
Sub DateiAlsNeue_speichern() ' sprechende Name
'Unter Anbindung der Biliothek "Micosoft Scripting Runtime" (in VB, "Extras", "Verweise...", haken bei der Bib
Dim FSO As New FileSystemObject 'aus der Bib Scripting Runtime
Dim Z As Range 'Z wei Zelle
Dim DateiName As String
'die "Dim" werden immer am Anfang aufgelistet. Es ist nur eine Deklaration. Instanziert werden sie nur bei Bedarf
'dann die Const
Const cZielOrdner = "C:\Users\r5479\Desktop\BÜ-Tool\"
'Prüfe ob Datei bereits vorliegt:
    With Worksheets("Tabelle1") 'Anpassen
        For Each Z In Range(.Range("A1"), .Cells(Rows.Count, "A").End(xlUp)) 'für jedes Element in Spalte A
            DateiName = Split(ThisWorkbook.Name, ".")(0) & Trim(Z.Value) & Split(ThisWorkbook.Name, ".")(1)
            If Not FSO.FileExists(cZielOrdner & DateiName) Then
                ThisWorkbook.SaveCopyAs cZielOrdner & DateiName
            End If
            '.. soll irgenwas mit dieser Datei passieren? die Datei ist dupliziert, aber noch nicht geöffnet
        Next
    End With
End Sub
Mit dieser Lösung geht man über alle Zellen der Spalte A und prüft, ob eine Datei mit dem Zielname im Zielverzeichnis vorhanden ist (um mit * zu suchen müsste man die "Dir" Funktion verwenden). Wenn nicht, wird diese abgelegt ("SaveCopyAs").
Eine einzelne Zelle kannst Du so "zuweisen" (es sind Objekte, daher "Set": nicht die Wert wird übertragen, sondern die Stelle, wo das Objekt in Speicher liegt. Sichtbar ist diese Adresse aber nie):
Dim R as Range
Set R = Worksheets("xyz").Range("A1")
VG
Yal
Anzeige
AW: Dat. kopieren und versch.Namen speicher
08.03.2023 21:15:07
Friederich
Oh man, danke! Die Datei mit dem veränderten Namen soll nur im Ordner C:\Users\r5479\Desktop\BÜ-Tool gespeichert werden. Das ist soweit ich sehe schon der Fall, also muss nach dem end if nichts mehr hin. Die Microsoft Scripting Runtime hatte ich bereits angehakt. Worksheets(Tabelle1) ist da wo die Namen gelistet sind. Ich glaube, ich verstehe wie das funktionieren soll. Ganz lieben Dank. Ich melde mich nach dem Probelauf zurück.
AW: Dat. kopieren und versch.Namen speicher
09.03.2023 08:25:03
Friederich
Hi,
da stimmt noch nicht alles. Ich halte Dateien der Form MitarbeiterListeHabeckxlsm also fehlt for dem xlsm der Punkt. Wie bekomme ich den noch rein? dann dürfte alles klappen.
Anzeige
AW: Dat. kopieren und versch.Namen speicher
09.03.2023 09:24:15
Friederich
Hallo Yal,
ich schon wieder;-)
Ich habe einen weiteren Fehler entdeckt. Der Code kopiert die Datei mit den Namen der Mitarbeiter (also C:\Users\r5479\Desktop\BÜ-Tool\BÜ-Bearbeitung\MitarbeiterListe.xlsm, was der aktive Worksheed, also ThisWorkbook ist) in den Ordner C:\Users\r5479\Desktop\BÜ-Tool
Es soll aber die Datei C:\Users\r5479\Desktop\BÜ-Tool\BÜ-Bearbeitung\BÜ-Tool-Bearbeitung.xlsm kopieren/speichern und die Namen dahinter einsetzen (dieser Punkt klappt bis auf die Endung ".xlsm, da fehlt der Punkt). Ich muss es an dieser Stelle aktivieren, richtig oder? an der Stelle ThisWorkbook.SaveCopyAs cZielOrdner & DateiName
Wie ersetze ich das? Workbook("BÜ-Tool-Mitarbeiter").Worksheet("BÜ-Tool"). anstatt ThisWorkbook. ? Wenn es das wäre, hätte ich das endlich verstanden!
Das war aber mein Fehler: in meiner Anfrage hatte ich den Dateiname nicht reinkopiert (da steht nur "") . Genauigkeit ist alles ;-)
Danke für deine Unterstützung
Lieben Gruß
Severine (Friederich)
Anzeige
AW: Dat. kopieren und versch.Namen speicher
09.03.2023 10:51:36
Yal
Hallo Severine,
da wo die Dateiname als Verkettung von Einzelteile zusammengebaut wird kommt der Punkt daziwschen:
           DateiName = Split(ThisWorkbook.Name, ".")(0) & Trim(Z.Value) & "." & Split(ThisWorkbook.Name, ".")(1)
Bei der Beschreibung musst Du -fast- genauso stumpf, wie einen Rechner sein. Was haben wir:
_ eine Datei, bzw. Arbeitsmappe, bei dem der Code liegt. Das ist "ThisWorkbook" (es müsste, wenn ich es richtig verstehe, die Datei mit der Liste sein. "C:\Users\r5479\Desktop\BÜ-Tool\BÜ-Bearbeitung\MitarbeiterListe.xlsm" )
_ eine abgelgte Kopie, was uns nicht besonders kümmert: wir sagen nur, wo und mit welcher Name
_ eine Datei der als Vorlage für die Kopie gilt. Ich habe bisher angenommen, es handelt sich um "ThisWorbook", aber anscheinend nicht.
Ich schlage folgende Variante vor:
Sub DateiAlsNeue_speichern() ' sprechende Name
'Unter Anbindung der Biliothek "Micosoft Scripting Runtime" (in VB, "Extras", "Verweise...", haken bei der Bib
Dim FSO As New FileSystemObject 'aus der Bib Scripting Runtime
Dim Z As Range 'Z wei Zelle
Dim Dateiname As String
Dim DateiExt As String
Dim ZielDateiname As String
Dim wbVorlage As Workbook
'die "Dim" werden immer am Anfang aufgelistet. Es ist nur eine Deklaration. Instanziert werden sie nur bei Bedarf
'dann die Const
Const cZielOrdner = "C:\Users\r5479\Desktop\BÜ-Tool\"
'Vorlage öffnen
    Set wbVorlage = Workbook_holen(cZielOrdner & "BÜ-Bearbeitung\BÜ-Tool-Bearbeitung.xlsm")
    Dateiname = Split(wbVorlage.Name, ".")(0)
    DateiExt = Split(wbVorlage.Name, ".")(1)
    
'Prüfe ob Datei bereits vorliegt:
    With Worksheets("Tabelle1") 'Anpassen
        For Each Z In Range(.Range("A1"), .Cells(Rows.Count, "A").End(xlUp)) 'für jedes Element in Spalte A
            ZielDateiname = Dateiname & Trim(Z.Value) & "." & DateiExt
            If Not FSO.FileExists(cZielOrdner & ZielDateiname) Then
                wbVorlage.SaveCopyAs cZielOrdner & ZielDateiname
            End If
            '.. soll irgenwas mit dieser Datei passieren? die Datei ist dupliziert, aber noch nicht geöffnet
        Next
    End With
End Sub
Private Function Workbook_holen(ByVal Pfad As String) As Workbook
Dim Dateiname As String
'Dateiname extrahieren
    Dateiname = Mid(Pfad, InStrRev(Pfad, "\") + 1)
'Prüfen ob bereit offen (fehlertolerant. Ergebnis wird geprüft)
On Error Resume Next
    Set Workbook_holen = Workbooks(Dateiname)
'wenn nicht referenziert, dann öffnen
    If Workbook_holen Is Nothing Then Set Workbook_holen = Workbooks.Open(Pfad)
End Function
Die Vorlage-Datei wird zuerst ausserhalb der For-Schleife geholt, und zwar mithilfe einer separate Funktion. Diese Funktion nutzt die Möglichkeit eine Fehler zu machen und diese auszuwerten, daher separat ("On Error" gilt immer nur innerhalb einer Prozedure).
Dateiname-bestandsteil werden in Variablen abgelegt.
In der Schleife wird stets die Vorlage unter einen neuen Namen gespeichert.
Voilà.
À bientôt
Yal
Anzeige
AW: Dat. kopieren und versch.Namen speicher
09.03.2023 12:27:16
Friederich
Es meldet einen Fehler: Objektvariable nicht festgelegt (Fehler 91) auf der Höhe
Dateiname = Split(wbVorlage.Name, ".")(0)
AW: Dat. kopieren und versch.Namen speicher
09.03.2023 12:45:57
Friederich
Ich habs. Es müssen bei Dateien offen sein, dann klappt es. Super. Danke
Ein bisschen kompakter
09.03.2023 17:26:38
Yal
In dem die "Variable", die nicht variieren, als Konstante deklariert und das Öffnen der Quelldatei über 2 Parameter übergibt:
Sub DateiAlsNeue_speichern()
'Unter Anbindung der Biliothek "Micosoft Scripting Runtime" (in VB, "Extras", "Verweise...", haken bei der Bib
Dim FSO As New FileSystemObject
Dim wbVorlage As Workbook
Dim Z As Range
Dim ZielDateiname As String
Const cZielOrdner = "C:\Users\r5479\Desktop\BÜ-Tool\"
Const cDName = "BÜ-Tool-Bearbeitung"
Const cExt = ".xlsm"
'Vorlage öffnen
    Set wbVorlage = Workbook_holen(cZielOrdner & "BÜ-Bearbeitung\", cDName & cExt)
    If wbVorlage Is Nothing Then MsgBox "Quelldatei nicht gefunden.": Exit Sub
'Prüfen ob Datei bereits vorliegt, wenn nicht speichern
    With Worksheets("Tabelle1") 'Anpassen
        For Each Z In Range(.Range("A1"), .Cells(Rows.Count, "A").End(xlUp))
            ZielDateiname = cDName & Trim(Z.Value) & cExt
            If Not FSO.FileExists(cZielOrdner & ZielDateiname) Then wbVorlage.SaveCopyAs cZielOrdner & ZielDateiname
        Next
    End With
End Sub
Private Function Workbook_holen(ByVal Pfad As String, ByVal Dateiname As String) As Workbook
On Error Resume Next 'bei Fehler einfach weiter
    Set Workbook_holen = Workbooks(pfdad & Dateiname) 'Prüfen ob bereit offen
    If Workbook_holen Is Nothing Then Set Workbook_holen = Workbooks.Open(Pfad & Dateiname) 'wenn nicht referenziert, dann öffnen
End Function
Nächste Übung:
der Code im Schritt-Modus laufen lassen mit F8
dabei das Lokalfenster offen haben und die Variable im Blick haben (auf den "+" neugierig sein).
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige