Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
448to452
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
448to452
448to452
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zellen nach eingabe von Werten automatisch sperren

Zellen nach eingabe von Werten automatisch sperren
08.07.2004 02:01:46
Werten
Hallo alle zusammen
Ich möchte meinen Kollegen eine BundesligaTippTabelle zur verfügung stellen. Das ist aber nicht das Problem. Mein Problem ist, daß ich nicht weis wie man Zellen in die gerade Werte eingegben wurden automatisch sperren kann. Ich stelle mir folgendes vor: Spieler 1 gibt seine Werte in seine Spalte ein und speichert die Datei und nun sind diese Zellen gesperrt. Wenn Spieler 2 nun seine Werte in seine Spalte eingibt sollen diese Zellen offen sein und nach einem weiteren speichern auch gesperrt sein. Er darf aber nicht die Werte von Spieler 1 ändern oder gar löschen können. Der normale Zellschutz über den Blattschutz hilft mir hier nicht weiter. Einen kleinen Teil der Tabelle (Spieltag 1) habe ich mal eingefügt, damit Ihr euch vielleicht ein besseres Bild machen könnt.

Die Datei https://www.herber.de/bbs/user/8220.xls wurde aus Datenschutzgründen gelöscht

Ich hoffe Ihr könnt mir helfen obwohl ich nicht mehr zu retten bin.
MfG ElGuano
AW: Zellen nach eingabe von Werten automatisch sperren
Werten
ein Zellschutz wird ja erst aktiv, wenn das Blatt auch geschützt wird.
Da alle Zellen grundsätzlich geschützt sind, solltest du erstmal den Schutz für alle Zellen über Format-Zellen-Eigenschaften entfernen und anschließend das Blatt schützen.
Dann - als Ansatz - bau folgendes Makro in "Diese Arbeitsmappe" ein, welches sich auf das 1. Tabellenblatt bezieht:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim zelle As Range
Sheets(1).Unprotect
For Each zelle In Sheets(1).UsedRange
If zelle.Value <> "" Then
zelle.Locked = True
Else
zelle.Locked = False
End If
Next
Sheets(1).Protect
End Sub

