kleines excel prob (skript beim starten)
HitTheCow 17.01.2008 - 08:37 1211 11
HitTheCow
it's been an honor.
|
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
Bearbeitet von HitTheCow am 17.01.2008, 08:42
|
HitTheCow
it's been an honor.
|
Private Sub Workbook_Open() Sheets("Tabelle1").Select Sheets("Tabelle1").Copy Before:=Sheets(1) End Sub wär schonmal mein beginn ( ![:D](/images/smilies/biggrin.gif) ), aber er macht natürlich immer ne kopie von der ur-tabelle. bräuchte irgendwie eine referenz auf die aktuelle tabelle
|
Punisher
Bukanier
|
so ... denk das müsste hinhaun 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
als letzte Zeile vor dem end sub kannst noch ein Sheets(1).Select einfügen, dann zeigt er beim start auch immer das erste bearbeitbare Blatt omg ... jetz mach ich schon deine arbeit ![;)](/images/smilies/wink.gif) hth
Bearbeitet von Punisher am 17.01.2008, 19:12
|
HitTheCow
it's been an honor.
|
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)...
|
AoD
aka AngelOfDeath
|
schon mit der automatischen makroaufzeichnung probiert? die sollte auch deine aktionen abbilden können
|
that
Hoffnungsloser Optimist
|
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?)
|
HitTheCow
it's been an honor.
|
ICH will damit gar nix machen ![:)](/images/smilies/smile.gif) 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
Bearbeitet von HitTheCow am 23.01.2008, 17:15
|
HitTheCow
it's been an honor.
|
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
arbeitsmappenschutz greift (da fragt er mich nach dem passwort), aber der blattschutz greift leider ned (blattschutz aufheben und der schutz is weg - keine passwortnachfrage) syntax ist doch genau gleich?
|
HitTheCow
it's been an honor.
|
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
|
Punisher
Bukanier
|
lastName = Left(ActiveWorkbook.BuiltinDocumentProperties("Last author").Value,8)
meinst du ca so?
Bearbeitet von Punisher am 11.02.2008, 19:48
|
HitTheCow
it's been an honor.
|
KUH L ![:)](/images/smilies/smile.gif) 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
|
Punisher
Bukanier
|
Left für links beginnen (rechts abschneiden), oder middle (für mittelteil) bzw right (für rechts beginnen & links abschneiden)
Signatur: Left(String,Integer)
|