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

Excel VBA - Tabelle per Button-Klick abspeichern. Speichername setzt sich aus einem Text und einem Zellinhalt zusammen.

Frage Microsoft Microsoft Office

Mitglied: Amiga500

Amiga500 (Level 1) - Jetzt verbinden

02.03.2012 um 09:00 Uhr, 10137 Aufrufe, 13 Kommentare

Moin,

ich habe ein commandbutton der nach dem Klick die Arbeitsmappe abspeichern soll. Dies funktioniert schon... allerdings möchte ich, dass der Speichername sich aus einem Text (nämlich "000") und einer Vorgangsnr. (befindet sich in G30) zusammensetzt.

Also nach dem Klick des Buttons (wenn die Vorgangsnr. z.B. 12 ist) wird die Tabelle als 00012.xlsm in einem Unterordner (Unterordner heisst = Vorgänge) abgespeichert.


Hier mein bisheriger Code... den hab ich aus verschiedenen Codes die ich im Netz gefunden habe zusammengebastelt...
Es öffnet sich zwar das Fenster zum abspeichern, aber es wird mein definierter Text als Speichername nicht angezeigt. Zusätzlich fehlt die Funktion mit dem Unterordner komplett.



01.
Private Sub button2_Click() 
02.
ActiveSheet.Unprotect 
03.
'Variablen deklarieren 
04.
Dim var1 As String 
05.
Dim var2 As String 
06.
fileSaveName = Application.GetSaveAsFilename( _ 
07.
    fileFilter:="Microsoft Office Excel-Arbeitsmappe (*.xlsm), *.xlsm") 
08.
 
09.
If fileSaveName = False Then 
10.
        'wenn im Dialogfeld auf Abbrechen geklickt wurde... 
11.
    MsgBox "Vorgang wurde abgebrochen !" & vbCr & _ 
12.
            "Datei wurde NICHT gespeichert       ", _ 
13.
            vbOKOnly, "Achtung....." 
14.
Else 
15.
   'Werte aus den Zellen auslesen 
16.
    var1 = "000" 
17.
    var2 = Tabelle1.Cells(7, 30) 
18.
    'Arbeitsmappe unter dem zusammengesetzten Dateinamen speichern 
19.
    ThisWorkbook.SaveAs var1 & "_" & var2 & ".xlsm" 
20.
End If 
21.
ActiveSheet.Protect 
22.
End Sub

Ich hoffe jemand kann mir helfen...



Grüße

Amiga500
Mitglied: vossbaer
02.03.2012 um 10:16 Uhr
Habe nur kurz draufgeschaut. Kann es sein das Du den öffnen Dialog ansprichst bevor Du den Namen ermittlst. Müsste das nicht hinterher geschehen?
Bitte warten ..
Mitglied: Amiga500
02.03.2012 um 12:19 Uhr
Hab es jetzt mal geändert:

Jetzt liest er die variable 1 zwar aus aber er scheint probleme mit der zweiten variable zu haben... die dateien heissen jetzt 000.xlsm

Müssten aber 000+vorgangsnummer in der Zelle G32 heissen, also z.B. 00012.xlsm

Die Zelle mit der Vorgangsnummer ist jetzt G32, weil ich die Tabelle noch etwas angepasst habe...

Jemand eine Idee warum er die Zelle G32 nicht ausliest?
Und wie kann ich ihm sagen, dass er die Dateien in einem Unterordner "Vorgänge" abspeichern soll?

01.
Private Sub button2_Click() 
02.
ActiveSheet.Unprotect 
03.
'Variablen deklarieren 
04.
Dim var1 As String 
05.
Dim var2 As String 
06.
'Werte aus den Zellen auslesen 
07.
    var1 = "000" 
08.
    var2 = Tabelle1.Cells(7, 32) 
09.
    'Arbeitsmappe unter dem zusammengesetzten Dateinamen speichern 
10.
    ThisWorkbook.SaveAs var1 & var2 & ".xlsm" 
11.
 
12.
If fileSaveName = False Then 
13.
        'wenn im Dialogfeld auf Abbrechen geclickt wurde... 
14.
    MsgBox "Vorgang wurde abgebrochen!" & vbCr & _ 
15.
            "Datei wurde nicht gespeichert       ", _ 
16.
            vbOKOnly, "Achtung!" 
17.
 
18.
End If 
19.
ActiveSheet.Protect 
20.
End Sub



Danke euch...


Grüße

Amiga500
Bitte warten ..
Mitglied: TsukiSan
02.03.2012 um 14:46 Uhr
Hallo Amigaa500

probier mal die Zeile 08 durch
01.
var2 = Range("G32").Value
zu ersetzen

Mit deiner Ordnergeschichte könntest du circa so vorgehen
(was zum spielen)
01.
NeuerOrdner = "Vorgaenge" 
02.
 
03.
Set FSO = CreateObject("Scripting.FileSystemObject") 
04.
 
05.
if not FSO.Folderexists (NeuerOrdner) then 
06.
	Set OrdnerPfadNeu = FSO.CreateFolder(NeuerOrdner) 
07.
End If
Gruss
Tsuki
Bitte warten ..
Mitglied: Amiga500
02.03.2012 um 15:40 Uhr
Vielen Dank

Das Abspeichern funktioniert jetzt...
Die Sache mit dem Unterordner schau ich mir Montag mal an.... (hab gleich Feierabend ;))

der speichert die Dateien momentan auch im Standard Dokument Ordner (Bibliotheken\Dokumente) und wechselt beim abspeichern auch gleich auf die gerade gespeicherte Tabelle. Das soll er auch nicht machen. Nach dem Klick des Buttons soll er trotzdem noch in der ursprünglichen Excel Tabelle bleiben.

Der Code sieht übrigens jetzt so aus:

01.
Private Sub button2_Click() 
02.
ActiveSheet.Unprotect 
03.
Dim var1 As String 
04.
Dim var2 As String 
05.
    var1 = "000" 
06.
    var2 = Range("G32").Value 
07.
    ThisWorkbook.SaveAs var1 & var2 & ".xlsm" 
08.
ActiveSheet.Protect 
09.
End Sub

Da muss jetzt nur noch der Code für den Unterordner rein... und die Funktion, dass er beim Abspeichern in der ursprünglichen Tabelle bleibt und nicht auf die neue wechselt (00012.xlsm). Speichern soll er die Datei in der gleichen Ordnerstruktur wo die Ursprungsdatei liegt. Dort soll er ein Unterordner erstellen bzw in diesen wechseln und die Dateien beim Buttonklick speichern.


Euch ein schönes Wochenende und nochmals vielen Dank

Grüße

Amiga500
Bitte warten ..
Mitglied: TsukiSan
02.03.2012 um 15:47 Uhr
Bevor du ins Wochenende gehst vielleicht noch das hier
Nach dem Klick des Buttons soll er trotzdem noch in der ursprünglichen Excel Tabelle bleiben.
das ginge eventuell mit
01.
Windows("MeineUrspruenglicheExcelTabelle").Activate 
02.
' dann das Abspeichern 
03.
ActiveSheet.Unprotect 
04.
Dim var1 As String 
05.
Dim var2 As String 
06.
    var1 = "000" 
07.
    var2 = Range("G32").Value 
08.
    ThisWorkbook.SaveAs var1 & var2 & ".xlsm" 
09.
ActiveSheet.Protect 
Schönes WE

Tsuki
Bitte warten ..
Mitglied: TsukiSan
02.03.2012 um 15:57 Uhr
Also ich hab's nochmal als funktionierendes Beispiel in einem Testcode zusammengefasst
01.
Private Sub CommandButton1_Click() 
02.
Windows("Mappe1").Activate 
03.
Dim var1 As String 
04.
Dim var2 As String 
05.
    var1 = "000" 
06.
    var2 = Range("G32").Value 
07.
    NeuerOrdner = "Vorgaenge" 
08.
    Set FSO = CreateObject("Scripting.FileSystemObject") 
09.
    If Not FSO.Folderexists(NeuerOrdner) Then 
10.
        Set OrdnerPfadNeu = FSO.CreateFolder(NeuerOrdner) 
11.
    End If 
12.
    ThisWorkbook.SaveAs NeuerOrdner & "\" & var1 & var2 & ".xls" 
13.
End Sub
Bei Mappe1 muss nur rein, wie deine Exceldatei heisst (Bsp.: Meine.xls -> dann Meine) etc.

Gruss
Tsuki
Bitte warten ..
Mitglied: Amiga500
05.03.2012 um 08:40 Uhr
Hallo TsukiSan,

ich hoffe du hattest ein schönes WE

vielen Dank nochmal für deine Mühe.

Es funktioniert jetzt alles, außer das er nach dem Abspeichern in der ursprünglichen Excel Datei bleibt. Nachdem ich auf den Speicherbutton klicke, springt er dann sofort auf die neue 0004.xlsm (bzw. je nach vorgangsnummer heisst die datei anders)

Er soll aber im Änderungsantrag.xlsm bleiben, damit man bei Bedarf noch mehr Anträge bearbeiten bzw speichern kann.

Vielleicht weisst du zu diesem Problem ja auch eine Lösung oder evtl. kann jemand anderes helfen?


01.
Private Sub button2_Click() 
02.
Windows("Änderungsantrag.xlsm").Activate 
03.
Dim var1 As String 
04.
Dim var2 As String 
05.
    var1 = "000" 
06.
    var2 = Range("G32").Value 
07.
    NeuerOrdner = "C:\Users\xxx\xxx\xxx\Vorgaenge" 
08.
    Set FSO = CreateObject("Scripting.FileSystemObject") 
09.
    If Not FSO.Folderexists(NeuerOrdner) Then 
10.
        Set OrdnerPfadNeu = FSO.CreateFolder(NeuerOrdner) 
11.
    End If 
12.
    ThisWorkbook.SaveAs NeuerOrdner & "\" & var1 & var2 & ".xlsm" 
13.
End Sub

Danke nochmal


Grüße

Amiga500
Bitte warten ..
Mitglied: TsukiSan
05.03.2012 um 09:40 Uhr
Hallo Amiga500

wenn du zwischen deiner Zeile 12 und 13 noch
Windows("Änderungsantrag.xlsm").Activate
einfügst, muss er wieder in der Änderungsantrag.xlsm stehen.

probier mal.

Viele Grüße

Tsuki
Bitte warten ..
Mitglied: Amiga500
05.03.2012 um 10:11 Uhr
Index ist in Zeile 14 außerhalb des gültiges Bereichs sagt er mir beim Ausführen (Laufzeitfehler '9')

01.
Private Sub button2_Click() 
02.
ActiveSheet.Unprotect 
03.
Dim var1 As String 
04.
Dim var2 As String 
05.
    var1 = "000" 
06.
    var2 = Range("G32").Value 
07.
    Range("H33").Value = var1 & var2 & ".xlsm" 
08.
    NeuerOrdner = "C:\Users\luczakd\_Diverses\ss\Vorgaenge" 
09.
    Set FSO = CreateObject("Scripting.FileSystemObject") 
10.
    If Not FSO.Folderexists(NeuerOrdner) Then 
11.
        Set OrdnerPfadNeu = FSO.CreateFolder(NeuerOrdner) 
12.
    End If 
13.
    ThisWorkbook.SaveAs NeuerOrdner & "\" & var1 & var2 & ".xlsm" 
14.
    Windows("Antrag.xlsm").Activate 
