Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Möchte per Button meine Tabelle mit automatisch generierten Namen speichern

Frage Microsoft Microsoft Office

Mitglied: Joerg18470

Joerg18470 (Level 1) - Jetzt verbinden

08.04.2012 um 14:44 Uhr, 4109 Aufrufe, 12 Kommentare

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.
Mitglied: mak-xxl
08.04.2012 um 15:11 Uhr
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:
01.
Sub MappeSpeichern()                ' nicht 'Save', das ist ein reserviertes Wort 
02.
    MsgBox VZName                   ' nur zur Kontrolle, dann auskomm. oder löschen 
03.
    ActiveWorkbook.SaveAs Filename:="C:\Users\" & VZName & "\Documents\Stunden.xlsm", _ 
04.
                          FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False 
05.
End Sub 
06.
 
07.
Private Function VZName() As String 
08.
    Dim i As Integer 
09.
    With ThisWorkbook 
10.
        For i = 1 To 12 
11.
            If .Sheets(i).Cells(1, 1).Value = 0 Then 
12.
                If i = 1 Then 
13.
                    VZName = .Sheets(i).Name 
14.
'                    VZName = "Keiner" 
15.
                    Exit Function 
16.
                Else 
17.
                    VZName = .Sheets(i - 1).Name 
18.
                    Exit Function 
19.
                End If 
20.
            End If 
21.
        Next i 
22.
    End With 
23.
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):
01.
Sub MappeSpeichern() 
02.
    MsgBox "C:\Users\#####\Documents\Stunden " & FileNameToken & ".xlsm" 
03.
    ActiveWorkbook.SaveAs Filename:="C:\Users\#####\Documents\Stunden " & FileNameToken & ".xlsm", _ 
04.
                            FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False 
05.
End Sub 
06.
 
07.
Private Function FileNameToken() As String 
08.
    Dim i As Integer 
09.
    With ThisWorkbook 
10.
        For i = 1 To 12 
11.
            If .Sheets(i).Cells(1, 1).Value = 0 Then 
12.
                FileNameToken = IIf(i = 1, .Sheets(i).Name, .Sheets(i - 1).Name)     ' wie oben, kürzere Schreibweise 
13.
                Exit Function 
14.
            End If 
15.
        Next i 
16.
    End With 
17.
End Function
Und wenn aus dem aktiven Tabellenblatt heraus gespeichert wird:
01.
ActiveWorkbook.SaveAs Filename:="C:\Users\#####\Documents\Stunden " & ActiveSheet.Name & ".xlsm"
Frohe Ostern und freundliche Grüße von der Insel - Mario

PS: Guten Tag oder ein Hallo sind hier durchaus gern gesehen!
Bitte warten ..
Mitglied: Joerg18470
08.04.2012 um 15:56 Uhr
Dafür entzschuldige ich mich natürlich in höchster Form, Ein Hallo oder guten Tag muß einfach wirklich drin sein !!!

Also erstmal nachträglich Hallo und frohe Ostern zusammen !

Wow so schnell ein solches Script zusammen gebaut ....Hut zieh...
In der Zelle A1 steht immer ein Datum und die Tabellen beginnen ab der 2. Tabelle. Die erste ist allgemeines wie Feiertagskalender, Jahreszahl die für alle Tabellen zur Berechnung benötigt wird und noch verschiedenes anderes allgemeines.
Werde es gleich mal testen, sage dir dann ob es funktioniert hat, Danke eins zwein

Grüße aus dem tiefsten Sachsen
Bitte warten ..
Mitglied: mak-xxl
08.04.2012 um 16:03 Uhr
Moin Joerg18470,

Du darfst die KoTau-Stellung wieder verlassen

Wenn ab Blatt 2 der fragliche Rümpel steht, dann:
01.
For i = 2 To 13                  ' Zeile 10 
02.
If i = 2 Then                    ' Zeile 12
Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: Joerg18470
08.04.2012 um 17:53 Uhr
Gehe ich richtig in der Annahme, das ich in Zeile 11 bei Cells(1,1) für die Zelle C44, Cells(3,44) eingeben muß ?
Bitte warten ..
Mitglied: mak-xxl
08.04.2012 um 17:59 Uhr
Moin Joerg18470,

Nein: .Cells(Zeile, Spalte) -> .Cells(44, 3) = 'C44'.

Du kannst aber notfalls auch mit der 'Range'-Angabe arbeiten:

01.
If .Sheets(i).Range("C44").Value = 0 Then
Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: Joerg18470
08.04.2012 um 18:44 Uhr
Irgendwie geht das nicht so wie ich das möchte, der Code ist mir einleuchtend. Da wird auch was angemarkert, ich stelle mal ein Bild zur Verfügung.

