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

Nach kopieren einer Tabelle, Makro löschen

Frage Entwicklung VB for Applications

Mitglied: Asterix2

Asterix2 (Level 1) - Jetzt verbinden

24.12.2012 um 08:20 Uhr, 3111 Aufrufe, 4 Kommentare

Erst einmal wüsche ich allen Mitgliedern hier im Forum eine Frohe Weihnacht. Ich hoffe ich mache alles richtig, denn dies ist mein erster Eintrag in diesem Forum.
Ich nutze einen Code welchen ich nicht selber erstellt habe, welchen ich aber gerne auf meine
Bedürfnisse anpassen würde.

Um folgenden Code dreht sich meine Frage:


Private Sub CommandButton1_Click()
Dim strDateiName As String
Dim strVerzeichnisPfad As String
Dim strSaveDatei As String
Dim bSpeichernDialog As Boolean
Dim bSpeichern As Boolean
bSpeichern = False
Application.DisplayAlerts = False
'Wert True = es wird defintiv gespeichert. False = nichts Speichern
'------------------------------------------------------------------------
'Festlegen ob der Speichern unter Dialog (GetSaveAsFileName) überhaupt aufgerufen werden soll
'Wert auf Flase setzen wenn dies nicht gewünscht wird. Kann auch durch eine Zellabfrage (0 oder 1) erfolgen
'dann bSpeichernDialog = Range("X1") wobei eine 0 Falsch und alles andere Wahr bedeutet. Ansonsten hier Manuell festlegen
bSpeichernDialog = Range("BZ1")
'bSpeichernDialog = False
'------------------------------------------------------------------------
'Verzeichnispfad Vorschlag festlegen
strVerzeichnisPfad = "E:\"
'Dateiname aus Zelle F4 des aktuellen Blatts holen und Datum (Sortierbar) und Dateierweiterung dranhängen. Die yyymmdd ist bei sortierung richtig
strDateiName = Range("AC4") & ("_") & Range("T9") & Format(Date, "_yyyy_mm_dd") & ".xlsm"
'Speicherpfad und Dateiname zusammenfügen
strSaveDatei = strVerzeichnisPfad & strDateiName
'------------------------------------------------------------------------
'Mit dem jetzt vorhandenen Dateiname inkl. Pfad abfragen ob der Speicherort OK ist.
'Dazu das Dialogfenster GetSaveAsFilename aufrufen (Achtung, mus Zwingend Bestätigt werden
'Dies aber nur falls der Dialog abgefragt werden soll. bSpeicherDialog regelt dies über Wahr / Unwahr
If bSpeichernDialog Then
'Dialog zum bestätigen des Speicherorts und Datename aufrufen. Achtung, kann auch mit Abbrechen beendet werden
'Zuweisen des endgültigen Dateinamens oder ein Falsch wenn abbruch
strSaveDatei = SpeichernUnter(strSaveDatei)
'Wurde abgebrochen?
If strSaveDatei = "Falsch" Then
'Es wurde im Speicherdialog auf Abbrechen geklickt. Nichts zu tun und Tschüß
bSpeichern = False
'Exit Sub
'Mit Exit Sub kann hier die gesamte restliche SUB beendet werden. Unschön, aber manchmal nötig
Else
'Im Dialog wurde auf Speichern geklickt
bSpeichern = True
End If
Else
'Der Dialog sollte nicht aufgerufen werden, also wird der DateiPfad und Name als gegeben und nicht änderbar angenommen.
bSpeichern = True
End If
'------------------------------------------------------------------------
'Bestimmen ob dies eine Neue datei oder eine schon vorhandene ist.
'Falls neu, das .SaveAs verwenden. Wen die Datei schon vorhanden ist, wird zwingend ein Dialog wegen überschreibung eingeblendet
'daher falls die Datei schon vorhanden ist, das .Save verwenden was einen Überschreiben Dialog nicht aufruft
Do While bSpeichern
If DateiVorhanden(strSaveDatei) Then
'Datei wird überschrieben OHNE Dialog
ActiveWorkbook.Save
Else
'Datei wird erstmalig erstellt Ohne Dialog
ActiveWorkbook.SaveAs strSaveDatei
End If
bSpeichern = False
Loop

Ich möchte erreichen das die neu erzeugte Mappe keine Makros mehr enthält. Der einfache Weg, unter .xlsx zu speichern
funktioniert nicht. Stelle ich den Code auf .xlsx um folgen Fehlermeldungen.
Gibt es die Möglichkeit, das nach dem erzeugen der neuen Datei, die Makros aus dieser gelöscht werden?
Es wäre ein tolles Weihnachtsgeschenk wenn ihr mir helfen könnt.
Dank schon einmal für eure Mühe.
Gruß Asterix2
Mitglied: 76109
24.12.2012 um 10:07 Uhr
Hallo Asterix2!

Theoretisch kann man Makros über VBE-Project löschen, allerdings bekomme ich seit Win7 und keinen Zugriff mehr auf VBE-Project und keine Ahnung warum?

Aber ich würde es eh anders machen und zwar in etwa so:

Im Sheet einen Symbolleiste-Formular-Button
Den Sheet-Code in ein Modul (Public Sub) setzen und den Formular Button damit Verknüpfen
Nicht das Workbook speichern, sondern das/die Sheets per Sheets.Copy in eine neue Arbeitsmappe einfügen
Alle Shapes (Buttons) im Active Workbook in Sheet XY (ActiveSheet?) löschen, speichern und schließen
Das Makro-Workbook nicht speichern (.Close False). Wobei, wenn Du die Makro-Datei bearbeiten willst, könntest Du am einfachsten beim Öffnen der Makro-Vorlage eine MsgBox-Abfrage nach dem Motto '... im Edit-Modus öffnen?' Ja/Nein machen und Deinen Save-Parameter damit auf True/False setzen...

Gruß Dieter
Bitte warten ..
Mitglied: Asterix2
24.12.2012 um 11:06 Uhr
Hallo didi1954!

Danke für deine Hilfe. Da ich aber absoluter Laie bin, was das Thema VBA betrifft, fühle ich mich etwas überfordert.
Ich hab zwar schon mal alles gehört, aber das Erstellen des Codes werde ich nicht schaffen. Im IE kann man folgende Codes finden:
Rem Diese Prozedur zum Löschen aufrufen
Sub Alles_löschen()
Call Lösche_Module
Call Lösche_Userformen
Call Lösche_Ereignisprozeduren
End Sub

Sub Lösche_Module()
Rem Löscht Module:
For n = ActiveWorkbook.VBProject.vbComponents.Count To 1 Step -1
If ActiveWorkbook.VBProject.vbComponents(n).Type = 1 Then
ActiveWorkbook.VBProject.vbComponents(n).Collection.Remove _
ActiveWorkbook.VBProject.vbComponents(n)
End If
Next
End Sub

Sub Lösche_Userformen()
Rem Löscht Userforms:
For n = ActiveWorkbook.VBProject.vbComponents.Count To 1 Step -1
If ActiveWorkbook.VBProject.vbComponents(n).Type = 3 Then
ActiveWorkbook.VBProject.vbComponents(n).Collection.Remove _
ActiveWorkbook.VBProject.vbComponents(n)
End If
Next
End Sub

Sub Lösche_Ereignisprozeduren()
Rem Löscht Ereignisprozeduren:
For n = ActiveWorkbook.VBProject.vbComponents.Count To 1 Step -1
For i = 1 To ActiveWorkbook.VBProject.vbComponents(n).CodeModule.CountOfLines
If ActiveWorkbook.VBProject.vbComponents(n).Type <> 1 And _
ActiveWorkbook.VBProject.vbComponents(n).Type <> 3 Then _
ActiveWorkbook.VBProject.vbComponents(n).CodeModule.DeleteLines 1
Next
Next
End Sub
Kann ich die beiden Codes nicht miteinander verknüpfen?
Gruß Asterix2
Bitte warten ..
Mitglied: 76109
24.12.2012 um 11:18 Uhr
Hallo Asterix2!

Na, dann versuch's doch, indem Du den Code in ein Modul kopierst und wenn alles gelöscht werden soll, an entsprechender Stelle die Sub 'Alles_Löschen' aufrufst...

In etwa so (erst mit einer Kopie testen):
01.
Do While bSpeichern 
02.
 If DateiVorhanden(strSaveDatei) Then 
03.
 'Datei wird überschrieben OHNE Dialog 
04.
Call Alles_Löschen  
05.
ActiveWorkbook.Save 
06.
 Else 
07.
 'Datei wird erstmalig erstellt Ohne Dialog 
08.
Call Alles_Löschen   
09.
ActiveWorkbook.SaveAs strSaveDatei 
10.
 End If 
11.
 bSpeichern = False 
12.
 Loop

Gruß Dieter
Bitte warten ..
Mitglied: Asterix2
24.12.2012 um 11:45 Uhr
Okay, wenn ich den Code löschen möchte, bevor die neue Mappe geschlossen wird, wie rufe ich dann das Modul auf?
Werden Module überhaupt mit in die neue Mappe kopiert? Bevore_Workbook Close()???
Bitte warten ..
Ähnliche Inhalte
Neue Wissensbeiträge
Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(2)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(5)

Anleitung von BassFishFox zum Thema Windows 10 ...

Administrator.de Feedback

Tipp: Ungelöste Fragen ohne Antwort in Tickeransicht farblich hinterlegen

Tipp von pattern zum Thema Administrator.de Feedback ...

Viren und Trojaner

Neue Magazin Ausgabe: Malware und Angriffe abwehren

Information von Frank zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Windows Systemdateien
Warum System auf "C:" (29)

Frage von DzumoPRO zum Thema Windows Systemdateien ...

LAN, WAN, Wireless
Cisco SG200: Auf bestimmtem vLAN bestimmte TCP-Ports sperren (16)

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

Windows Server
gelöst Update BackupExec 2015 auf 2016 führt zu SQL-Server Problem (16)

Frage von montylein1981 zum Thema Windows Server ...

Cloud-Dienste
gelöst Bitcoins minen über Nacht? (16)

Frage von 1410640014 zum Thema Cloud-Dienste ...