Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
936to940
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
936to940
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Sicherheitskopie Module löschen

Sicherheitskopie Module löschen
08.01.2008 13:12:37
frank
Hallo zusammen,
Habe mich in der Recherche schlau gemacht und auch gefunden was ich wollte. Nur bei der Umsetzung stehe ich wieder vor einem Problemchen. Vielleicht kann mir jemand auf die Sprünge helfen.
Folgendes möchte ich umsetzen. Beim öffnen meiner Datei soll eine Sicherheitskopie angelegt werden.
Dies funktioniert super - setze ich so um.

Sub sicherheit()
ActiveWorkbook.SaveCopyAs "D:\Frank\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4)  _
&  "_" & Format(Now, "MM.DD") & ".xls"
End Sub


Da es mir dabei vielmehr um die Werte geht möchte ich auf einen großteil der Makros verzichten.
Deswegen sollen die Module1 und 11 sowie Diese Arbeitsmappe von den Makros befreit werden.
Im aktiven Workbook sieht das so aus:
Dim WB As Workbook
Set WB = ActiveWorkbook
With WB.VBProject.VBComponents("DieseArbeitsmappe").CodeModule
.DeleteLines 1, .CountOfLines
End With
'Modul löschen
With Application.VBE.ActiveVBProject
.VBComponents.Remove .VBComponents("Modul1")
.VBComponents.Remove .VBComponents("Modul11")
End With
Wie ändere ich das so um, dass das nur auf meine Kopie zutrifft?
Gruß Frank

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sicherheitskopie Module löschen
08.01.2008 13:17:00
Rudi
Hallo,
dafür must du die Kopie öffnen.
Set WB=Workbooks.Open("D:\Frank\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) _
& "_" & Format(Now, "MM.DD") & ".xls")
....
....
wb.close true
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

AW: Sicherheitskopie Module löschen
08.01.2008 14:02:00
frank
Hallo,
danke für Deinen Tip aber so recht glücklich bin ich nicht.
Denkemal wenn ich was öffnen will, dass ich vorher was anlegen muß, oder? Habe Deine Befehlzeilen nach meinem SaveCopyAs Befehl angehängt.
Haut aber irgendwie nicht hin da die Kopie sofort von sich wieder ne Kopie anlegt und so weiter ....! Und die Module + Diese Arbeitsmappen sind auch nicht leer?
Hast Du noch ne Idee?
Ideal wäre doch, wenn ich bei meiner originalen die Module ausblenden würde - Datei kopieren - und Module wieder einblenden. Umgehe ich das öffnen der Kopie. (Das öffnen dauert wegen der Komplexität schon ca. 30sec). Keine Ahnung wie ich das anstellen könnte.
Frank

Anzeige
AW: Sicherheitskopie Module löschen
08.01.2008 14:11:16
Rudi
Hallo,
dann kopiere doch die Tabellen in eine neue Mappe und speichere diese.
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

AW: Sicherheitskopie Module löschen
08.01.2008 16:06:00
frank
...mmhhh!!?
Ist es nicht auch möglich, dass man geschlossenen Arbeitsmappen bearbeiten kann? Da müßte man doch auch Module verschwinden lassen können.
Danke für Deine Hilfe - werde weiter suchen müssen.
Gruß Frank

AW: Sicherheitskopie Module löschen
08.01.2008 16:18:00
Fred
Hi,
deine Suche wird erfolglos bleiben, geschlossenen Mappen können nicht bearbeitet werden.
mfg Fred

AW: Sicherheitskopie Module löschen
08.01.2008 18:49:02
frank
... ich glaube Euch schon - meinte mehr damit, dass ich mich auf die Suche nach einer anderen Lösung machen werde. :-)
Gruß Frank

Anzeige
AW: Sicherheitskopie Module löschen
08.01.2008 17:05:00
Odje.K
Option Explicit

Private Sub CommandButton1_Click()
Dim intIndex As Integer
Dim blnFound As Boolean
Dim strRef   As String
blnFound = False
strRef = "Microsoft Visual Basic for Applications Extensibility"
With ThisWorkbook.VBProject.References
For intIndex = 1 To .Count
Debug.Print .Item(intIndex).Description, .Item(intIndex).GUID
If Left(.Item(intIndex).Description, Len(strRef)) = strRef Then
If .Item(intIndex).IsBroken Then
.Remove (.Item(intIndex))
Else
blnFound = True
End If
Exit For
End If
Next intIndex
If Not blnFound Then
Call Application.VBE.ActiveVBProject.References.AddFromGuid("{0002E157-0000-0000-C000- _
000000000046}", 5, 3)
End If
End With
Dim sFilename As String
Application.ScreenUpdating = False
sFilename = "D:\Frank\" & Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 0) & _
Format(Now(), "_DD.MM") & ".xls"
ThisWorkbook.SaveCopyAs Filename:=sFilename
Call CodeEntfernen(sFilename)
Call CommandButtonEntfernen(sFilename)
End Sub



Private Function CodeEntfernen(sFilename As String)
Dim Wb As Workbook, VBComp As VBComponent
Dim x As Long
Set Wb = Workbooks.Open(Filename:=sFilename)
For x = Wb.VBProject.VBComponents.Count To 1 Step -1
Set VBComp = Wb.VBProject.VBComponents(x)
If VBComp.Type = vbext_ct_StdModule Or _
VBComp.Type = vbext_ct_ClassModule Or _
VBComp.Type = vbext_ct_MSForm Then
Wb.VBProject.VBComponents.Remove VBComp
ElseIf VBComp.Type = vbext_ct_Document Then
VBComp.CodeModule.DeleteLines 1, VBComp.CodeModule.CountOfLines
End If
Next
Wb.Close Savechanges:=True
AUFRAEUMEN:
Set Wb = Nothing: Set VBComp = Nothing
End Function



Private Function CommandButtonEntfernen(sFilename As String)
Dim Wb As Workbook, ws As Worksheet
Dim x As Long
Set Wb = Workbooks.Open(Filename:=sFilename)
For Each ws In Wb.Worksheets
For x = ws.OLEObjects.Count To 1 Step -1
If ws.OLEObjects(x).progID = "Forms.CommandButton.1" Then
ws.OLEObjects(x).Delete
End If
Next
Next
Wb.Close Savechanges:=True
AUFRAEUMEN:
Set Wb = Nothing: Set ws = Nothing
End Function



Anzeige
AW: Sicherheitskopie Module löschen
08.01.2008 17:13:00
Odje.K
Hallo Frank,
da fluschte mir das Ding unter den Händen weg.
Wollte nur noch bemerken, dass ich mit dem Code meine Sicherungskopien speichere
ohne ohne Buttons und Module.
Gruß
Odje

AW: Sicherheitskopie Module löschen
08.01.2008 17:05:00
Odje.K
Option Explicit

Private Sub CommandButton1_Click()
Dim intIndex As Integer
Dim blnFound As Boolean
Dim strRef   As String
blnFound = False
strRef = "Microsoft Visual Basic for Applications Extensibility"
With ThisWorkbook.VBProject.References
For intIndex = 1 To .Count
Debug.Print .Item(intIndex).Description, .Item(intIndex).GUID
If Left(.Item(intIndex).Description, Len(strRef)) = strRef Then
If .Item(intIndex).IsBroken Then
.Remove (.Item(intIndex))
Else
blnFound = True
End If
Exit For
End If
Next intIndex
If Not blnFound Then
Call Application.VBE.ActiveVBProject.References.AddFromGuid("{0002E157-0000-0000-C000- _
000000000046}", 5, 3)
End If
End With
Dim sFilename As String
Application.ScreenUpdating = False
sFilename = "D:\Frank\" & Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 0) & _
Format(Now(), "_DD.MM") & ".xls"
ThisWorkbook.SaveCopyAs Filename:=sFilename
Call CodeEntfernen(sFilename)
Call CommandButtonEntfernen(sFilename)
End Sub



Private Function CodeEntfernen(sFilename As String)
Dim Wb As Workbook, VBComp As VBComponent
Dim x As Long
Set Wb = Workbooks.Open(Filename:=sFilename)
For x = Wb.VBProject.VBComponents.Count To 1 Step -1
Set VBComp = Wb.VBProject.VBComponents(x)
If VBComp.Type = vbext_ct_StdModule Or _
VBComp.Type = vbext_ct_ClassModule Or _
VBComp.Type = vbext_ct_MSForm Then
Wb.VBProject.VBComponents.Remove VBComp
ElseIf VBComp.Type = vbext_ct_Document Then
VBComp.CodeModule.DeleteLines 1, VBComp.CodeModule.CountOfLines
End If
Next
Wb.Close Savechanges:=True
AUFRAEUMEN:
Set Wb = Nothing: Set VBComp = Nothing
End Function



Private Function CommandButtonEntfernen(sFilename As String)
Dim Wb As Workbook, ws As Worksheet
Dim x As Long
Set Wb = Workbooks.Open(Filename:=sFilename)
For Each ws In Wb.Worksheets
For x = ws.OLEObjects.Count To 1 Step -1
If ws.OLEObjects(x).progID = "Forms.CommandButton.1" Then
ws.OLEObjects(x).Delete
End If
Next
Next
Wb.Close Savechanges:=True
AUFRAEUMEN:
Set Wb = Nothing: Set ws = Nothing
End Function



Anzeige
AW: Sicherheitskopie Module löschen
08.01.2008 18:46:00
frank
Hei,
melde mich wenn ich den Code ausbrobiert habe (komme vor 22:00Uhr nicht dazu).
Danke schonmal für Deine Hilfe.
Gruß Frank

AW: Sicherheitskopie Module löschen
08.01.2008 21:42:00
frank
Hallo,
Code funktioniert bestens. Habe aber was sehr wichtiges verschwiegen.
Meine Arbeitsmappe funktioniert etwas anders.
Es werden beim schließen bis auf ein leeres Blatt alle Tabellenblätter ausgeblendet. Beim öffnen erscheint dieses Blatt zusammen mit einer Userform welche nach einem Passwort fragt. Erst bei der richtigen Eingabe werden alle anderen Blätter sichtbar. Deswegen ist es nicht möglich die Datei zu speichern um dann zu öffnen und die Module zu löschen. Bekomme somit immer und immer wieder meine Passwortabfrage. Befinde mich somit in einer Endlosschleife.
Das ursächliche Problem ist eigentlich der Speicherort. Habe in "DieseArbeitsmappe" folgenden Code festgelegt.

Private Sub Workbook_Open()
Tabelle3.Visible = xlSheetVisible
If UCase(ThisWorkbook.Path)  UCase("O:\Excel") Then
MsgBox "Datei vom falschen Ordner gestartet:" & ThisWorkbook.Path, vbCritical
ThisWorkbook.Close
UserForm_Initialize.Show ' UF  starten
End Sub


Das heißt, die Datei kann nur von O:\Excel gestartet werden. Wenn ich nun eine Sicherheitskopie unter D:\Frank anlege habe ich keine Chance die Datei zu öffnen. Deswegen mein Ansinnen Module der Sicherheitskopie zu löschen.
Wie sieht denn nun aus, wenn ich in dem Makro noch ein zweiten Speicherort festlege.
Gibt es so was wie eine Oderfunktion. bei Ucase? Das ich sage, öffne die Mappe nur wenn sie unter O:\Excel oder D:\Frank liegt ansonsten Fehlermeldung und Datei schließen - wie oben halt.
Gruß Frank

Anzeige
AW: Sicherheitskopie Module löschen
08.01.2008 23:02:00
frank
hallo,
habe es jetzt so geregelt.
Tabelle3.Visible = xlSheetVisible
If UCase(ThisWorkbook.Path) UCase("D:\Frank") Then
If UCase(ThisWorkbook.Path) UCase("K:\Excel\Frank") Then
MsgBox "Datei vom falschen Ordner gestartet:" & ThisWorkbook.Path, vbCritical
ThisWorkbook.Close
End If
End If
geht bestimmt auch professioneller.
Was mich jetzt nur noch stört ist die Userabfrage zwecks Passwort bei der Sicherheitskopie.
Probier ich morgen
Frank

AW: Sicherheitskopie Module löschen
09.01.2008 13:20:02
frank
Hallo,
da bin ich wieder mit meinen Problemen. Ich fang mal von vorn an. Wenn meine Datei geschlossen wird werden alle Blätter bis auf Tabelle3 ausgeblendet. Beim öffnen erscheint nur Tabelle 3 zusammen mit einer Userform (zwecks Passwortabfrage). Wenn PW falsch wird Datei einfach geschlossen. Eine weitere Abfrage ist, das die Datei nur von einem bestimmten Ort aufgemacht werden soll einschließlich der Sicherheitskopie. Deswegen zweimal UCase. Bis dahin funktioniert auch alles. Ich möchte nun aber verhindern, dass wenn meine Sicherheitskopie auf LW:\D geöffnet wird wieder eine PW Abfrage + Kopie angelegt wird. Deswegen wäre eine weitere Abfrage sinnvoll wo ich sage ist Datei Frank.xls dann Userform...... oder wenn Frank.xls_09.01.xls dann weiter mit makro lese_schreibe.
Gruß Frank

Private Sub Workbook_Open()
Tabelle3.Visible = xlSheetVisible
If UCase(ThisWorkbook.Path)  UCase("D:\Frank") Then 'Sicherheitskopie
If UCase(ThisWorkbook.Path)  UCase("K:\Excel") Then ' Originalort
MsgBox "Datei vom falschen Ordner gestartet:" & ThisWorkbook.Path, vbCritical
ThisWorkbook.Close
End If
End If
If ActiveWorkbook.Name  ("Frank.xls") Then
lese_schreibe
End if
UserForm_Initialize.Show ' UF  starten
sicherheit
End Sub


Sub sicherheit()
Dim sFilename As String
Application.ScreenUpdating = False
sFilename = "D:\Frank\" & Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 0) & _
Format(Now(), "_DD.MM") & ".xls"
ThisWorkbook.SaveCopyAs Filename:=sFilename
End Sub



Public Sub lese_schreibe()
Tabelle1.Visible = xlSheetVisible
Tabelle3.Visible = xlSheetVeryHidden
End Sub


Anzeige
AW: Sicherheitskopie Module löschen
09.01.2008 13:31:09
frank
... zu schnell abgeschickt.
Dieser Code funktioniert nicht.
Was mach ich denn falsch?
If ActiveWorkbook.Name ("Frank.xls") Then
lese_schreibe
End if
Frank

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige