Hi Conrad,
Wie kann man in Excel (2003*) überprüfen ob eine Zelle einen berechneten Wert oder einen eingegebenen enthält?
Es gibt da diverse IstDiedUndDas-Funktionen, aber eine Funktion IstFormel finde ich nicht. Auch der umgekehrte Werte „IstWert(X) = Falsch“ funzt nicht, denn eine Zelle die z.B. ‚9‘ anzeigt wird als Wert erkannt, egal ob die 9 eingegeben oder durch eine Formel errechnet wurde.
Am Rande: Du kannst Dir eine solche Formel selbst basteln. Aus dem Gedächtnis (ungetestet, evtl. fehlerhaft): in ein Modul eines Tabellenblattes gibst Du folgenden Einzeiler ein
Function IstFormel(target as Range) as Boolean 'MH 01.09.11
If target.Cells.Count \> 1 Then Exit Function
IstFormel = target.HasFormula
End Function 'IstFormel
Hintergrund: Ich will verhindern das Formeln versehentlich überschrieben werden, kann die Felder aber auch nicht sperren, weil in die Tabellen ständig neue Zeilen eingefügt werden (Die Formel-Zellen sollen dann kopiert werden). Über Bedingte Formatierung oder Daten Gültigkeit wollte ich eine Warnung bzw. Sperre einrichten wenn in einem Feld, in dem eine Formel stehen soll direkt ein Wert eingeben wird. Finde da aber keine Lösung.
Verstehe ich recht: Du hast einen Tabelle mit Formeln und Werten. Du und/oder andere Leute geben immer 'mal wieder in diese Tabelle etwas ein. Du willst sicher sein, daß dabei nicht die mühevoll erarbeiteten Formeln überschrieben werden. Ansonsten passiert in der Tabelle wenig nix.
Warum um Gottes willen nimmst Du dazu nicht die Datenmaske? Die geht so:
-
Die Eingabetabelle wird markiert und bekommt den reservierten Namen Datenbank oder Database (es geht auch ohne diesen Schritt, aber dann kann eine Abfrage kommen: „Excel hat erkannt…“). Wenn der Name aber besteht, ist schnurz, wo im Arbeitsblatt der Cursor steht, die Maske wendet die Eingaben n u r auf die so benannte Tabelle an.
-
Wählt man nun Daten > Maske, erscheint die Datenmaske, ein Eingabedialog, den Excel ad hoc aus dem Ist-Zustand der Tabelle strickt: Die Werte in der ersten Tabellenzeile sind die Namen der Eingabefelder, durch die weiteren Tabellenzeilen („Datensätze“) kann man in diesem Eingabedialog mit den Cursortasten blättern. Das geniale dabei ist: Formeln können keinesfalls überschrieben werden, sie sind stets ausgegraut.
-
Schickst Du nun einen Datensatz aus der Datenmaske mit OK ab, passieren nur sehr komfortable Dinge: obwohl die Datenmaske noch offen ist, schreibt Excel den neuen Datensatz als neue Tabellenzeile. Dabei erweitert es nicht nur selbständig den Bereich des Namens Datenbank, sondern kopiert auch a l l e Formate und vor allem a l l e Formeln von der vorletzten in die neue Tabellenzeile.
-
Jeden Datensatz schickst Du mit OK ab. In der Datenmaske kannst Du die Datensätze auch editieren und löschen, wobei komfortablerweise der Name Datenbank angepaßt wird. Die Datenmaske beendest Du mit Esc und brauchst nur zu speichern.
-
Sicherer und komfortabler geht’s für diese einfache Sache nicht. Und zur Massenerfassung ist das Ding auch noch geeignet: 5/9 wird zu 05.09.2011, 5/9/6 wird (je nach Optionseinstellung) zu 05.09.2006 oder 05.09.1906, 16: wird zu 16:00, 16:5 wird zu 16:05.
-
Die Datenmaske ruft man unter VBA mit einem Befehl auf:
ActiveSheet.Dataform
Umrahmst Du diesen Befehl noch mit Code für Dokumentschutz aufheben/setzen, hast Du ein zwar auf niedriger Ebene, aber sehr alltagsgeeignet geschützten Datenerfassungsmechanismus.
HTH.
Markus
______________________
Ich wundere mich immer wieder, wie wenig populär diese Datenmaske ist. Da sie arbeitsblattbezogen ist, kann man in jeder Arbeitsmappe ganz viele Datenmasken haben. War ich am Arbeitsplatz gezwungen, Daten in viele unterschiedliche Excel-Tabellen einzugeben (Access war bei uns gesperrt, zu unsicher; Daten waren in Branchensoftware; meine Tabellen dienten nur der Strukturierung, der Eingabevorbereitung und der Auswertung), habe ich regelrecht in Datenmasken gebadet.
*) Sollte sich mein Problem in einer höheren Version lösen lassen wäre das ein Grund für ein Upgrade, daher auch dann bitte Hinweis.
Die Datenmaske gibt’s schon mindestens seit Excel97. Machst Du dann auch einen Downgrade?
)