Hallo liebe Forengemeinde,
kurz zu mir: Matthias aus Wien und dankbar für jede Hilfe, da ich leider noch nie mit Makros zu tun hatte.
Vorweg - ich habe 3 Dateien:
- Übersichtsdatei
- Templatedatei
- Arbeitsdatei
Aufgabe:
- In der Übersichtsdatei befinden sich die Spalten Laufende Nr. - Titel - Bearbeiter - Betreuer - Anfangsdatum - Rückgabe Datum 1 - Rückgabe Datum 2
- Außerdem befindet sich in der Übersichtsdatei ein Makro Button.
- Bei Drücken dieses Buttons, sollen je nach Zeile, in der man sich gerade befindet / in der gerade neue Daten eingetragen werden folgendes passieren (je angefangener Zeile wird eine jeweils neue Arbeitsdatei generiert):
- Kopieren der Templatedatei in neue Arbeitsdatei
- Umbenennen der Templatedatei und zwar entsprechend dem Namen, der in der entsprechenden "Titel" Zelle eingetragen wurde.
- Kopieren von Titel - Bearbeiter - Betreuer - Anfangsdatum der jeweiligen Zeile in die neue Arbeitsdatei in definierte Zellorte.
- Herstellen einer Verlinkung zwischen Arbeits- und Übersichtsdatei. Vor allem wegen "Rückgabe Datum 1 und 2" --> Wenn in der Arbeitsdatei dort Werte eingetragen werden, sollen diese in der entsprechenden Zeile in der Übersichtsdatei ebenso erscheinen. Cool wäre auch eine Verlinkung mit Titel usw., damit auch hier Änderungen übernommen werden.
Folgendes habe ich mehr oder weniger lösen können:
- Template Datei wird kopiert
- Template Datei wird gemäß Zelle X umbenannt und dient anschließend als Arbeitsdatei.
- Daten aus Übersichtsdatei werden in Arbeitsdatei kopiert.
Mir fehlt noch folgendes:
- Der eine Makro Button soll für jede neu hinzugefügten Zeile in der Übersichtsdatei (Laufende Nr,Titel, Bearbeiter, Betreuer,....) eine neue Arbeitsdatei aus dem Template generieren und gem. dem neuen Titel umbenennen. Derzeit ist im Makro Code leider eine Fixzelle (Titel) hinterlegt.
- Sobald die Arbeitsdatei erstellt wurde, soll der Titelname in der Übersichtsdatei zum Hyperlink umgewandelt werden.
- Wenn in Arbeitsdatei ein Datum eingetragen wird, soll dieses automatisch in der Übersichtsdatei erscheinen.
- Daten aus Übersichtsdatei werden zwar in Arbeitsdatei kopiert, derzeit sind aber eben auch da Fixzellen eingetragen. Der Code soll respektive aber immer weiterspringen in die nächste Zeile / sobald ein neues YB erstellt wird.
Untenstehend der bisherige Code:
Sub Kopieren()
'Abfrage Datei erstellen MESSAGEBOX
Dim iClick As Integer
iClick = MsgBox( _
prompt:="Ja oder nein?", _
Buttons:=vbYesNo, _
Title:="Neues YellowBelt erstellen?")
If iClick = vbYes Then
'Kopieren und Umbenennen: Template in neuen Ordner & Benennen gemäß Titel Zelle
Dim MyFSO As FileSystemObject
Dim qFolder As String, tFolder As String
Dim tFileOld As String, tFileNew As String
Dim newFileName As String
qFolder = "C:\Users\matth\Desktop\Excel test\Template\Template.xlsx"
tFolder = "C:\Users\matth\Desktop\Excel test\Kopierte Templates\"
tFileOld = "C:\Users\matth\Desktop\Excel test\Kopierte Templates\Template.xlsx"
newFileName = tFolder & Range("B5").Value & ".xlsx"
Set MyFSO = CreateObject("Scripting.FileSystemObject")
MyFSO.CopyFile qFolder, tFolder
If MyFSO.FileExists(newFileName) Then
MsgBox "Titel existiert bereits, bitte neuen wählen!"
Else
Name tFileOld As newFileName
'MessageBox Meldung, dass YellowBelt erstellt wurde
MsgBox "YellowBelt erstellt"
End If
'Daten in neues Dokument kopieren
Dim wksQ As Worksheet
Dim wksZ As Worksheet
Application.ScreenUpdating = False
Set wksQ = ActiveSheet
Set wksZ = GetObject("C:\Users\matth\Desktop\Excel test\Kopierte Templates\Titel 3.xlsx").Sheets("Tabelle1")
With wksZ
.Range("L2") = wksQ.Range("B3").Value
.Range("M2") = wksQ.Range("C3").Value
.Range("N2") = wksQ.Range("D3").Value
.Range("O2") = wksQ.Range("E3").Value
With .Parent
Windows(.Name).Visible = True
.Close SaveChanges:=True
End With
End With
Application.ScreenUpdating = True
ElseIf iClick = vbNo Then
End If
End Sub
Ich hoffe, es ist halbwegs verständlich dargestellt.
Bin wie gesagt über jede Hilfe äußerst dankbar!
Falls ihr generell Tipps / Links zum Einlesen/Einlernen von Visual Basic habt bitte lasst mir diese zukommen :)
Glg Matthias
|