[URL=http://www.pic-upload.de/view-13686377/Ashampoo_Snap_2012.04.08_18h34m0 ...][IMG]http://www10.pic-upload.de/08.04.12/wjal7qdgm3ah.png[/IMG][/URL]

Der "Speichern " Button liegt mit in der ersten allgemeinen Tabelle. Ich denke mal das ich da irgendwo einen Fehler mit der Makrozuweisung gemacht habe. Hier nochmal ein Bild des Codes von "DieseMappe"

[URL=http://www.pic-upload.de/view-13686477/Ashampoo_Snap_2012.04.08_18h41m0 ...][IMG]http://www7.pic-upload.de/08.04.12/ajsq5lsf8491.png[/IMG][/URL]

Hoffe du kannst damit etwas anfangen.
Bitte warten ..
Mitglied: mak-xxl
08.04.2012 um 18:55 Uhr
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:
01.
MsgBox "C:\Users\Joerg\Documents\Stunden " & FileNameToken & ".xlsm"
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:
01.
Sub MappeSpeichern() 
02.
    MsgBox "C:\Users\Joerg\Documents\Stunden " & FileNameToken & ".xlsm" 
03.
'    ActiveWorkbook.SaveAs Filename:="C:\Users\Joerg\Documents\Stunden " & FileNameToken & ".xlsm", _ 
04.
                            FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False 
05.
End Sub
Und wenn das Ganze per Button gestartet wird:
01.
Private Sub CommandButton1_Click() 
02.
    Call MappeSpeichern 
03.
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
Bitte warten ..
Mitglied: Joerg18470
08.04.2012 um 19:38 Uhr
Jippie...
die Messagebox öffnet und sagt mir den Speicherpfad. Natürlich speichert diese nicht, aber sie gibt mir den Namen Stunden Januar, da kommt auch bestimmt gleich das nächste Problem mit, da im Februar auf Grund der wenigeren Tage als Ausnahme die zu prüfende Zelle in C42 ist. Aber das würde ich erstmal nach hinten schieben um eines erstmal richtig zu machen.
Habe die 2. Version genommen und diese als seperates Modul gespeichert. "DieseArbeitsmappe" habe ich komplett geleert, hoffe das war kein Fehler. Dann bin ich auf den Button und habe dieses Modul zugewiesen. Soweit geht es prima, worin könnte jetzt der Fehler in der auskommentierten Zeile liegen, kann es sein das er da keinen Wert für definieren kann ?

PS.: Habe die Zeile wieder rein genommen und er speichert....PRIMA...
Bitte warten ..
Mitglied: bastla
08.04.2012 um 19:50 Uhr
... bzw als Bezug auf eine Zelle für Schleifen besser als "Range()" und etwas leichter lesbar:
If .Sheets(i).Cells(44, "C").Value = 0 Then
Grüße
bastla

[Edit] Im Thread etwas ungünstig einsortiert, aber der Bezug (zum Zell-Bezug ) dürfte klar sein ... [/Edit]
Bitte warten ..
Mitglied: mak-xxl
08.04.2012 um 20:11 Uhr
Moin Joerg18470,

Erfreulich - das Problem mit dem Tabellenblatt 'Februar' könntest Du per Formel lösen: also in Zelle 'C44' als Formel '=C42' eintragen, dann braucht VBA keine Verrenkungen machen.

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: Joerg18470
08.04.2012 um 20:34 Uhr
Habe die Tabelle im Februar angepasst und es funktioniert bombastisch !
Sorry wenn ich mich etwas blöd angestellt habe, aber ich sehe hier sind die echten Meister am werkeln !
Danke !!!

Jetzt geh ich erstmal meinen lecker Osterhasen verputzen, schön mit Rotkohl und Klößen
Bitte warten ..
Mitglied: Biber
09.04.2012 um 01:02 Uhr
Moin Joerg18470,

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..

Danke und Mahlzeit
Biber
Bitte warten ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
VB for Applications
gelöst Xml-Datei laden bzw. auf Festplatte kopieren und per VBA in eine Access-Tabelle speichern (22)

Frage von machohunk zum Thema VB for Applications ...

VB for Applications
gelöst Datei mit variablem Namen einlesen und als Excel speichern (1)

Frage von Anrion zum Thema VB for Applications ...

Windows Server
gelöst Bestimmte Computer-Namen automatisch in bestimmte OU verschieben (1)

Frage von Robbi666 zum Thema Windows Server ...

IDE & Editoren
USB STICK Datei AUTOMATISCH beim anschliessen auf fremden PC öffnen (9)

Frage von Jwanner83 zum Thema IDE & Editoren ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...