URL: https://www.overclockers.at/coding-stuff/kleines_excel_prob_skript_beim_starten_190542/page_1 - zur Vollversion wechseln!
bräuchte eure hilfe bei einem excel problem - und zwar:
es gibt ein ganz normales excel file mit einer tabelle darin (inhalt egal).
wenn das excel geöffnen wird soll er die bisherige tabelle 1 als tabelle 2 abspeichern (wenns geht mit datum und uhrzeit) und schreibgeschützt machen.
die neue tabelle 1 bietet den gleichen inhalt wie die ehemalige tabelle 1 und dort wird weitergearbeitet.
so eine art protokollierung und jedes mal wenn wer fertig ist wird halt beim nächsten mal der inhalt gespeichert und als neue tabelle abgelegt ...
ich hoff jemand versteht was ich meine
tia, htc 
Private Sub Workbook_Open()
Sheets("Tabelle1").Select
Sheets("Tabelle1").Copy Before:=Sheets(1)
End Sub
wär schonmal mein beginn (
), aber er macht natürlich immer ne kopie von der ur-tabelle. bräuchte irgendwie eine referenz auf die aktuelle tabelle
so ... denk das müsste hinhaun
Code:Sub Workbook_Open() Dim Time As String 'Datum + Zeit für die fortlaufende Nummerierung Time = Now 'keine doppelpunkte im Sheetnamen erlaubt Time = Replace(Time, ":", ".") Sheets(1).Select Sheets(1).Copy After:=Sheets(1) Sheets(2).Select Sheets(2).Name = "Sicherung " + Time Sheets(2).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub

funktioniert soweit wunderbar - danke
mitn schreibschutz feigelts mich noch ein wenig.
es soll nur das erste blatt bearbeitbar sein - von jedem.
die restlichen hinteren mit einem passwort geschützt werden.
irgendwie schützt er mir aber entweder alles (arbeitsmappenschutz) oder ned wirklich effektiv (user braucht nur auf "blattschutz aufheben" gehen)... 
schon mit der automatischen makroaufzeichnung probiert? die sollte auch deine aktionen abbilden können
Was willst du dann eigentlich mit dem Dokument machen? Auswertungen über mehrere Sheets fahren? Oder nur archivieren? (in diesem Fall: warum nicht einfach jedesmal eine neue Datei?)
ICH will damit gar nix machen 
afaik dients als vorlage für eine art protokoll o.ä., dass dann mehrere abteilungen durchläuft (10-15ca)
d.h. im ersten blatt schreibt der erste rein und gibts weiter. seins wird dann als [datum, uhrzeit, name] weiteres blatt abgespeichert. der nächste macht im hauptblatt weiter und seine änderungen werden wieder im neuen blatt gespeichert - rutscht immer um eins nach hinten.
am ende sieht man beim durchblättern der hinteren blätter somit wie sich das ganze aufgebaut hat, bzw. wer was gemacht hat und ob sich evtl. wo ein fehler eingeschlichen hat.
@makroaufzeichnung - jap, schon probiert.
aber entweder sperrt er mir irgendwie alles (nichtmal das skript läuft beim öffnen, oder der schutz lässt sich ganz einfach aushebeln (extras, schutz, blattschutz aufheben (afair?))
edit1: perfekt wärs (und genau das was ich suche) wenn er nur die struktur schützen würde (user kann somit bei den neuen arbeitsblättern nix ändern und auch keine löschen). das problem ist nur, dass der schutz auch vorm skript schützt und somit das skript keine chance hat das neue blatt zu erstellen.
bin ich da mit Sheets(2).Protect DrawingObjects:= und .Unprotect auf der richtigen Spur?
meine güte bin ich ein noob was diese sachen betrifft 
arbeitsmappenschutz greift (da fragt er mich nach dem passwort), aber der blattschutz greift leider ned (blattschutz aufheben und der schutz is weg - keine passwortnachfrage)Code:Sub Workbook_Open() 'Arbeitsmappenschutz aufheben ActiveWorkbook.Unprotect Password:="test1" 'Blattschutz für Tab01 aufheben ActiveSheet.Unprotect Password:="test2" 'Datum + Zeit: für die fortlaufende Nummerierung, Item(12) = "zuletzt gespeichert Datum" Dim Time As String Time = ActiveWorkbook.BuiltinDocumentProperties.Item(12).Value 'Fehlerumgehung: da keine doppelpunkte im Sheetnamen erlaubt sind Time = Replace(Time, ":", ".") 'Username: benutzt den Windows Anmeldenamen Dim Name As String Name = Environ("Username") 'Kopie von Tabelle1 als <DATE|TIME|USER> Sheets(1).Select Sheets(1).Copy After:=Sheets(1) Sheets(2).Select Sheets(2).Name = Time + " " + Name 'Kopien schützen Sheets(2).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveSheet.Protect Password:="test2" Sheets(1).Select 'Arbeitsmappenschutz wieder aktivieren ActiveWorkbook.Protect Password:="test1" End Sub
hätt noch eine kleine frage bzgl der stringlänge.
im oberen code greift er auf den windows-anmeldenamen zurück (ist in unserem fall immer 8 zeichen lang - deshalb hab ich da auch keine probleme mit der maximalen blattbezeichnung von 31 zeichen).
da das ganze logisch aber ned ganz richtig ist füg ich jetzt beim skriptaufruf immer den "last-author" hinzu. dabei greift er aber auf den file-internen namen zurück (sprich, der name des authors im office -> und der kann in seiner länge variieren).
wie schaff ichs nun diesen namensstring auf z.b: 8 zeichen zu begrenzen? entweder ich such nach den falschen sachen bei google oder ich übersehs ständig.
mir kommt vor es müsst ja eine ganz triviale lösung sein...
tia
meinst du ca so?Code:lastName = Left(ActiveWorkbook.BuiltinDocumentProperties("Last author").Value,8)
KUH L 
dank dir.
kanns derzeit nicht testen (hab das file ned da), aber ich denk schon, dass es genau das sein müsste ...
mir ist eben genau ".VALUE,8" abgegangen ...
"LEFT" ... damit er von links beginnt?
danke danke danke 
Left für links beginnen (rechts abschneiden), oder middle (für mittelteil) bzw right (für rechts beginnen & links abschneiden)
Signatur: Left(String,Integer)
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026