Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.04.2024 18:33:31
28.04.2024 18:25:12
28.04.2024 14:18:05
Anzeige
Archiv - Navigation
1772to1776
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

VBA Code wird nicht gespeichert

VBA Code wird nicht gespeichert
06.08.2020 07:19:17
Sven
Moin Moin,
bräuchte mal kurz eure Hilfe, ich erstelle per VBA ein neues Workbook und speicher das als .xlsm. Dann mache ich einiges in der Mappe und erstelle einen Befehlsbutton samt VBA Code der in die neue Mappe geschrieben wird, den Code dafür habe ich auch hier aus dem Forum.
Nun zu meinem Problem, mache ich das alles und lasse das Workbook anschließend geöffnet ist alles gut, dann speicher ich manuell und alles ist wie es sein soll.
Speicher ich ich aber am ende meines Codes mit .save und nutze anschließend .close um die erstellte Arbeitsmappe zu schließen speichert er den Code der zu dem Befehlsbutton eingefügt wurde nicht. Wenn ich dann die Datei öffne ist der Befehlsbutton da, aber ohne Code.
Woran kann das leigen?
hiermit erstelle ich die Mappe:
    Set wb = Workbooks.Add
wb.Activate
Tabelle_save = UserForm2.ComboBox1.Value & "_" & UserForm2.Part_Nummer.Value & "_" &  _
UserForm2.Part_Name.Value & "_" & UserForm2.Werkzeugnummer_Housing.Value & "+" & UserForm2. _
Werkzeugnummer_Lever.Value & "_" & UserForm2.MB_Nummer_System.Value & "_" & Year(UserForm2.Date_of_measurement.Value) & "-" & Monat & "-" & Tag
Tabelle_save = InputBox("Dateiname:", "Datei speichern", Tabelle_save) 'Abfrage Dateinamen
Tabelle_save = Tabelle_save & ".xlsm"  'Tabelle_save = "Name Deiner Wahl.xlsx"
ActiveWorkbook.SaveAs Filename:=Tabelle_save, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

dann kommt wie gesagt alles mögliche, sollte aber hierfür uninteressant sein,
hier der Code für Button und Code, natürlich erstmal nur Test (hier aus dem Forum)

Dim strCode As String
Dim myButton As OLEObject
Dim Zelle2 As Range
Set Zelle2 = Range("H6:H7")
With Zelle2
Set myButton = ActiveSheet.OLEObjects.Add(ClassType:="Forms. _
CommandButton.1", _
Link:=False, DisplayAsIcon:=False, Left:=.Left, Top:=.Top, Width:=. _
Width, Height:=.Height)
End With
strCode = _
"Private Sub " & myButton.Name & "_Click()" & Chr(10) & _
" MsgBox ""test erfolgreich bestanden""" & Chr(10) & _
"End Sub"
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName). _
CodeModule
.InsertLines .CountOfLines + 1, strCode
End With

