Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
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

In neue Tabelle kopierter Code wird vom Original verwendet

In neue Tabelle kopierter Code wird vom Original verwendet
28.02.2024 08:41:57
EnZu
Hallo liebe Experten,

ich habe eine Sub erstellt, die ein Eingabeformular in eine neue XLSM-Datei speichert.
Außerdem wird über denselben Command-Button dieses Eingabeformular im PDF-Format gespeichert
und es wird eine Schnittstellen-Text-Datei mit einem SQL-String für den Import ins ERP geschrieben.
Da der Befehl "ActiveWorkbook.SaveAs" die Module und Formulare nicht mitzuspeichern scheint, habe ich diese exportiert
und importiere sie in die neue XLSM.
Soweit klappt das.
Problem: Wenn ich die neu erstellte Arbeitsanweisung öffne und den Command-Button anklicke, öffnet Excen das
ursprüngliche Eingabeformular.xlsm und führt den Code aus diesem aus. Dann klappt natürlich die Abfrage auf den
ActiveWorkbook.Name nicht.
Wie kann ich die Makro-Zuweisung des Command-Buttons auf die aktuell geöffnete Excel-Datei festlegen?
Danke schon mal für einen Lösungsvorschlag,
Gruß
Engelbert

Sub SaveAsEXCEL()
On Error GoTo fehlermeldung
Dim wb As Workbook
Dim wbZiel As Workbook
Dim wsZiel As Worksheet

Dim ws As Worksheet
Set ws = ActiveSheet
Dim dateiname As String



' Nachricht: Die bereits existierende Datei überschreiben bzw. alle Meldungen ausschalten
'Application.DisplayAlerts = False

If ActiveWorkbook.Name = "AAEX_Eingabeformular.xlsm" Then
dateiname = "H:\Arbeitsanleitungen\Extruder\EXCEL\" & ws.Range("aa2").Value & ".XLSM"
Worksheets(ws.Name).Copy
ActiveWorkbook.SaveAs dateiname, FileFormat:=xlOpenXMLWorkbookMacroEnabled
ActiveWorkbook.Close

'VB-Modul importieren
Set wbZiel = Workbooks.Open(dateiname)
Set wsZiel = Tabelle1
Debug.Print wsZiel.Name
With wbZiel.VBProject
.VBComponents.Import "H:\Arbeitsanleitungen\Module\Modul1.bas"
End With
wbZiel.Save
wbZiel.Close
End If

If ActiveWorkbook.Name = "AAVS_Eingabeformular.xlsm" Then
dateiname = "H:\Arbeitsanleitungen\Verseilmaschinen\EXCEL\" & ws.Range("aa2").Value & ".XLSM"
Worksheets(ws.Name).Copy
ActiveWorkbook.SaveAs dateiname, FileFormat:=xlOpenXMLWorkbookMacroEnabled
ActiveWorkbook.Close

'VB-Modul importieren
Set wbZiel = Workbooks.Open(dateiname)
Set wsZiel = Tabelle1
Debug.Print wsZiel.Name
With wbZiel.VBProject
.VBComponents.Import "H:\Arbeitsanleitungen\Module\Modul1.bas"
End With
wbZiel.Save
wbZiel.Close
End If

If ActiveWorkbook.Name > "AAEX_Eingabeformular.xlsm" And ActiveWorkbook.Name > "AAVS_Eingabeformular.xlsm" Then
Debug.Print ActiveWorkbook.Name
ActiveWorkbook.Save
ActiveWorkbook.Close
End If

' Nachrichten wieder einschalten
'Application.DisplayAlerts = True

Exit Sub

fehlermeldung:
MsgBox "Im Modul SaveAsEXCEL ist ein Fehler aufgetreten!"
Debug.Print Err.Description
End Sub

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: In neue Tabelle kopierter Code wird vom Original verwendet
28.02.2024 09:29:55
daniel
"Da der Befehl "ActiveWorkbook.SaveAs" die Module und Formulare nicht mitzuspeichern"
falsch.
Wenn du als xlsm oder xlsb speicherst, werden Module und Formular natürlich mitgespeichert, lediglich beim Speichern als xlsx verschwinden diese.

das Problem ist dein: Worksheets(ws.Name).Copy
damit kopierst du dir ja zuerst ein Tabellenblatt in eine neue Datei und dabei werden natürlich die allgemeinen Module und Userform-Module nicht kopiert, nur Makros, die sich im Modul des kopierten Tabellenblatts befinden, werden mitkopiert.
damit müssen sich alle Referenzen auf Makros in allgemeinen Modulen weiterhin auf die alte Datei beziehen

du könntest versuchen, das Projekt so zu gestalten, dass sich der benötigte Code im Modul dieses Tabellenblatts befindet (was Userformen auschließt, sowie Forumularfeld-Commandbuttons zum Makrostart, du müsstest alles mit ActiveX-Controls machen).

ein einfacherer Weg ist vielleicht:
1. Speichere zuerst die komplette Datei mit SaveCopyAs unter dem neuen Namen, damit hast du dann eine eigenständige 1:1-Kopie mit allen Modulen und Formularen.
2. Öffne dann diese Datei und nimm dort die notwendigen Veränderungen vor (nicht benötigte Blätter löschen usw)

Gruß Daniel

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige