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

Code beim kopieren löschen

Code beim kopieren löschen
Bowl
Hallo zusammen,
ich habe eine Arbeitsmappe mit am Haufen an Makros darin.
Nun möchte ich die entsprechende Datei automatisch (jede woche einmal oder so) oder per schaltfläche
automatisch kopieren/in einem anderen verzweichnis speichern und anschließend auf der kopie sämtliche schaltflächen löschen sowie den ganzen Code(ist in DieseArbeitsmappe, auf verschiedenen Tabellenblättern entfernen und auch in Modulen.
Falls ich das ganze automatisch laufen lasse, ist denk ich beim speichern und verlassen der ursprünglichen Datei am besten und anschließend beide Fenster schließen oder?
Code für die Sicherungskopie an sich hab ich:
Private Sub Sicherungskopie_Click()
Dim x As Long
Dim myShape As Shape
Dim ws As Worksheet
Dim i As Integer
ActiveWorkbook.Save
x = ActiveSheet.Cells(2, 17).Value
ChDir _
"C:\Dokumente und Einstellungen\e.burger\Desktop\TESTPLANUNG\Auftragsplanung 2009\ _
Sicherung"
ActiveWorkbook.SaveAs Filename:= _
"C:\Dokumente und Einstellungen\e.burger\Desktop\TESTPLANUNG\Auftragsplanung 2009\ _
Sicherung\Auftragsplanung-" & "KW" & x & ".xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
Application.ScreenUpdating = False
For i = 1 To Sheets.Count
Sheets(i).Activate
Sheets(i).Unprotect
For Each myShape In ActiveSheet.Shapes
myShape.Delete
Next
Next
Application.ScreenUpdating = True
With Application
.DisplayAlerts = False
.Quit
End With
Windows("Auftragsplanung-" & "KW" & x & ".xls").Close
End Sub
So ist nur das Problem noch, wie ich den Code lösche und wann ich des ganze dann durchlaufen lasse?
Falls dies beim öffnen geschieht müsste ja die ursprüngliche datei wieder geöffnet werden, was auch nicht so recht klappt.
was das ganze erschwert ist noch, dass ich workbook_open und before_close anweisungen drin hab
irgendjemand ne idee oder nen kleinen tipp
wäre sehr dankbar
Grüße
Bowl

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Code beim kopieren löschen
15.09.2009 14:48:06
sbello83@hotmail.com
servus,
vielleicht hilft dir das weiter:

Public Function DeleteAllVBAinSheets(wbName As String)
Dim sheetNumber
Dim codeLineNumber
Workbooks(wbName).Activate
For sheetNumber = ActiveWorkbook.VBProject.VBComponents.count To 1 Step -1
For codeLineNumber = 1 To ActiveWorkbook.VBProject.VBComponents(sheetNumber).CodeModule. _
CountOfLines
If ActiveWorkbook.VBProject.VBComponents(sheetNumber).Type  1 _
And ActiveWorkbook.VBProject.VBComponents(sheetNumber).Type  3 Then _
ActiveWorkbook.VBProject.VBComponents(sheetNumber).CodeModule.DeleteLines 1
Next
Next
Workbooks(toolname).Activate
End Function
grüße
Anzeige
AW: Code beim kopieren löschen
15.09.2009 15:09:32
Bowl
Klappt leider nicht wirklich...
Probleme bestehn irgndwie immer noch...
:/
Ergänzung
15.09.2009 15:14:17
Bowl
Irgendwie wird nich wirklich was gelöscht...
Ich glaub dass die beforeclose codes etc sich mit dem irgendwie im weg umgehen
trotzdem vielen dank
AW: Code beim kopieren löschen
15.09.2009 15:27:52
Gunter
Hallo,
so entferne ich bei mir den VBA-Code
With ActiveWorkbook.VBProject
For Each objVBC In .VBComponents
Select Case objVBC.Type
Case 1, 2, 3
.VBComponents.Remove .VBComponents(objVBC.Name)
Case 100
With objVBC.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next
End With
Gruss
Gunter
Anzeige
AW: Code beim kopieren löschen
15.09.2009 15:31:34
Bowl

Sub VBA_Code_entfernen()
Dim Ding As Object
Dim Zeile As Long
Dim Antwort As Integer
Dim x As Long
Dim myShape As Shape
Dim ws As Worksheet
Dim i As Integer
ActiveWorkbook.Save
x = ActiveSheet.Cells(2, 17).Value
ChDir _
"C:\Dokumente und Einstellungen\xxx\Desktop\"
ActiveWorkbook.SaveAs Filename:= _
"C:\Dokumente und Einstellungen\xxx\Desktop\Auftragsplanung-" & "KW" & x & ".xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
Application.ScreenUpdating = False
For i = 1 To Sheets.Count
Sheets(i).Activate
Sheets(i).Unprotect
For Each myShape In ActiveSheet.Shapes
myShape.Delete
Next
Next
For Each Ding In ActiveWorkbook.VBProject.vbcomponents
If Ding.Type = 100 Then
With ActiveWorkbook.VBProject.vbcomponents(Ding.Name).CodeModule
For Zeile = 1 To .CountOfLines
.DeleteLines 1
Next Zeile
End With
Else
ActiveWorkbook.VBProject.vbcomponents.Remove Ding
End If
Next
ActiveWorkbook.Save
Windows("Auftragsplanung-" & "KW" & x & ".xls").Close
ChDir _
"C:\Dokumente und Einstellungen\xxx\Desktop\"
Workbooks.Open Filename:= _
"C:\Dokumente und Einstellungen\xxx\Desktop\Auftragsplanung.xls"
End Sub
Des ganze hab ich jetzt gefunden teils zusammengefieselt:
Des ganze klappt auch ganz gut bis auf 2 Fehler und 1 Problem:
Komischerweise wird alles gelöscht bis auf der Inhalt von Modul3
Des öffnen von der ursprünglichen Datei klappt auch nicht mehr
und die frage:
gibt es eine Möglichkeit alle Formeln in der sicherungskopie durch ihre aktuellen werte bei der speicherung zu ersetzen?
Vielen dank im vorraus
grüße
Anzeige
AW: Code beim kopieren löschen
15.09.2009 16:49:58
fcs
Hallo Bowl,
das Ganze wird einfacher, wenn du nach dem Speichern der aktiven Datei eine Kopie der Datei unter dem gewünschten Namen speicherst und dann Kopie öffnest und per Code bearbeitest.
Ich hab deinen Code mal entsprechend umgestellt.
Gruß
Franz
Sub VBA_Code_entfernen()
'Im VBA Editor unter Extras --> Verweise den Verweis aktivieren auf _
"Microsoft Visual basic for Applications Extensibility x.y
'in Excel unter Optionen --> Sicherheit --> Makrosicherheit _
vorübergehend "Zugriff auf VBA-Projekt vertrauen" aktivieren
Dim Ding As Object
Dim Zeile As Long
Dim Antwort As Integer
Dim x As Long
Dim myShape As Shape
Dim ws As Worksheet
Dim i As Integer
Dim NameKopie As String, wbKopie As Workbook
If UCase(ActiveWorkbook.Name) = "PERSONL.XLS" Then Exit Sub
If ActiveWorkbook.Saved = False Then ActiveWorkbook.Save
'KW auslesen
x = ActiveSheet.Cells(2, 17).Value
NameKopie = "C:\Dokumente und Einstellungen\xxx\Desktop\Auftragsplanung-" _
& "KW" & x & ".xls"
'    NameKopie = "C:\Lokale Daten\Test\Auftragsplanung-" & "KW" & x & ".xls"
'Kopie der Datei speichern
ActiveWorkbook.SaveCopyAs Filename:=NameKopie
Application.ScreenUpdating = False
'Kopie  öffnen
Set wbKopie = Workbooks.Open(Filename:=NameKopie)
'Shapes in Kopie löschen und Formeln in Werte
For i = 1 To wbKopie.Worksheets.Count
Set ws = wbKopie.Worksheets(i)
ws.Unprotect
For Each myShape In ws.Shapes
myShape.Delete
Next
ws.UsedRange.Copy
ws.UsedRange.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Next
'VBA-Code in Kopie löschen
For Each Ding In wbKopie.VBProject.vbcomponents
If Ding.Type = 100 Then
With wbKopie.VBProject.vbcomponents(Ding.Name).CodeModule
.DeleteLines 1, .countoflines
End With
Else
wbKopie.VBProject.vbcomponents.Remove Ding
End If
Next
Application.DisplayAlerts = False
wbKopie.Save
Application.DisplayAlerts = True
wbKopie.Close
Application.ScreenUpdating = True
MsgBox "Kopie ohne Formeln und Module gespeichert"
End Sub

Anzeige
Fehlermeldung
16.09.2009 08:06:23
Bowl
Guten Morgen zusammen,
jetzt kommt hier die Fehlermeldung:
"Microsoft Office Excel hat ein Problem festgestellt und muss beendet werden.
Informationen an denen sie gearbeitet haben sind möglicherweise verloren gegangen.
Microsoft Excel kann versuchen sie wiederherzustellen"
und dann Möglichkeit haken zu setzen bei Dok wiedereherstellen und Excel neustarten
und Fehlerberichterstattung senden / Nicht berichten
Kopie wurde erstellt, sämtlicher Code bis auf Modul3 wurde gelöscht, auf sämtlichen Tabellenblätter in der Kopie ist ein Teil des Blattes markiert (meistens wohl der druckbereich, jemand ne Idee woran des liegen könnte?
Viele Dank im Vorraus
Grüße
Anzeige
Löse Prob. ganz anders, ...
16.09.2009 08:45:57
Bowl
Falls jemand Zeit und Lust hat fänd ichs ganz interessant worans liegen könnte, muss aber nicht mehr wirklich sein...
Vielen Dank für eure Mühen
Grüße
Bowl
AW: Fehlermeldung
16.09.2009 09:29:28
fcs
Hallo Bowl,
warum der Code an deinem Modul3 scheitert? Keine Ahnung. Ich hab jetzt mal zusätzlich die Ereignismakros deaktiviert.
Die Markierungen sind der Bereich mit Daten auf den Blättern und die Überreste vom Umwandeln der Formeln in Werte per Copy--Paste Values.
Das kannst du ändern, indem an entsprechender Position die von mir wenig geliebten -da meist unnötigen- Activate und Select-Anweisungen eingefügt werden.
Nachfolgend die entsprechend angepasste Prozedur.
Gruß
Franz
Sub VBA_Code_entfernen()
'Im VBA Editor unter Extras --> Verweise den Verweis aktivieren auf _
"Microsoft Visual basic for Applications Extensibility x.y
'in Excel unter Optionen --> Sicherheit --> Makrosicherheit _
vorübergehend "Zugriff auf VBA-Projekt vertrauen" aktivieren
Dim Ding As Object
Dim Zeile As Long
Dim Antwort As Integer
Dim x As Long
Dim myShape As Shape
Dim ws As Worksheet, shAktiv As Object
Dim i As Integer
Dim NameKopie As String, wbKopie As Workbook
If UCase(ActiveWorkbook.Name) = "PERSONL.XLS" Then Exit Sub
If ActiveWorkbook.Saved = False Then ActiveWorkbook.Save
'KW auslesen
x = ActiveSheet.Cells(2, 17).Value
NameKopie = "C:\Dokumente und Einstellungen\xxx\Desktop\Auftragsplanung-" _
& "KW" & x & ".xls"
NameKopie = "C:\Lokale Daten\Test\Auftragsplanung-" & "KW" & x & ".xls"
'Kopie der Datei speichern
ActiveWorkbook.SaveCopyAs Filename:=NameKopie
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
'Kopie  öffnen
Set wbKopie = Workbooks.Open(Filename:=NameKopie)
'Aktives Blatt merken
Set shAktiv = ActiveSheet
'Shapes in Kopie löschen und Formeln in Werte
For i = 1 To wbKopie.Worksheets.Count
Set ws = wbKopie.Worksheets(i)
ws.Activate
ws.Unprotect
For Each myShape In ws.Shapes
myShape.Delete
Next
ws.UsedRange.Copy
ws.UsedRange.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Range("A1").Select
Next
shAktiv.Activate
'VBA-Code in Kopie löschen
For Each Ding In wbKopie.VBProject.vbcomponents
If Ding.Type = 100 Then
With wbKopie.VBProject.vbcomponents(Ding.Name).CodeModule
.DeleteLines 1, .countoflines
End With
Else
wbKopie.VBProject.vbcomponents.Remove Ding
End If
Next
'geänderte Kopie speichern und schließen
Application.DisplayAlerts = False
wbKopie.Save
Application.DisplayAlerts = True
wbKopie.Close
'Anwendungseinstellungen zurücksetzen
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Kopie ohne Formeln und Module gespeichert"
End Sub

Anzeige
Danke für die Lösung!!!
17.09.2009 09:22:43
Bowl
Kanns noch nicht ausprobieren, weil ich doch wieder alles ganz anders lösen (sollte)... xD
schaus mir interessehalber nachher mal an
Grüße
Bowl

286 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige