Exel 2003: Tabelle nur per Button bearbeiten / formatieren

palaber

Captain
Registriert
Juni 2006
Beiträge
3.856
Hello zusammen,

leider hat meine Suche bisher noch kein Erfolg gebracht. Ich erstelle gerade eine Tabelle in der Daten eingefügt werden sollen. Und zwar per Button der ein Makro ausführt. Das funktioniert soweit auch alles. Momentan ist ein Blattschutz eingestellt, das nur die Felder mit Werten bearbeitet werden können.

Jetzt würde ich es aber gerne so einstellen, dass die Tabelle nicht bearbeitet werden kann. Nur die jeweilige Zelle ausgewählt werden kann. In diese soll dann durch drücken des Buttons das Makro (nur Werte einfügen) ausgeführt werden.

Gibt es da ne Möglichkeit? Schon mal vielen Dank für eure Hilfe!

Gruß palaber
 
Was ist denn "die jeweilige Zelle"?

Bzw. was ist eigentlich das Problem? Dein Makro funktioniert ... was darüber hinaus funktoniert jetzt nicht?
 
Ich möchte das man irgend eine Zelle anklicken kann. Aber nicht beabeiten. Momentan kann man die
Zellen durch z.B. "STRG+V" oder Eingabe von Text verändert werden. Dies soll verhindert werden.

Es soll nur noch ein Wert in eine (beliebige) Zelle über den Button eingefügt werden können, sonst kann man nichts machen.
 
Der Benutzer klickt eine Zelle an, darf diese aber nicht bearbeiten und wenn er auf die Schaltfläche klickt wird etwas in die ausgewählte Zelle geschrieben.
Hab ich das so richtig verstanden?

Du kannst einfach den Blattschutz kurz aufheben, den Wert hineinschreiben und den Blattschutz wieder aktivieren:
Code:
Call ActiveSheet.Unprotect("Passwort")
...
Call ActiveSheet.Protect("Passwort")
 
@diablobase: Genau so ist es gedacht.

Allerdings mach ich das für meinen Chef und der will nicht, dass die Mitarbeiter an der Tabelle etwas verändern. Außer eben Werte der neuen Messung eintragen. Dabei darf aber nicht die
Formatierung der Zelle verändert werden. Deswegen Makro und der Buttonsalat.

Deine Alternativ geht nicht. Zu Umständlich und wenn der Blattschutz raus ist können
die Mitarbeiter alles verändern. Das ist eben das Problem. Es arbeiten auch Personen an dem Sheet, die keine große Ahnung davon haben und ansonsten munter mit Strg+v die Werte mit samt der Formatierung verändern.

Ich habe das Makro auch schon mal auf die Tastenkombination Strg+v gelegt, allerdings wenn das Makro nicht gestartet wird, dann kann die bedingte Formatierun der Zelle wieder überschrieben werden. Das soll eben nicht passieren.

Edit: Moment, du meinst ich schreibe den Code in den Button und beim klicken wird der ausgeführt?!
Dann hab ich es erst eben verstanden :D - I TRY!

Edit 2:
Wenn ich das Blatt schütze kann ich die Zellen nicht auswählen. Außer ich sperr die nicht. Dann kann ich sie aber auch bearbeiten. Also nicht der richtige Weg. Oder ich mach was falsch?!
 
Zuletzt bearbeitet: (Edit 2:)
palaber schrieb:
@diablobase: Genau so ist es gedacht.
Edit: Moment, du meinst ich schreibe den Code in den Button und beim klicken wird der ausgeführt?!
Dann hab ich es erst eben verstanden :D - I TRY!
Genau, am Anfang deiner Funktion hebst du den Blattschutz auf und am Ende der Funktion aktivierst du ihn wieder. Das will ich sehen wie da jemand etwas reinschreibt inzwischen ;)

palaber schrieb:
Edit 2:
Wenn ich das Blatt schütze kann ich die Zellen nicht auswählen. Außer ich sperr die nicht. Dann kann ich sie aber auch bearbeiten. Also nicht der richtige Weg. Oder ich mach was falsch?
Was meinst du mit "auswählen" genau?
Auch wenn der Blattschutz aktiviert ist kannst du Zellen anklicken, womit sie als "ausgewählt" zählen, du kannst nur nicht den Wert darin ändern oder in den "Bearbeitungsmodus" der Zelle wechseln.
Kannst du eventuell den entsprechenden Teil deiner Funktion mal posten?

Edit:
Ich habs eben mal ausprobiert, mit folgender minimalistischen Funktion klappt es bei mir problemlos:
Code:
Private Sub CommandButton1_Click()
    Call ActiveSheet.Unprotect("Passwort")
    Selection.Value = "5"
    Call ActiveSheet.Protect("Passwort")
End Sub
 
Zuletzt bearbeitet:
So, ich glaube ich erkläre es noch einmal in einer anderen Form. Hoffe das es dann verständlich wird.
Zunächst der Code des Button:
Code:
Private Sub CommandButton1_Click()
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