15.
ActiveSheet.Protect 
16.
End Sub
Beim Debuggen meckert er mit der neuen Zeile: Windows("Antrag.xlsm").Activate
Hab das schon umbenannt, weil ich erst dachte das Umlaut (Ä) macht Probleme...
Bitte warten ..
Mitglied: TsukiSan
05.03.2012 um 13:19 Uhr
Index ist in Zeile 14 außerhalb des gültiges Bereichs sagt er mir beim Ausführen (Laufzeitfehler '9')
Logisch!
Weil, du speicherst unter... und damit ist deine Antrag.xlsm nicht mehr "da"
aber mit
01.
ThisWorkbook.Close 
02.
Workbooks.Open Filename:="C:\Users\luczakd\_Diverses\ss\Antrag.xls"
ab Zeile 15 und wenn du die jetzige Zeile 14 löscht wäre es dann ab Zeile14 müßte es ungetestet
funktionieren.

Gruss
Tsuki
Bitte warten ..
Mitglied: Amiga500
05.03.2012 um 13:47 Uhr
Also er speichert richtig und schließt die Datei danach auch...
allerdings öffnet er den antrag nicht wieder neu...
die arbeitsmappe in excel bleibt dann leer nach klick des speicherbuttons...

Kann jetzt ja nur noch eine Kleinigkeit sein... ich sollte mir langsam wirklich ein vba buch zulegen ;)


Grüße

Amiga500


EDIT: hab mal die zeile für das schließen der aktiven tabelle rausgenommen...jetzt gehts
Danke Dir nochmal. Hast mir sehr geholfen
Bitte warten ..
Mitglied: Amiga500
05.03.2012 um 14:40 Uhr
Falls es jemanden interessiert wie ich das Problem gelöst habe... hier nachfolgend der code



01.
Private Sub button2_Click() 
02.
ActiveSheet.Unprotect 
03.
Dim var1 As String 
04.
Dim var2 As String 
05.
Dim x1 As Object 
06.
    var1 = "000" 
07.
    var2 = Range("G32").Value 
08.
    var3 = TextBox17 
09.
    Range("G33").Value = var1 & var2 & "_" & var3 & ".xlsm" 
10.
    NeuerOrdner = "C:\Users\xxx\_Diverses\ss\Vorgaenge" 
11.
    Set FSO = CreateObject("Scripting.FileSystemObject") 
12.
    If Not FSO.Folderexists(NeuerOrdner) Then 
13.
        Set OrdnerPfadNeu = FSO.CreateFolder(NeuerOrdner) 
14.
    End If 
15.
    ThisWorkbook.Save 
16.
    ThisWorkbook.SaveAs NeuerOrdner & "\" & var1 & var2 & "_" & var3 & ".xlsm" 
17.
    Workbooks.Open Filename:="C:\Users\xxx\_Diverses\ss\Änderungsantrag.xlsm" 
18.
ActiveSheet.Protect 
19.
For Each x1 In Workbooks 
20.
  If x1.Name = var1 & var2 & "_" & var3 & ".xlsm" Then 
21.
      Found = True 
22.
    End If 
23.
  Next x1 
24.
  If Found Then 
25.
    Workbooks(var1 & var2 & "_" & var3 & ".xlsm").Activate 
26.
    ActiveWorkbook.Close SaveChanges:=False 
27.
  End If 
28.
End Sub
Bitte warten ..
Mitglied: TsukiSan
06.03.2012 um 02:53 Uhr
Hallo Amiga500

Danke Dir nochmal. Hast mir sehr geholfen
Gerne und keine Ursache!

Dir auch allerbesten Dank dafür, dass du zum Schluss das Ergebnis noch mal als ganzes preisgibst.
Oft sind Beiträge nur gelöst, aber ohne genaues Feedback, bzw. Lösung.

Viele Grüße

Tsuki
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
EXCEL VBA Termindaten aus Tabelle Filtern

Frage von t3jxbus zum Thema Microsoft Office ...

VB for Applications
gelöst Excel VBA .csv Import in Tabelle x, ab Spalte y

Frage von drimrim zum Thema VB for Applications ...

VB for Applications
Excel VBA Sortierung von Daten (5)

Frage von easy4breezy zum Thema VB for Applications ...

VB for Applications
gelöst Excel VBA Eine oder mehrere Zellen Verschieben (2)

Frage von batchnewbie zum Thema VB for Applications ...

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

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...