Herzliche Grüße,
Hans
Sub ArchivDateiErstellen()
Set WBVerwaltung = ActiveWorkbook
WBVerwaltung.Activate
'Variablen initialisieren
strPfad = ActiveWorkbook.Path & Application.PathSeparator
strDateiNameALT = strPfad & strDateiName
strDateiNameNEU = strPfad & "Archiv" & _
Application.PathSeparator & strDateiName
'Verschieben in Unterordner Archiv
Name strDateiNameALT As strDateiNameNEU
'Workbook (=WBBetrieb =strDateiNameNEU) öffnen
Workbooks.Open Filename:=strDateiNameNEU
Set WBBetrieb = ActiveWorkbook
'Schutz in WBBetrieb aufheben
WBBetrieb.Activate
Sheets("Berechnung").Select
Sheets("Berechnung").Activate
'Archivbereich kopieren und als Werte einfügen
Application.GoTo Reference:="Archivbereich"
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, _
Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("A1").Select
'Steuerelemente entfernen
ActiveSheet.DrawingObjects.Delete
'Namen löschen
For Each myName In WBBetrieb.Names
myName.Delete
Next
'ausgeblendete Blätter löschen:
With Application
.DisplayAlerts = False
Sheets("001").Delete
Sheets("002").Delete
.DisplayAlerts = True
End With
'Schutz aktivieren
With Cells
.ClearComments
.Locked = True
.FormulaHidden = True
End With
'VBA-Code entfernen
Call CodeEntfernen '-----> siehe folgende Sub
Workbooks(strDateiName).Close SaveChanges:=True '???
Application.DisplayAlerts = True
'WBVerwaltung:
WBVerwaltung.Activate
End Sub
Sub CodeEntfernen()
'Benötigt Verweis auf:
'"Microsoft Visual Basic for Applications Extensibility"
'(in Excel 2000 und 2002 mit Versionszusatz "5.3")
Dim objKomponente As VBComponent
Dim objKomponenten As VBComponents
Dim objVBAProjekt As VBProject
Dim objVerweis As Reference
Dim objBlatt As Worksheet
Dim objDialogblatt As DialogSheet
If ActiveWorkbook.Name <> ThisWorkbook.Name Then
Set objVBAProjekt = ActiveWorkbook.VBProject
Set objKomponenten = objVBAProjekt.VBComponents
For Each objKomponente In objKomponenten
With objKomponente
Select Case .Type
Case vbext_ct_StdModule, _
vbext_ct_ClassModule, _
vbext_ct_MSForm
objKomponenten.Remove objKomponente
Case vbext_ct_Document
.CodeModule.DeleteLines _
1, .CodeModule.CountOfLines
End Select
End With
Next
For Each objVerweis In objVBAProjekt.References
If Not objVerweis.BuiltIn Then
objVBAProjekt.References.Remove objVerweis
End If
Next
Application.DisplayAlerts = False
For Each objBlatt In Excel4MacroSheets
objBlatt.Delete
Next
For Each objDialogblatt In DialogSheets
objDialogblatt.Delete
Next
Application.DisplayAlerts = True
End If
End Sub
Hans Faber schrieb:
>
> Es geht folgenden:
> Ich habe eine Datei Verwaltung.xls, in der in Spalte A die
> Dateinamen der zu bearbeitenden Dateien sind. Hier wählen
> ich die Datei aus (strDateiName), von der ich dann per VBA
> eine Archivdatei erstellen will, die nur noch Werte und
> Formate enthält und auch keinen VBA-Code mehr. Diese
> Archivdatei soll in einen Unterordner Archiv verschoben
> werden.
> Nach dem Start von <Sub ArchivDateiErstellen> wird <Sub
> CodeEntfernen> aufgerufen. Beide Routinen laufen
> fehlerfrei durch. Allerdings wird der VBA-Code nicht
> entfernt !!!
> Kann mir hier jemand den goldenen Tip geben?
Hmmm , ich hab den Code (noch) nicht genauer angesehen- aber hast Du schon
versucht, die einzelnen Mappen in einer älteren Excel-Version zu sichern,
als xl95-Datei zum Beispiel?
Wenn Du nur noch Werte und Formate haben willst, fällt alles andere beim
Speichern im 95-er Format weg - auch der VBA-Code.
Das Ganze könntest Du ja ebenfalls per VBA machen.
Nur mal als Idee.
--
Mit freundlichen Grüssen
Thomas Ramel
- MVP für Microsoft-Excel -
[Win 2000Pro SP-4 / xl2000 SP-3]
Thomas Ramel schrieb:
>
> Hmmm , ich hab den Code (noch) nicht genauer angesehen- aber hast Du
> schon versucht, die einzelnen Mappen in einer älteren Excel-Version zu
> sichern, als xl95-Datei zum Beispiel?
> Wenn Du nur noch Werte und Formate haben willst, fällt alles andere beim
> Speichern im 95-er Format weg - auch der VBA-Code.
Als Excel4-Arbeitsmappe speichern, dann ist aller Code weg
Gruß, Hans
>-----Originalnachricht-----
>.
>
Hast du den Verweis tatsächlich gesetzt (wenn nicht,
sollte es eigentlich eine Fehlermeldung geben bei der
Dimensionierung der Variablen)?
Eine weitere Möglichkeit wäre, dass die Bedingung
If ActiveWorkbook.Name <> ThisWorkbook.Name Then
False ist und deshalb der Code nicht ausgeführt wird.
Setzte hinter/unter die Bedingung testweise mal ein
MsgBox.
Gruß
stefan
>-----Originalnachricht-----
>.
>
Gruß, Hans
Hast Du
>-----Originalnachricht-----
>.
>
Geöffnet hast du die Datei weiter oben im Code aber als
strDateiNameNEU. Deshalb werden die Änderungen auch nicht
gespeichert.
Liegts vielleicht daran?
Gruß
stefan
>-----Originalnachricht-----
>.
>
Gruß, Hans
>-----Originalnachricht-----
>.
>
Du hast ja geschrieben, dass bis zu der Zeile
Workbooks(strDateiName).Close SaveChanges:=True
alles richtig funktioniert. Ich habe im Moment aber keine
Idee, was da nicht stimmen könnte, sorry.
Gruß
stefan
>-----Originalnachricht-----
>Hallo Stefan,
>Danke, aber ich glaub nicht, daß es daran liegt. Vor dem
>ganzen Entfernen von Namen, Formeln, Code etc. wird die
zu
>archivierende Datei (strDateiName) in ein
>Unterverzeichnis "Archiv verschoben". Die Variable
>strDateiName ist an anderer Stelle als Public deklariert
>(wird öfter gebraucht).
>....
> 'Variablen initialisieren
> strPfad = ActiveWorkbook.Path &
Application.PathSeparator
> strDateiNameALT = strPfad & strDateiName
> strDateiNameNEU = strPfad & "Archiv" & _
> Application.PathSeparator & strDateiName
> 'Verschieben in Unterordner Archiv
> Name strDateiNameALT As strDateiNameNEU
> 'Workbook (=WBBetrieb =strDateiNameNEU) öffnen
> Workbooks.Open Filename:=strDateiNameNEU
>....
>.
>
>.
>