Clever-Excel-Forum

Normale Version: Makro Arbeitsmappe freigeben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

ich habe eine Exceltabelle mit ca 50 Blättern die von vielen Leuten benutzt wird. Ich habe ein Makro eingefügt das eine Zelle nach Eingabe gesperrt wird.
Da die Blätter öfter bearbeitet werden müssen, habe ich einen Button eingefügt womit alle Blätter entsperrt und einen Butten zum Sperren eingefügt.
Funktioniert alles ganz gut. Das Problem ist, das ich die Blätter freigebe und tataaa Zelle wird gesperrt Dodgy .
Frage 1: Wie kann ich das Makro für die Bearbeitung anhalten?
Frage 2: Die Arbeitsmappe ist geschützt und freigegeben. Kann man die Freigabe  auch  in dem Makro  unterbringen?

folgende Makros benutze ich:

Zellenschutz (in jedem Blatt hinterlegt):


Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Me.Unprotect "1234"

If VBA.IsEmpty(Target) Then
Target.Locked = False
Else
Target.Locked = True
End If
Me.Protect "1234"
End Sub


Entsperren und Sperren (in Modul1):

Sub Aufheben()
Dim StrEing As String
StrEing = InputBox("Passwort")
On Error GoTo Errorhandler
For I = 1 To Sheets.Count
Sheets(I).Unprotect StrEing
Next I
Exit Sub
Errorhandler:
MsgBox "Falsches Passwort"
End Sub


Sub Schutz()
Dim StrEing As String
StrEing = InputBox("Passwort")
For I = 1 To Sheets.Count
Sheets(I).Protect StrEing
Next I

MsgBox "Alle Blätter wurden geschützt"
Exit Sub
End Sub


Danke schonmal für eure Hilfe
Hallo,
ich verstehe nicht was Du erreichen willst. Beispieldatei wäre hilfreich!
So, mit der Freigabe hat sich erledigt. Das Funktioniert jetzt auch. Jetzt suche ich nur noch eine lösung das Makro für das automatische sperren bei eingabe auf Pause zu setzen wenn man den Blattschutz zum bearbeiten entfernt
Hier eine Beispieldatei
Hallo,

also, Dein Problem habe ich noch nicht wirklich begriffen.
hierdurch:
Zitat:Jetzt suche ich nur noch eine lösung das Makro für das automatische sperren bei eingabe auf Pause zu setzen wenn man den Blattschutz zum bearbeiten entfernt
denke ich, daß Du Probleme hast, mit dem sich ergebenden Zeitraum aus:
..... dem anfänglichen "Entsperren"
..... dem zwischendrin "Arbeiten"
..... und dem abschließenden erneut "Sperren"
und das Ganze in nur einem Code, der die ganze Zeit über läuft und Alles
ausbremst.

Wenn ich das soweit richtig begriffen haben sollte, dann wirst Du das auch
nicht mit einem PauseAufruf in den Griff bekommen.
In diesem Fall ist eine von vielen, und das wäre mM auch die einfachste
Möglichkeit, den Code in zwei Stücke zu teilen.

Du erhältst damit einen Code, mit dem Du Deine Arbeit wie "schon immer so gemacht"
startest und einen weiteren Code, mit dem Du die Arbeiten am Schluß wieder abschließt.

Diesen abschließenden Code könnte man auch automatisiert ablaufen lassen, in dem man
ihn im Modul "DieseArbeitsmappe" aufruft, bevor die Datei geschlossen wird. Man brauchte
sich dann gar nicht mehr drum kümmern.

Das war jetzt mal nur ein Vorschlag und der gilt auch nur dann, wenn ich Dein Problem
halbwegs richtig verstanden habe.
Hallo Peter,

ich versuche es mal anders zu erklären:

Die Datei steht einer ganzen menge Leute zur verfügung wo jeder etwas eintragen kann. Damit keiner mehr äbderungen vornehmen kann, ist mein Ziel die Zellen mit Einträgen zu Sperren. Die Datei wird 1-2 pro Woche entsperrt um kleine änderungen vorzunehmen. Ich habe vorher ein Makro verwendet das beim Schließen der Datei die Zellen prüft und sperrt. Bei 50 Tabellenblättern dauert das eine ewigkeit. Deshalb habe ich es jetzt so geschrieben das die Zelle sofort nach Eingabe gesperrt wird. Wenn ich jetzt allerdings den Blattschutz für eine änderung entferne, wird logischerweise sofort der Blattschutz wieder aktiviert. Also wieder Blattschutz raus und nächste Zelle ändern. Jetzt dachte ich mir das man bestimmt in den Code von Aufheben (der grüne Button im Arbeitsblatt) so schreiben kann das der Editor quasi in den Entwurfsmodus geht bis ich auf rot klicke und alles wieder aktiviert wird.
Hallo,

also, ... Deine Datei kann ich momentan nicht lesen. Ich liege derzeit im Krankenhaus und meine
hier vorhandene Software kann nur bis Excel 2003 mithalten. Eigentlich war schon lange geplant,
einen neuen Laptop anzuschaffen, aber das hat alles zeitlich nicht so hingehauen, wie ich mir das
vorgestellt hatte. Nun muß ich eben warten, bis ich hier wieder raus bin.

Mit Deinem letzten Beitrag zweifele ich allerdings noch mehr an der Sinnhaftigkeit Deines Vorhabens.
Du schreibst, daß Du Zellen nach einem Eintrag sperren willst, damit keine getätigten Eingaben geändert
werden können. Dann schreibst Du weiter, daß es einen Freigabezeitraum geben soll, in dem Änderungen
vorgenommen werden können. Ich frage mich besorgt, wozu dann das Ganze?
Und für Dich hoffe ich, daß das Ganze keine Formulare sind, die an irgendwelche Ämter oder Behörden
gehen, weil denen so etwas wie "nachträgliche Änderungen" verdammt sauer aufstößt.

Voraussichtlich werde ich am Montag oder Dienstag entlassen und dann habe ich technisch wieder
alle Möglichkeiten zur Verfügung. Dann werde ich mir Deine Datei ansehen und Dir eventuell auch
eine andere Lösung vorschlagen können. Unter anderem werde ich dann auch wissen, warum Du
über einen so langsamen Programmablauf stöhnst. Da kann man erfahrungsgemäß mit ziemlicher
Sicherheit an einigen Schrauben drehen.
Und außerdem gibt es im Forum genügend Helfer, denen es eventuell schon morgen in den Fingern
jucken wird. Eventuell brauchst Du ja gar nicht auf mich warten.

und hierzu:
Wenn ich jetzt allerdings den Blattschutz für eine änderung entferne, wird logischerweise
sofort der Blattschutz wieder aktiviert.

hatte ich Dir doch oben schon was vorgeschlagen. Ich kenne Deine VBA-Kenntnisse nicht und Du
hast ja bisher auch nicht auf meinen Vorschlag reagiert. Bis das passiert ist, bleibe ich dabei,
Splitte das Makro ... Damit kannst Du so gut wie gar nichts falsch machen.

Später: ... doch, es gibt eine eingreifende Änderung. Mit dem Splitten des Codes in der von
mir vorgeschlagenen Form wird für die Leute der "Änderungenzeitraum" verlängert *** grins ganz frech ***.
Hallo Peter,

es handelt sich nicht um einen Freigabezeitraum. Die Datei ist Freigegeben das mehrere Benutzer gleichzeitig die Datei öffnen können da sie in einem Netzwerk liegt. Es geht sich jetzt auch nur noch darum wie ich das Makro für den Zellschutz abschalten kann wenn die Dateifreigabe und der Blattschutz entfernt wird.

Schönen Gruß und Gute Besserung 
Wolfgang

PS: werde Montagabend die datei mal hochladen wo der Blatttschutz erst beim Speichern gesetzt wird. Vielleicht (oder bestimmt) habe ich ja einen fehler gemacht da ich sehr wenig Ahnung von VBA habe.
Hallo Wolfgang,

es ist nicht sehr zielführend, wenn Du nur scheibchenweise Informationen bekannt gibst,
die Auswirkungen auf die Lösung des Problems haben. Keiner der Helfer hat Lust, und es
ist auch nicht der Sinn eines Forums, etliche Male das bereits geschnürte Hilfepaket erneut
aufzuschnüren, bloß weil der Frager immer wieder ein neues Kaninchen aus dem Hut zieht.
Das gilt übrigens für den Formelbereich genau so wie für den VBA-Bereich.
In diesen Fällen sage / schreibe ich gewöhnlich, "... wir sprechen nicht die gleiche Sprache"
und stelle weitere Hilfeleistungen ein.
Zu den von mir vorgestellten Hilfen gibt es zum Beispiel keinen Kommentar und auf Fragen
reagierst Du ebenfalls nicht. Dafür kommst Du aber ständig mit neuen Überraschungen um
die Ecke. Es ist zwar bald wieder Ostern, aber schon als Kind habe ich mich zum Leidwesen
meiner Eltern strickt geweigert, Ostereier zu suchen.
Als Erwachsener sehe ich immer noch keinen Sinn darin.
Will heißen, eine Hilfe zu einem Programm kann nur so gut sein, wie der Frager es zuläßt.

Denke mal darüber nach, denn so wie Du Dich verhältst, sprechen wir nicht die
gleiche Sprache.
Hallöchen,

Du könntest für Dich mit kurzen Makros die Events abschalten und nach getaner Arbeit wieder anschalten. Dann sollte auch nicht mehr das Sperren greifen, wenn das in einem Change-Event vorkommt.

Im Prinzip so:

Sub EventsAus()
Application.EnableEvents = False
End Sub

Sub EventsAn()
Application.EnableEvents = True
End Sub
Seiten: 1 2