wie gesagt funktioniert alles einwandfrei, genau wie es soll solange ich die Datei geöffnet lasse, da aber mehr Dateien erzeugt werden wäre das eine nicht zielführende möglichkeit.
Gibt es eventuell noch einen Befehl der den Code nochmal extra abspeichert, abgesehen von der normalen .Save funktion?
Gruß
Sven

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code wird nicht gespeichert
06.08.2020 09:42:26
Sandra
Servus Sven,
ich bin absolut kein VBA Experte, was mir aber aufgefallen ist, dass du hier:
Tabelle_save = Tabelle_save & ".xlsm" 'Tabelle_save = "Name Deiner Wahl.xlsx
am Ende mit "xlsx" anstelle von "xlsm" speicherst.
Falss ich hier was völlig falsches erzähle, dann grätscht bitte entsprechend rein :)
LG
Sandra
AW: VBA Code wird nicht gespeichert
06.08.2020 09:55:38
Sven
Hallo Sandra,
danke erstmal das du dir Gedanken machst, aber wenn du genauer guckst ist der Teil auskommentiert mit .xlsx.
So war es im Original wo ich mir das Beispiel rausgesucht habe. Habe es dann auf .xlsm geändert da ich ja makros speichern möchte.
Gruß Sven
Anzeige
AW: VBA Code wird nicht gespeichert
06.08.2020 10:03:35
MRUTOR
Hallo Sven,
versuch mal beim Schliessen der Datei an das .Close folgendes anzuhaengen:
savechanges:=True
Grus Tor
AW: VBA Code wird nicht gespeichert
06.08.2020 10:11:44
Sven
Hallo Tor,
danke auch dir erstmal.
funktioniert leider auch nicht.
Das muss etwas mit der .save Funktion vor der .close funktion zu tun haben.
Denn selbst wenn ich .close raus nehme und die Datei manuell schließe fragt er mich ob Änderungen speichern. Drücke ich dann auf ja bleibt der Code erhalten, klicke ich auf nein ist der Code beim wieder öffnen verschwunden.
Aber ich dachte das genau das .save macht. Somit bin ich etwas verwundert.
Also scheint alles zu funktionieren nur das speichern nicht, weswegen es beim automatischen schließen auch weg ist.
Was zusätzlich verwunderlich ist, ist das der Button ja erhalten bleibt, somit muss das speichern ja doch zum teil funktionieren, er speichert scheinbar nur den Excel Bereich, nicht den Bereich aus dem VBA Editor.
Gruß Sven
Anzeige
AW: VBA Code wird nicht gespeichert
06.08.2020 10:12:05
Sven
nicht gelöst
AW: VBA Code wird nicht gespeichert
06.08.2020 10:24:44
MRUTOR
Vielleicht solltest du doch mal den gesamten Code zeigen.
AW: VBA Code wird nicht gespeichert
06.08.2020 10:42:57
Sven
Hallo Tor,
das kann ich leider nicht komplett wegen der Arbeit.
Aber ich habe da jetzt einiges rausgelöscht und den Grob vereinfacht. Und es funktioniert auch hier nicht. Den Code kann ich komplett hier reinstellen.
Nicht wundern ich bin kein VBA Profi ;-)

Sub Arbeitsblätter_erstellen()
Dim i, h, l, d As Integer    'zählvariable For/Next i=Arbeitsbläter h=housing zähler; l=lever zä _
hler; d=Datenfeld zähler
Dim wksNeu As Worksheet 'Variable für die zu erstellenden Tabellenblätter
Dim wb As Workbook
Dim currentWorkbook As String
Dim currentWorkbookDir As String
Dim Tabelle_save As String
Dim Zelle As Range
Dim Tag, Monat As String
Dim shp As Shape
'Schalten die Bildschirmaktualisierung aus
Application.ScreenUpdating = False
'Sprungmarke zum ErrorHandler
On Error GoTo Fehler
' 1. aktuelles Workbook - merken für spätere aktionen
currentWorkbook = ActiveWorkbook.Name
currentWorkbookDir = ActiveWorkbook.Path
ChDir currentWorkbookDir
' 2. Name festlegen und Speichern
'Monat und Tag bei einstellig eine 0 vorweg setzen
Monat = Month(Date)
Tag = Day(Date)
If Len(Tag) > 1 Then
Tag = Tag
Else
Tag = "0" & Tag
End If
If Len(Monat) > 1 Then
Monat = Monat
Else
Monat = "0" & Monat
End If
'Neue Arbeitsmappe erstellen und Speichern
Set wb = Workbooks.Add
wb.Activate
Tabelle_save = "Test2"
Tabelle_save = InputBox("Dateiname:", "Datei speichern", Tabelle_save) 'Abfrage Dateinamen
Tabelle_save = Tabelle_save & ".xlsm"  'Tabelle_save = "Name Deiner Wahl.xlsm"
ActiveWorkbook.SaveAs Filename:=Tabelle_save, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
With ActiveWorkbook
'Tabellenblätter erstellen
Set wksNeu = Sheets.Add(After:=Sheets(Sheets.Count))
wksNeu.Name = "Test"
With wksNeu
'                    'Command Button einfügen
Dim strCode As String
Dim myButton As OLEObject
Dim Zelle2 As Range
Set Zelle2 = Range("H6:H7")
With Zelle2
Set myButton = ActiveSheet.OLEObjects.Add(ClassType:="Forms. _
CommandButton.1", _
Link:=False, DisplayAsIcon:=False, Left:=.Left, Top:=.Top, Width:=. _
Width, Height:=.Height)
End With
strCode = _
"Private Sub " & myButton.Name & "_Click()" & Chr(10) & _
" MsgBox ""test erfolgreich bestanden""" & Chr(10) & _
"End Sub"
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName). _
CodeModule
.InsertLines .CountOfLines + 1, strCode
End With
'Arbeitsblatt schützen ausser Bemerkungen und Werte eintragen
Dim rng As Range
Dim rng2 As Range
Set rng = .Range(Cells(16, 3), Cells(16 + m - 1, 3))
Set rng2 = .Range(Cells(11, 5), Cells(14, 8))
.Unprotect
rng.Locked = False
rng2.Locked = False
.Protect
End With
Sheets("Tabelle1").Delete
.Save
.Close savechanges:=True
End With
'    Next i
Workbooks(currentWorkbook).Sheets("Tabelle1").Activate
MsgBox "Datei wurde erstellt"
'Schaltet die Bildschirmaktualisierung wieder ein
Application.ScreenUpdating = True
Exit Sub
'ErrorHandler
Fehler:
Application.ScreenUpdating = True
MsgBox Err.Description
End Sub

Aber wenn es hier dann irgendwie klappt wird es beim komplett Code auch klappen denke ich.
Danke für die Hilfe.
Gruß
Sven
Anzeige
AW: VBA Code wird nicht gespeichert
06.08.2020 10:59:52
MRUTOR
Hallo Sven,
versuch mal die With Anweisung mit dem jeweiligen Workbook Namen anstatt ActiveWorkbook. Vielleicht ist ja das Workbook garnicht mehr das aktive. Also so:

With Workbooks(Tabelle_save)
'Tabellenblätter erstellen
Set wksNeu = Sheets.Add(After:=Sheets(Sheets.Count))
wksNeu.Name = "Test"
With wksNeu
'                    'Command Button einfügen
Dim strCode As String
Dim myButton As OLEObject
Dim Zelle2 As Range
Set Zelle2 = Range("H6:H7")
With Zelle2
Set myButton = ActiveSheet.OLEObjects.Add(ClassType:="Forms. _
CommandButton.1", _
Link:=False, DisplayAsIcon:=False, Left:=.Left, Top:=.Top, Width:=. _
Width, Height:=.Height)
End With
strCode = _
"Private Sub " & myButton.Name & "_Click()" & Chr(10) & _
" MsgBox ""test erfolgreich bestanden""" & Chr(10) & _
"End Sub"
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName). _
CodeModule
.InsertLines .CountOfLines + 1, strCode
End With
'Arbeitsblatt schützen ausser Bemerkungen und Werte eintragen
Dim rng As Range
Dim rng2 As Range
Set rng = .Range(Cells(16, 3), Cells(16 + m - 1, 3))
Set rng2 = .Range(Cells(11, 5), Cells(14, 8))
.Unprotect
rng.Locked = False
rng2.Locked = False
.Protect
End With
Sheets("Tabelle1").Delete
.Close savechanges:=True
End With

Und lass das .Save weg, denn das wird ja mit der Anweisung savechanges:=True erledigt.
Gruss Tor
Anzeige
AW: VBA Code wird nicht gespeichert
06.08.2020 11:14:10
Sven
Hallo Tor,
danke, werde ich gleich mal versuchen. Aber nur von der Logik her, wenn das Workbook nciht mehr das aktive wäre, dann dürfte es ja auch nicht schließen, denn der Befehl bezieht sich ja auf das selbe With. Oder sehe ich das verkehrt? Denn das schließen funktioniert ja.
Aber ich probiere das eben aus und gebe gleich Rückmeldung.
Gruß
Sven
AW: VBA Code wird nicht gespeichert
06.08.2020 11:18:24
Sven
Hallo Tor,
habe es ausprobiert, hat sich nichts geändert.
Genau wie vorher.
Trotzdem danke erstmal das du dir Gedanken machst.
Gruß
Sven
AW: VBA Code wird nicht gespeichert
06.08.2020 11:27:16
Rudi
Hallo,
lass mal
Tabelle_save = Tabelle_save & ".xlsm"  'Tabelle_save = "Name Deiner Wahl.xlsm"

weg. Die Endung wird durch den FileFormat-Parameter automatisch erzeugt.
Gruß
Rudi
Anzeige
AW: VBA Code wird nicht gespeichert
06.08.2020 11:33:44
Sven
Hallo Rudi,
Danke erstmal, habe ich ausgebaut. Makro läuft genauso hattest du recht, das Problem hat es aber Leider noch nicht gelöst.
Gruß
Sven
Workaround
06.08.2020 14:27:55
Rudi
Hallo,
erst das neue Blatt mit Button und Code erstellen und dann in eine neue Mappe verschieben. Dann klappt das.
Sub Sven()
Dim wksNeu As Worksheet 'Variable für die zu erstellenden Tabellenblätter
Dim strFileName As String
Dim strCode As String
Dim myButton As OLEObject
'Schalten die Bildschirmaktualisierung aus
Application.ScreenUpdating = False
'Neue Arbeitsmappe erstellen und Speichern
strFileName = "Test2"
strFileName = InputBox("Dateiname:", "Datei speichern", strFileName) 'Abfrage Dateinamen
'Tabellenblatt erstellen
Set wksNeu = Sheets.Add(After:=Sheets(Sheets.Count))
wksNeu.Name = "Test"
'                    'Command Button einfügen
With wksNeu.Range("H6:H7")
Set myButton = .Parent.OLEObjects.Add _
(ClassType:="Forms.CommandButton.1", _
Link:=False, DisplayAsIcon:=False, _
Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
End With
strCode = "Private Sub " & myButton.Name & "_Click()" & Chr(10) & _
" MsgBox ""test erfolgreich bestanden""" & Chr(10) & _
"End Sub"
With ThisWorkbook.VBProject.VBComponents(wksNeu.CodeName).CodeModule
.InsertLines .CountOfLines + 1, strCode
End With
wksNeu.Move 'Blatt in neues Workbook verschieben
With ActiveWorkbook
.SaveAs strFileName, 52
.Close
End With
MsgBox "Datei wurde erstellt"
End Sub

Gruß
Rudi
Anzeige
AW: Workaround
07.08.2020 12:22:02
Sven
Hallo Rudi,
danke erstmal. Funktioniert soweit mit einem Blatt.
Ich erzeuge aber über eine For Next schleife mehrere Blätter, die genau gleich aufgebaut sind nur anders heißen.
Wie würde ich das da machen müssen?
Ich habe jetzt mal nachdem meine For Next schleife alle Blätter erzeugt hat es so versucht.
    For Each blatt In ThisWorkbook
If (blatt.Name  "Tabelle1") Then
blatt.Move
End If
Next
With ActiveWorkbook
.Sheets("Tabelle1").Delete
.SaveAs Tabelle_save, 52
.Close
End With
Das Funktioniert aber noch nicht.
Gruß
Sven
Anzeige
unverständlich owT
07.08.2020 12:48:36
Rudi
AW: Workaround
07.08.2020 12:49:08
Sven
Hi Rudi,
hab das Problem mit der Schleife selber gelöst.
Vielen Dank nochmal, jetzt funktioniert es!!!
    Dim wbNeu As Workbook
Dim blatt As Worksheet
Workbooks(currentWorkbook).Sheets(erstesBlatt).Move
Set wbNeu = ActiveWorkbook
For Each blatt In Workbooks(currentWorkbook).Sheets
If (blatt.Name  "Tabelle1") And (blatt.Name  erstesBlatt) Then
blatt.Move After:=wbNeu.Sheets(wbNeu.Sheets.Count)
End If
Next
With wbNeu
.SaveAs Tabelle_save, 52
.Close
End With
hiermit werden alle Blätter so verschoben das es passt.
Vielen Danke nochmal.
Gibts dafür ne Logische erklärung das es so gespeichert wird und anders nicht? Muss ja irgend einen Grund haben.
schönes Wochenende.
Gruß
Sven
Anzeige

37 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige