08.11.2015, 20:59 (Dieser Beitrag wurde zuletzt bearbeitet: 08.11.2015, 21:00 von Daniel Albert.)
Hallo,
folgendes Problem mal wieder mit meiner Essenliste. Es wird durch ein Makro der neue Monat über eine Vorlage erstellt und alle Formeln eingefügt. Nun möchte ich in dem ersten Tabellenbereich des Monats Essenliste nachdem die Daten durch das einfügen gesetzt wurden sind des Tabellenschutz aktivieren was schon hinterlegt ist aber die Zellen welche in dem Bereich A5 bis A64 frei sind den Zellenschutz entfernen. Somit haben die Mitarbeiter die Möglichkeit Kinder die im Monat dazu gekommen sind nachträglich einzutragen.
Ich habe zwar den Befehl If Target <> "" Then Target.Locked = False gefunden aber bekomme diesen nicht zum laufen.
Über einen Code soll geprüft werden welche Zellen in A5 bis A64 leer sind und diese Zellen nicht schützen damit nach aktivieren des Tabellenschutz diese Zellen noch beschrieben werden können.
08.11.2015, 23:33 (Dieser Beitrag wurde zuletzt bearbeitet: 08.11.2015, 23:33 von Rabe.)
Hi Daniel,
(08.11.2015, 20:59)Daniel Albert schrieb: Ich habe zwar den Befehl If Target <> "" Then Target.Locked = False gefunden aber bekomme diesen nicht zum laufen.
wenn du die leeren Zellen nicht schützen/sperren willst, müßte das dann nicht anders rum lauten:
If Target = "" Then Target.Locked = False
Folgende(r) 1 Nutzer sagt Danke an Rabe für diesen Beitrag:1 Nutzer sagt Danke an Rabe für diesen Beitrag 28 • Daniel Albert
09.11.2015, 20:30 (Dieser Beitrag wurde zuletzt bearbeitet: 09.11.2015, 20:42 von Daniel Albert.)
Hallo Ralf,
die Formel bringt einen Fehler. Ich habe den Code in das marko eingebaut aber es geht nicht. Dachte erst das ich den Zellbereich Markieren muss aber leider auch kein Erfolg.
Code:
.Range("A5:A64").Select
If Target = "" Then Target.Locked = False
Was ist falsch. ? Also es sollen alle leeren Zellen in A5 bis A64 der schreibschutz entfernt werden.
Code:
Sub SetzeFormeln()
Dim ws As Worksheet
Set ws = ActiveSheet
With ws
.Unprotect
' .Range("A5:A5").FormulaArray = "=IFERROR(INDEX('aktive Mitglieder'!$C$5:$C$64,SMALL(IF('aktive Mitglieder'!$I$5:$I$64=""A"",ROW($1:$60)),ROW(A1))),"""")"
' .Range("A5:A64").FillDown
09.11.2015, 21:14 (Dieser Beitrag wurde zuletzt bearbeitet: 09.11.2015, 21:26 von RPP63.)
Hi!
Ich heiße zwar auch Ralf, aber da meine Antwort mit Missachtung gestraft wird, verabschiede ich mich aus der (virtuellen, nicht wertend gemeint) Kindergartengruppe.
Nur noch so viel:
Du brauchst das Target nicht auszuwerten, sondern musst den Schutz aufheben, die SpecialCells des Range "umpolen" und den Schutz wieder setzen.
(wie auch exakt so unter #2 beschrieben)
Gruß und nichts für ungut,
Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
stimmt ich habe gestern vergessen darauf zu Antworten. Ich habe deine Formel ausprobiert aber bekomme schon beim hinterlegen in dem Modul eine Fehlermeldung:
Gehe ich mit dem Mauszeiger über CellTypBlanks steht dort 4 Zeilen obwohl es 6 wären
mal einen Auszug aus der OH zu der SpecialCells
Zitat:Range.SpecialCells-Methode
Gibt ein Range-Objekt zurück, das alle Zellen darstellt, die mit dem angegebenen Wert übereinstimmen.
Syntax
Ausdruck.SpecialCells(Type, Value)
Ausdruck Eine Variable, die ein Range-Objekt darstellt.
Parameter
Name Erforderlich/Optional Datentyp Beschreibung
Typ Erforderlich XlCellType Die einzuschließenden Zellen.
Wert Optional Variant Wenn Type auf xlCellTypeConstants oder auf xlCellTypeFormulas festgelegt wurde, können Sie mit diesem Argument die Typen von Zellen bestimmen, die im Ergebnis eingeschlossen werden sollen. Diese Werte können addiert werden, wenn mehrere Typen zurückgegeben werden sollen. Standardmäßig werden unabhängig vom Typ alle Konstanten oder Formeln ausgewählt.
Rückgabewert
Range
Anmerkungen
XlCellType-Konstanten Wert
xlCellTypeAllFormatConditions. Zellen mit beliebigem Format -4172
xlCellTypeAllValidation. Zellen mit Gültigkeitskriterien -4174
xlCellTypeBlanks. Leere Zellen 4
xlCellTypeComments. Zellen mit Kommentaren -4144
xlCellTypeConstants. Zellen mit Konstanten 2
xlCellTypeFormulas. Zellen mit Formeln -4123
xlCellTypeLastCell. Die letzte Zelle im verwendeten Bereich 11
xlCellTypeSameFormatConditions. Zellen mit gleichem Format -4173
xlCellTypeSameValidation. Zellen mit gleichen Gültigkeitskriterien -4175
xlCellTypeVisible. Alle sichtbaren Zellen 12
4 wird dir deshalb angezeigt, weil es sich um den Konstantenwert handelt. Deine Zellen sind nicht leer, weil sie Formeln enthalten. Und daher dürfte auch die Fehlermeldung kommen.
Moin!
Aber wie verträgt sich dieses aus dem Eröffnungspost:
Zitat:Über einen Code soll geprüft werden welche Zellen in A5 bis A64 leer sind und diese Zellen nicht schützen damit nach aktivieren des Tabellenschutz diese Zellen noch beschriebenwerden können.
mit der Tatsache, dass dort Formeln stehen?
Denn wenn Du sie beschreibst, sind die Formeln natürlich futsch.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28 • Daniel Albert
Sub ErsetzeFormeln(Optional ws As Worksheet)
Dim rngZelle As Range
If ws Is Nothing Then Set ws = ActiveSheet
With ws
With .Range("A5:A64"): .Value = .Value: End With
With .Range("A72:A131"): .Value = .Value: End With
With .Range("A137:A198"): .Value = .Value: End With
With .Range("A206:A265"): .Value = .Value: End With
With .Range("A273:A332"): .Value = .Value: End With
With .Range("A338:A397"): .Value = .Value: End With
With .Range("A403:A462"): .Value = .Value: End With
With .Range("A468:A527"): .Value = .Value: End With
With .Range("A533:A592"): .Value = .Value: End With
With .Range("A598:A657"): .Value = .Value: End With
For Each rngZelle In .Range("A5:A64")
rngZelle.Locked = (rngZelle.Value <> "0")
Next rngZelle
.Protect
End With
End Sub
Bei ErsetzeFormeln eingesetzt. Zudem habe ich gesehen das in den leeren Zellen eine 0 steht.
Jetzt geht es, großen Danke an alle die mitgewirkt haben.