Im Anhang ist ein Ausschnitt der Tabelle, die bearbeitet werden soll. Die Zellen im rosa Rahmen sind gesperrt. Die im roten Rahmen können momentan bearbeitet werden.

Ich möchte nun aber das man die gewünschte Zelle, in die per Button ein neuer Wert eingefügt werden soll, anwählen kann. Dann "Button klick" und neuer Wert drin. Allerdings darf man ansonsten nichts in die Zelle schreiben können. Man darf keinen Text schreiben, keine Zahlen, nichts hinein kopieren. Es darf nur der Button die Zelle bearbeiten.
 

Anhänge

  • Schalterundco.JPG
    Schalterundco.JPG
    7,6 KB · Aufrufe: 96
Du hast wahrscheinlich beim Blattschutz die falschen Optionen aktiviert (siehe Anhang).
Aktiviere die ersten zwei Punkte "gesperrte Zellen auswählen" und "nicht gesperrte Zellen auswählen", dann müsste es funktionieren.
Für den Blattschutz via VBA schau dir die Hilfe an, da gibt es für alle diese Optionen die entsprechenden Parameter.
 

Anhänge

  • Blattschutz.png
    Blattschutz.png
    25,9 KB · Aufrufe: 118
So,
nach langem Urlaub melde ich mich mal wieder. Und zwar bin ich wieder an der Tabelle dran.
Das ich gesperrte Zellen auswählen kann funktioniert nun, danke diablobase - das ich selbst nich drauf gekommen bin :freak:

Jetzt fehlt nur noch, dass ich bei einer gesperrten Zelle das Makro trotzdem ausführen kann (den Button drück). Sonst aber nichts bearbeiten kann.
 
Hast du meinen Vorschlag weiter oben mit Call ActiveSheet.Unprotect und Call ActiveSheet.Protect schon probiert?
Wenn du den Blattschutz entfernst dann kannst du alles anstellen was du willst.
 
Ohh man, ich glaub ich bin noch im Urlaub...
Ich habe das gleiche versucht, mit anderen Code. Das hat nicht geklappt.
I try yours...

Also bei mir klappt es nicht, kommt immer nen Laufzeitfehler, Code wie folgt:
Code:
Private Sub CommandButton1_Click()
    Call ActiveSheet.Unprotect("test")
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    Call ActiveSheet.Protect("test")
End Sub
Fehlermeldung: Laufzeitfehler 1004 - Paste Special Methode konnte nicht ausgeführt werden.

Die Blattsperre ist danach aufgehoben. Aber die Zelle hat nicht den neuen Inhalt.
 
Zuletzt bearbeitet:
.PasteSpecial fügt Inhalt ein, wenn du vorher nichts in die Zwischenablage kopierst hat er natürlich auch nichts zum Einfügen und gibt einen Fehler.
Die Blattsperre ist dann eben aufgehoben weil er aufgrund des Fehlers die Funktion abbricht und dann das .Protect nicht mehr ausführt wodurch ja das Blatt wieder geschützt wird.

Edit:
D.h. du musst in deiner Funktion vorher noch was kopieren bevor du etwas einfügen kannst:
Code:
Private Sub CommandButton1_Click()
    Call ActiveSheet.Unprotect("test")
        REM irgendetwas musst du hier kopieren
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Call ActiveSheet.Protect("test")
End Sub
 
Zuletzt bearbeitet:
Ich hab aber einen Wert davor kopiert! Also sollte der auch eingefügt werden können.

Edit: Und was soll ich da dann kopieren? Es ist bei jedem Ausführen des Makros eine andere Zelle / Tabelle / Datei aus der kopiert werden soll. Und zwar mit den normalen Windows Funktionen.
 
Zuletzt bearbeitet:
Ah na das musst du auch sagen, meine Glaskugel ist leider in Reparatur :)
Kannst du den Teil des Codes auch bitte posten in dem du deinen Inhalt kopierst?
Eventuell wird dort nicht richtig kopiert, sodass .PasteSpecial keinen Inhalt mehr zum Einfügen hat.
 
Achso sorry, ich hab immer eine als Ersatz ;)
Na ich kopier nicht mit nem Makro. Die Mitarbeiter, die später die Tabelle bearbeitet werden von irgend einer Messung Werte bekommen. Wahrscheinlich auch eine Excel Datei. Aus dieser werden Werte kopiert und dann in die vorhanden Datei übertragen.

Kann es sein, dass durch das Aufheben des Blattschutzes der Inhalt, der kopiert werden soll verloren geht?
 
Ok ich habe es jetzt etwas durchprobiert, anscheinend wird wirklich bei einigen VBA-Operationen mit Worksheets etc. die Zwischenablage gelöscht.
Also musst du dir nur die Zwischenablage zwischenspeichern :evillol:

Code:
Private Sub CommandButton1_Click()
    Dim d As New DataObject
    Call d.GetFromClipboard
    
    Call ActiveSheet.Unprotect("test")
    Call d.PutInClipboard
    Call Selection.PasteSpecial(Paste:=xlPasteValues)
    Call ActiveSheet.Protect("test")
End Sub
 
Zurück
Oben