Vor dem Speichern werden alle Zellen mit Inhalt geschützt, bei allen leeren Zellen wird ein eventuell vorhandener Schutz wieder aufgehoben.
Anzeige
AW: Zellen nach eingabe von Werten automatisch sperren
08.07.2004 11:39:58
Werten
Hallo Silvio
kannst Du mir bitte erklären wie ich dieses Makro in meine Tabelle einfüge? Ich habe nämlich absolut keine Ahnung von Macros b.z.w. VBA Programmierung.
AW: Zellen sperren
Silvio
Servus, anbei eine Datei...https://www.herber.de/bbs/user/8258.xls
dort ist der VBA Code dort wo er sein soll. Unter Extras Makro Visual Basic öffnest Du den Editor. Dort suchst Du in der Datei nach "Diese Arbeitsmappe". Dort findest Du den Code den Du komplett kopierst, dann öffne Deine Datei und fügst den Code exakt an gleiche "Diese Arbeitsmappe" Stelle ein. Schließe den Editor, und speicher die Datei und schließe sie. Beim Erneuten Öffnen ist es aktiv, vorher gefüllte Zellen können nicht mehr geschrieben werden, es sei denn der Blattschutz wird aufgehoben. Viel Spaß beim Ausprobieren
Anzeige
Laufzeitfehler 10
André
Hallo Silvio,
Tschuldigung, wenn ich mich einmische aber das Thema ist auch
für mich höchst interessant.
Ich bekomme nach dem kopieren des Codes immer den Laufzeitfehler 10
mit der Meldung: "Die Locked-Eigenschaft des Range-Objektes kann nicht
festgelegt werden".
Als Fehler wird dann zelle.Locked = False angezeigt.
Wo ist der Fehler?
Ist es eigentlich auch möglich den Code als
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
laufen zu lassen?
Gruß und DankeAndréL.
AW: Laufzeitfehler 10
Silvio
Bei mir funktioniert das einwandfrei, der Code muß in dies Arbeitmappe, nicht in die Tabelle eingefügt werden! Es bezieht sich dann auf die erste Tabelle
Gruß aus Muc
Anzeige
AW: Laufzeitfehler 10
André
Tut mir leid, es will einfach nicht.
In Deiner Beispiel-Mappe geht es, aber wenn ich
den Code kopiere dann kommt der beschriebene Fehler.
Ich verstehe es nicht.
Den Code habe ich in "Diese Arbeitsmappe" eingefügt.
Dort gibt es ja auch die Option
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
die so glaube ich der
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
gleicht.( Das meinte ich vorhin)
Gruß
AndréL.
AW: Laufzeitfehler 10
08.07.2004 20:26:45
ElGuano
Hallo Silvio
Bei mir ist es das gleiche Problem wie bei Andrè. Wenn es Dich interessiert dann schick mir eine E-Mail an folgende Adresse: Ralfheinzb@AOL.com Dann sende ich Dir meine Tabelle mal rüber damit Du Dir ein Gesamtbild der Datei machen kannst. Vielleicht fällt Dir dann die Richtige Lösung ein. Wie gesagt in Deiner Tabelle funktioniert das genau so wie ich mir das vorstelle Also ist Deine arbeit nicht um sonst gewesen. Vieleicht liegt der fehler ja in meiner Datei.
Anzeige
AW: Laufzeitfehler 10
Silvio
Füge nur diesen Code dort ein...
achso, ganz wichtig dabei, die Zellen müßen vorher formatiert werden und zwar Schutz deaktivieren auf alle Zellen! Das wirds gewesen sein..
Gruß aus Muc
AW: Laufzeitfehler 10
ElGuano
Der Laufzeitfehler bleibt weiterhin bestehen
reicht dir diese sicherheit
ExceL
hi
https://www.herber.de/bbs/user/8261.xls
versuch die werte zu manipulieren
wenn du es nicht schaffst dann gebe ich dir die Beschreibung dazu
:-)
Gruß
Christian
AW: reicht dir diese sicherheit
André
Hallo Christian,
das ist ja eine ganz starke Lösung.
Wahrscheinlich mit "Before Close"
Gruß
AndréL.
PS. Ändern konnte ich das natürlich nicht !!
Anzeige
AW: reicht dir diese sicherheit
ElGuano
Hallo Christian
Willkommen im Club
Wenn das was Du da fabriziert hast auch in meiner 34 Spieltage Datei auch funktioniert, dann erkläre ich Dich zum Sieger, wenn das aber nicht funktioniert dann bist Du dazu verdonnert WEITER zu Tüffteln. Ich hoffe das Dir das klar ist.
Also im Grunde ist es das was ich suche. Das funktioniert in Silvios Datei auch, nur eben nicht in meiner Tabelle.
Machen wirs kurz. Sag mir wie es geht. Ich brenne auf die Antwort.
Gruß
ElGuano
AW: reicht dir diese sicherheit
Silvio
Vielleicht hat der ElGuano für mich auch ne Lösung parat? Habe da ne offne Frage, suche eifach nach meinem Namen Stundenabrechnung.... Wird für Dich doch bestimmt ein Kunststück sein :=)
Grüße aus Muc
Anzeige
34 :-) ja geht ist nur eine kleine Anpassung
ExceL
so
das einzige was man wissen sollte ist das PW
Pw ist excel
bei dem Blattschutz und in der VBE
den Code habe ich einfach von Hajo sonst hätte es länger gedauert und ein wenig umgeschrieben
für 34 tabellenblätter braucht man nur ne kleine schleife einbauen
im Bereich wo ich einfach abfrage ob die zellen beschrieben sind
dann locked
und freie zellen (leere) unlocked
bin gerade beim dritten Bier *g*
und werde für heute meinen laden schließen
schönen Abend noch
Christian
AW: 34 :-) ja geht ist nur eine kleine Anpassung
Silvio
na dann Prost
Userbild
Anzeige
Danke__ot
ExceL
AW: 34 :-) ja geht ist nur eine kleine Anpassung
ElGuano
Hallo Christian
Tut mir Leid das ich mich erst jetzt melde. Hatte gestern Abend einen komplett absturz an meinem PC.
Ich würde Dir gerne sagen das alles gut gelaufen ist, ist es aber leider nicht.
Ich bekomme den Laufzeitfehler '9' Index außerhalb des gültigen Bereichs.
Wenn ich dann auf Debuggen gehe zeigt er mir folgende Zeile in gelb an
Sheets("Tabelle1") .Visible = True
Wie kann ich diesen Fehler beseitigen? Wenn es Dich interessiert dann sende mir eine E-Mail an folgende Adresse Ralfheinzb@AOL.com dann kann ich Dir meine Datei ja mal rüberschicken, vielleicht kannst Du Dir dann ein Bild machen wie die gesamte Datei aussieht.
MfG
ElGuano
Anzeige
Leider kein Erfolg
09.07.2004 23:54:39
ElGuano
Hallo alle zusammen
Besonders Silvio, Christian und Andrè
Erstmal muß ich mich bei Euch bedanken das Ihr Eure Zeit für dieses Problem geopfert habt. Leider funktionieren Eure Lösungen nur in Euren Tabellen. Ich hatte schon gedacht eine Unstimmigkeit in den Tabellen gefunden zu haben, aber das hat sich auch nicht als der Fehler erwiesen. Ich bitte Euch es noch einmal zu versuchen. Ich biete Euch an, Euch die Datei zu Mailen, wenn Ihr der Meinung seid das Euch (b.z.w. mir) das weiterhelfen kann. Leider ist die Datei 2,8 MB groß sodas ich sie nicht komplett ins Forum setzen konnte. Ich würde mich sehr freuen, denn ich komme alleine nicht zur Lösung, die mir aber sehr wichtig ist.
Meine E-Mail Adresse lautet
Ralfheinzb@AOL.com
Mit freundlichen Grüßen und vielen Dank nochmal
ElGuano
Anzeige
Tabelle1 einfügen
Martin
Hallo,
das Problem ist, das Du in Deiner Datei keine Tabelle mit dem Namen "Tabelle1" hast. Die dient Christian dazu, Angreifer abzuwehren, die beim laden der Datei die Makros deaktivieren. Da alle relevanten Tabellen mit xlVeryHidden unsichtbar gemacht wurden, sieht der Angreifer nur noch die belanglose Tabelle1.
Lange Rede kurzer Sinn: Füge einfach eine leere Tabelle mit dem Namen "Tabelle1" in Deine Datei ein, dann müßte der Code funktionieren.
Gruß
Martin Beck
AW: Tabelle1 einfügen
ElGuano
Hallo Martin
Der Tipp war gut. Jetzt funktioniert das mit dem Spieltag1, aber bei Spieltag2 nicht mehr. Hast du dafür auch noch eine Lösung? Insgesamt bestehen 37 Tabellenblätter davon sind 34 Spieltage für die ich diese Lösung benötige.
MfG Ralf
AW: Tabelle1 einfügen
ElGuano
Hallo Martin
Ich bins nochmal
Hatte nur vergessen die Frage offen zu halten.
Poste mal den Code (oT)
Martin
AW: Poste mal den Code (oT)
ElGuano
Hier ist der Code. Ich hoffe das hilft Dir (Mir)
Option Explicit
Dim InI As Integer
Dim ByS As Boolean

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Mldg As Byte
If ActiveWorkbook.Saved Then
Sheets("Tabelle1").Visible = True
For InI = Sheets.Count To 1 Step -1
If Sheets(InI).Name <> "Tabelle1" Then Sheets(InI).Visible = xlVeryHidden
Next InI
ByS = True
ThisWorkbook.Save
Else
If ByS = True Then Exit Sub
Mldg = MsgBox(" Sollen die Veränderungen gespeichertg werden ?", _
vbYesNo + vbQuestion, "Speicher abfrage ?", "", 0)
If Mldg = 6 Then
Application.ScreenUpdating = False
Sheets("Tabelle1").Visible = True
For InI = Sheets.Count To 1 Step -1
If Sheets(InI).Name <> "Tabelle1" Then Sheets(InI).Visible = xlVeryHidden
Next InI
ByS = True
ThisWorkbook.Save
Application.ScreenUpdating = True
Else
ByS = True
ThisWorkbook.Close False
End If
End If
End Sub


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If ByS = False Then
Cancel = True
MsgBox "Datei kann nur beim schließen gespeichert werden"
End If
End Sub


Private Sub Workbook_Open()
Sheets("Spieltag 1").Unprotect ("excel")
Application.ScreenUpdating = False
For InI = Sheets.Count To 1 Step -1
Sheets(InI).Visible = True
Next InI
Sheets("Tabelle1").Visible = False
ActiveWorkbook.Saved = True
'On Error Resume Next
Sheets("Spieltag 1").Cells.SpecialCells(xlCellTypeConstants, 23).Locked = True
Sheets("Spieltag 1").Cells.SpecialCells(xlCellTypeFormulas, 23).Locked = True
Sheets("Spieltag 1").Cells.SpecialCells(xlCellTypeBlanks).Locked = False
Application.ScreenUpdating = True
Sheets("Spieltag 1").Protect ("excel")
End Sub

AW: Zellen nach eingabe von Werten automatisch sperren
Werten
Hallo zusammen
Ich möchte mich bei allen bedanken die mir mit Rat und Tat zur Seite standen und mein Problem gelöst haben. Insbesonder bedanke ich mich bei AndrèL, Silvio, Excel und Martin Beck. Damit alle etwas von der Lösung haben, stelle ich hier den Code ein, der von Excel erstellt von Martin Beck den entscheidenden Hinweisgegeben und von Andrè vollendet wurde. Meine wenigkeit hat alles nur getestet und mich in den meisten Fällen beklagen müssen das es immer noch nicht läuft. Sollte ich dabei jemandem zu nahe getreten sein, entschuldige ich mich hiermit.
Der Lösungs Code lautet wie folgt
Dim InI As Integer
Dim ByS As Boolean

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Mldg As Byte
If ActiveWorkbook.Saved Then
Sheets("Tabelle1").Visible = True
For InI = Sheets.Count To 1 Step -1
If Sheets(InI).Name <> "Tabelle1" Then Sheets(InI).Visible = xlVeryHidden
Next InI
ByS = True
ThisWorkbook.Save
Else
If ByS = True Then Exit Sub
Mldg = MsgBox(" Sollen die Veränderungen gespeichert werden ?", _
vbYesNo + vbQuestion, "Speicher abfrage ?", "", 0)
If Mldg = 6 Then
Application.ScreenUpdating = False
Sheets("Tabelle1").Visible = True
For InI = Sheets.Count To 1 Step -1
If Sheets(InI).Name <> "Tabelle1" Then Sheets(InI).Visible = xlVeryHidden
Next InI
ByS = True
ThisWorkbook.Save
Application.ScreenUpdating = True
Else
ByS = True
ThisWorkbook.Close False
End If
End If
End Sub


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If ByS = False Then
Cancel = True
MsgBox "Datei kann nur beim schließen gespeichert werden"
End If
End Sub


Private Sub Workbook_Open()
Application.ScreenUpdating = False
For InI = 1 To Sheets.Count 'To 1 Step -1
Sheets(InI).Visible = True
Next InI
Sheets("Tabelle1").Visible = False
For sh = 1 To Sheets.Count
If Left(Sheets(sh).Name, 9) = "Spieltag " Then
Sp = Sp + 1
Sheets("Spieltag " & Sp).Unprotect ("Excel")
Sheets("Spieltag " & Sp).Cells.SpecialCells(xlCellTypeConstants, 23).Locked = True
Sheets("Spieltag " & Sp).Cells.SpecialCells(xlCellTypeFormulas, 23).Locked = True
Sheets("Spieltag " & Sp).Cells.SpecialCells(xlCellTypeBlanks).Locked = False
Sheets("Spieltag " & Sp).Protect ("Excel")
End If
Next sh
ActiveWorkbook.Saved = True
Application.ScreenUpdating = True
End Sub

AW: Zellen nach eingabe von Werten automatisch sperren
Werten
hi
auch sorry war im Wochenende
aber wie ich gesagt habe nur ne kleine Schleife einbauen :-)
Gruß
Christian

172 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige