Top-Themen

Aktuelle Themen (A bis Z)

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, 3164 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
VB for Applications
Zelleninhalt von einer Tabelle in die andere kopieren
gelöst Frage von BlimmoVB for Applications2 Kommentare

Hallo zusammen, bin neu hier und probiere seit einiger Zeit mit Excel-Makros herum. Mein Problem: Ich nutze eine InputBox, ...

Microsoft Office
Excel Makro (VBA) Datenübertragung von Tabelle 1 zu Tabelle 2
Frage von miniminMicrosoft Office5 Kommentare

Hallo alle zusammen, ich bin noch nicht fortgeschritten im Umgang mit VBA und würde gerne wissen, wie man bestimmte ...

Microsoft Office
Excel 2010 Makro Ausgabe in bestimmter Tabelle ausgeben
gelöst Frage von dressaMicrosoft Office6 Kommentare

Hallo miteinander. Ich habe im VBA von Excel 2010 ein eigenes Modul erstellt, in dem der Kode drinsteht, um ...

Microsoft Office
Kopieren von auszuwählenden Daten in weitere Tabelle
Frage von dus100Microsoft Office1 Kommentar

Hallo, wie einige andere auch habe ich ein Problem bei der Erstellung von Makros in VBA. Ich nutzeExcel für ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 7 StundenWindows 101 Kommentar

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 9 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner2 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...