"We are back" « oc.at

kleines excel prob (skript beim starten)

HitTheCow 17.01.2008 - 08:37 1211 11
Posts

HitTheCow

it's been an honor.
Avatar
Registered: Mar 2002
Location: bielefeld
Posts: 6378
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.
Avatar
Registered: Mar 2002
Location: bielefeld
Posts: 6378
Private Sub Workbook_Open()
Sheets("Tabelle1").Select
Sheets("Tabelle1").Copy Before:=Sheets(1)
End Sub

wär schonmal mein beginn (:D), aber er macht natürlich immer ne kopie von der ur-tabelle. bräuchte irgendwie eine referenz auf die aktuelle tabelle

Punisher

Bukanier
Avatar
Registered: Sep 2002
Location: Disneyland
Posts: 1870
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

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 ;)

hth
Bearbeitet von Punisher am 17.01.2008, 19:12

HitTheCow

it's been an honor.
Avatar
Registered: Mar 2002
Location: bielefeld
Posts: 6378
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
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1482
schon mit der automatischen makroaufzeichnung probiert? die sollte auch deine aktionen abbilden können

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
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.
Avatar
Registered: Mar 2002
Location: bielefeld
Posts: 6378
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 :(
Bearbeitet von HitTheCow am 23.01.2008, 17:15

HitTheCow

it's been an honor.
Avatar
Registered: Mar 2002
Location: bielefeld
Posts: 6378
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
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.
Avatar
Registered: Mar 2002
Location: bielefeld
Posts: 6378
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
Avatar
Registered: Sep 2002
Location: Disneyland
Posts: 1870
Code:
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.
Avatar
Registered: Mar 2002
Location: bielefeld
Posts: 6378
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 :)

Punisher

Bukanier
Avatar
Registered: Sep 2002
Location: Disneyland
Posts: 1870
Left für links beginnen (rechts abschneiden), oder middle (für mittelteil) bzw right (für rechts beginnen & links abschneiden)

Signatur: Left(String,Integer)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz