 |
Formulare von mehreren Nutzern bearbeiten lassen
Ich habe ein Formular entworfen, das verschiedene Personen über das Netzwerk ausfüllen. Dabei sollen die Formulare beim Speichern nummeriert werden, um das Überschreiben bereits ausgefüllter Formulare zu verhindern. Zudem wäre ein Bearbeitungsprotokoll hilfreich. Kann Excel das?
Mit einem Makro schaffen Sie es. Eine Lösung finden Sie auf der Heft-CD CHIP-Code EXPROT.
Wenn Sie lieber selbst programmieren, legen Sie zuerst das Formular mit den Eingabefeldern an. Markieren Sie nacheinander diese Felder und führen Sie jeweils »Format | Zellen« aus, um unter »Schutz« das Kästchen »Gesperrt« zu deaktivieren. Diese Befehlsfolge können Sie ab dem zweiten Mal mit den Tasten [Strg]+[Y] ausführen. Fügen Sie dem Formular mit der Symbolleiste »Formular« eine Makroschaltfläche hinzu und weisen Sie ihr das Makro »Sichern« zu. Geben Sie nun im VBA-Editor folgendes Listing ein:
Sub Sichern() Dim Pfad1, Protfile, Aktfile Dim Nummer Dim Name, User Dim Dat1, Dat2 Dat1 = ActiveWorkbook.Worksheets (äTabelle1ô).Cells(4, 3) Dat2 = ActiveWorkbook.Worksheets (äTabelle1ô).Cells(6, 3) Pfad1 = CurDir Protfile = Pfad1 & ä\ô & äprot.xlsô Workbooks.Open FileName:=Protfile Nummer = Val(ActiveWorkbook.Worksheets(äProt-Tabô).Cells(1,2)) + 1 ActiveWorkbook.Worksheets(äProt-Tabô).Cells(1, 2) = Nummer Name = ActiveWorkbook.Worksheets (äProt-Tabô).Cells(1, 1) User = Application.UserName Aktfile = Pfad1 & ä\ô & Name & Nummer ActiveWorkbook.Worksheets(äProt-Tabô).Cells(Nummer + 2, 1) = Nummer ActiveWorkbook.Worksheets(äProt-Tabô).Cells(Nummer + 2, 2) = Aktfile ActiveWorkbook.Worksheets(äProt-Tabô).Cells(Nummer + 2, 3) = Date ActiveWorkbook.Worksheets(äProt-Tabô).Cells(Nummer + 2, 4) = Time ActiveWorkbook.Worksheets(äProt-Tabô).Cells(Nummer + 2, 5) = User æ ActiveWorkbook.Worksheets(äProt-Tabô).Cells(Nummer + 2, 7) = Dat1 ActiveWorkbook.Worksheets(äProt-Tabô).Cells(Nummer + 2, 8) = Dat2 ActiveWorkbook.Save ActiveWorkbook.Close æ ActiveWorkbook.SaveAs FileName:= Aktfile, FileFormat:=xlNormal, Password:=ôä, WriteResPassword:=ôä, _ ReadOnlyRecommended:=False, CreateBackup:=False End Sub
Sub Auto_Open() Application.CommandBars(äFileô). Controls(5).Enabled = False Application.CommandBars(äFileô). Controls(4).Enabled = False Application.CommandBars(äStandardô).Controls(3).Enabled = False End Sub Sub Auto_Close() Application.CommandBars(äFileô). Controls(5).Enabled = True Application.CommandBars(äFileô). Controls(4).Enabled = True Application.CommandBars(äStandardô).Controls(3).Enabled = True End Sub
Das erste Makro liest Felder aus dem Formular ein. Dann öffnet es PROT.XLS. In Zelle B1 von »Prot-Tab« steht die laufende Nummer, die das Makro um Eins erhöht und mit dem Namen aus Zelle A1 den Filenamen bildet. Nun füllt das Makro eine neue Zeile in der Protokolldatei aus und trägt neben Nummer und Namen auch Datum, Uhrzeit und den Namen des Users ein. Nach Schließen der Protokolldatei speichert das Makro die Formulardatei.
Die beiden Makros »Auto_Open« und »Auto_Close« verhindern, dass der Benutzer andere Speichervorgänge ausführen kann, indem sie die Menüpunkte »Speichern« sowie »Speichern unter« deaktivieren. Bei der Arbeit können Sie durch die gezielte Ausführung des Makros »Auto_Close« die Befehle wieder aktivieren. Auf dem Server schützen Sie die Formulardatei mit »Extras | Schutz | Blatt« und geben ihr das Dateiattribut »Nur lesen«. Im aktuellen Ordner müssen Sie noch die Datei PROT.XLS mit der Tabelle »Prot-Tab« anlegen und in Zelle »A1« den gewünschten Anfang des Dateinamens und in »B1« die Nummer eintragen.
|
 |