Möchte per Button meine Tabelle mit automatisch generierten Namen speichern
Ich habe mir ein Makro geschrieben welches per Klick meine Tabelle in einen fest zugewiesenen Ordner speichert.
Jetzt möchte ich dieses Makro :
Sub Save()
'
' Save Makro
'
'
ActiveWorkbook.SaveAs Filename:="C:\Users\#####\Documents\Stunden.xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
aber so verändern, das man sich einen Speicherort in einer Zelle hinterlegen kann unter dem dann die Datei gespeichert wird. Der Name soll generiert werden indem :
- man in dem Dokument welches 13 Tabellen enthällt in 12 Tabellen jeweils eine Zelle prüft und das der Reihe nach von Januar -Dezember
- ist z.B in der Tabelle vom April die Zelle auf 0 dann soll der Name " Stunden-März-[Jahreszahl aus einer anderen Zelle].xlsm generiert werden
Wie müßte man die Variable definieren und wie die Variable dann in den Namen einsetzen ? Dachte an irgendwelche Platzhalter
Würde dieses auch gerne mit Excel üblichen Formeln realisieren, aber ich denke das sprengt den Rahmen von Excel, sodas es mit VBA besser realisierbar wäre. Bin diesbezüglich für alle Vorschläge offen.
Jetzt möchte ich dieses Makro :
Sub Save()
'
' Save Makro
'
'
ActiveWorkbook.SaveAs Filename:="C:\Users\#####\Documents\Stunden.xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
aber so verändern, das man sich einen Speicherort in einer Zelle hinterlegen kann unter dem dann die Datei gespeichert wird. Der Name soll generiert werden indem :
- man in dem Dokument welches 13 Tabellen enthällt in 12 Tabellen jeweils eine Zelle prüft und das der Reihe nach von Januar -Dezember
- ist z.B in der Tabelle vom April die Zelle auf 0 dann soll der Name " Stunden-März-[Jahreszahl aus einer anderen Zelle].xlsm generiert werden
Wie müßte man die Variable definieren und wie die Variable dann in den Namen einsetzen ? Dachte an irgendwelche Platzhalter
Würde dieses auch gerne mit Excel üblichen Formeln realisieren, aber ich denke das sprengt den Rahmen von Excel, sodas es mit VBA besser realisierbar wäre. Bin diesbezüglich für alle Vorschläge offen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 183255
Url: https://administrator.de/contentid/183255
Ausgedruckt am: 25.11.2024 um 23:11 Uhr
12 Kommentare
Neuester Kommentar
Moin Joerg18470,
Unter der Annahme, dass:
1. Deine Mappe 12 oder mehr Blätter enthält,
2. diese je einen Monatsnamen tragen,
2. die ersten 12 Blätter der Mappe sind,
3. jeweils in Zelle 'A1' eine Null oder eine 1 steht,
kann das etwa so aussehen:
Die Funktion gibt den Namen des Blattes zurück, das in 'A1' einen Wert >0 enthält und auf das ein Blatt mit dem Wert '0' (in dieser Zelle) folgt. Ist bereits der Januar = 0, dann siehe Zeile 13-14.
Das Ganze im Modulblatt 'Diese Arbeitsmappe' einfügen.
Für einen Dateinamen mit Monat kann das so aussehen (ohne das Jahr):
Und wenn aus dem aktiven Tabellenblatt heraus gespeichert wird:
Frohe Ostern und freundliche Grüße von der Insel - Mario
PS: Guten Tag oder ein Hallo sind hier durchaus gern gesehen!
Unter der Annahme, dass:
1. Deine Mappe 12 oder mehr Blätter enthält,
2. diese je einen Monatsnamen tragen,
2. die ersten 12 Blätter der Mappe sind,
3. jeweils in Zelle 'A1' eine Null oder eine 1 steht,
kann das etwa so aussehen:
Sub MappeSpeichern() ' nicht 'Save', das ist ein reserviertes Wort
MsgBox VZName ' nur zur Kontrolle, dann auskomm. oder löschen
ActiveWorkbook.SaveAs Filename:="C:\Users\" & VZName & "\Documents\Stunden.xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
Private Function VZName() As String
Dim i As Integer
With ThisWorkbook
For i = 1 To 12
If .Sheets(i).Cells(1, 1).Value = 0 Then
If i = 1 Then
VZName = .Sheets(i).Name
' VZName = "Keiner"
Exit Function
Else
VZName = .Sheets(i - 1).Name
Exit Function
End If
End If
Next i
End With
End Function
Die Funktion gibt den Namen des Blattes zurück, das in 'A1' einen Wert >0 enthält und auf das ein Blatt mit dem Wert '0' (in dieser Zelle) folgt. Ist bereits der Januar = 0, dann siehe Zeile 13-14.
Das Ganze im Modulblatt 'Diese Arbeitsmappe' einfügen.
Für einen Dateinamen mit Monat kann das so aussehen (ohne das Jahr):
Sub MappeSpeichern()
MsgBox "C:\Users\#####\Documents\Stunden " & FileNameToken & ".xlsm"
ActiveWorkbook.SaveAs Filename:="C:\Users\#####\Documents\Stunden " & FileNameToken & ".xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
Private Function FileNameToken() As String
Dim i As Integer
With ThisWorkbook
For i = 1 To 12
If .Sheets(i).Cells(1, 1).Value = 0 Then
FileNameToken = IIf(i = 1, .Sheets(i).Name, .Sheets(i - 1).Name) ' wie oben, kürzere Schreibweise
Exit Function
End If
Next i
End With
End Function
Und wenn aus dem aktiven Tabellenblatt heraus gespeichert wird:
ActiveWorkbook.SaveAs Filename:="C:\Users\#####\Documents\Stunden " & ActiveSheet.Name & ".xlsm"
PS: Guten Tag oder ein Hallo sind hier durchaus gern gesehen!
Moin Joerg18470,
Du hast jetzt beide Versionen in den Quelltext übernommen - für eine musst Du Dich entscheiden.
Angenommen, es soll die zweite Version werden, dann muss die Zeile:
erstmal gültige Dateinamen (i.e. <C:\...\Stunden März.xlsm>) anzeigen.
Die Zeile danach kommentierst Du (vorerst) komplett aus, da haben sich bei Dir Fehler eingeschlichen, muss so aussehen:
Und wenn das Ganze per Button gestartet wird:
dann muss der gesamte Code in dem Modul des Tabellenblattes stehen, das den Button trägt - oder auch (evtl. besser, weil sachlich zusammenhängender), auf einem extra eingefügten Modul.
Freundliche Grüße von der Insel - Mario
Du hast jetzt beide Versionen in den Quelltext übernommen - für eine musst Du Dich entscheiden.
Angenommen, es soll die zweite Version werden, dann muss die Zeile:
MsgBox "C:\Users\Joerg\Documents\Stunden " & FileNameToken & ".xlsm"
Die Zeile danach kommentierst Du (vorerst) komplett aus, da haben sich bei Dir Fehler eingeschlichen, muss so aussehen:
Sub MappeSpeichern()
MsgBox "C:\Users\Joerg\Documents\Stunden " & FileNameToken & ".xlsm"
' ActiveWorkbook.SaveAs Filename:="C:\Users\Joerg\Documents\Stunden " & FileNameToken & ".xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
Und wenn das Ganze per Button gestartet wird:
Private Sub CommandButton1_Click()
Call MappeSpeichern
End Sub
dann muss der gesamte Code in dem Modul des Tabellenblattes stehen, das den Button trägt - oder auch (evtl. besser, weil sachlich zusammenhängender), auf einem extra eingefügten Modul.
Freundliche Grüße von der Insel - Mario
Moin Joerg18470,
Danke und Mahlzeit
Biber
Zitat von @Joerg18470:
Jetzt geh ich erstmal meinen lecker Osterhasen verputzen, schön mit Rotkohl und Klößen
Mach aber bitte vorher die Löffel ab und an diesen Beitrag das, was die Hoppler immer schlagen in einem satten Waldmeisterton..Jetzt geh ich erstmal meinen lecker Osterhasen verputzen, schön mit Rotkohl und Klößen
Danke und Mahlzeit
Biber