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, 3092 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Xml-Datei laden bzw. auf Festplatte kopieren und per VBA in eine Access-Tabelle speichern (22)

Frage von machohunk zum Thema VB for Applications ...

Microsoft Office
Kopieren von auszuwählenden Daten in weitere Tabelle (1)

Frage von dus100 zum Thema Microsoft Office ...

Windows Server
gelöst Administrator kann auf Server keine EXE-Dateien kopieren, löschen, anlegen (5)

Frage von Winfried-HH zum Thema Windows Server ...

Batch & Shell
Daten nach dem auslesen per Powershell moven - kopieren - löschen (1)

Frage von Luckyyluck zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...