von Bitsqueezer » 24. Nov 2020, 10:24
Hallo Sonja,
die Klammerung hat nichts damit zu tun, ob auf das Feld oder den Controlnamen zugegriffen wird, die ist nur dazu da, um schlechte Objektnamen trotzdem verwenden zu können. "Geraet" ist ein problemloser Name, hier braucht es keine Klammern.
Ob auf den Control- oder Feldnamen zugegriffen wird, entscheidet bei Namensgleichheit VBA selbst. Dazu gibt es den Namespace, in dem alle Namen landen, meist in der Reihenfolge der Definition. Wird dann kein spezieller Kontext angegeben, wird der erste passende Name verwendet.
Daher ein Recordset etwa immer als "DAO.Recordset" oder "ADODB.Recordset" deklarieren, dann ist der Kontext definiert und VBA weiß genau, welches Objekt zu verwenden ist.
Was bei Formularen und Feld-/Controlnamen leider nicht so einfach ist, da beide über den "Me"-Kontext aufgerufen werden können. Genau könntest Du es mit "Me.Controls("Geraet")" definieren, aber dann kann der Compiler das Objekt nicht erkennen und Du erhältst erst zur Laufzeit Fehlermeldungen, wenn Du "Gereat" statt "Geraet" geschrieben hast.
Daher, wie Ulrich schon schrieb, Namen immer eindeutig halten. Ich persönlich verwende immer den Präfix "ctl" für alle Controls, die an ein Feld gebunden sind. Das macht es mit IntelliSense auch schön einfach, die Liste aller gebundenen Controls zu erhalten und sie von den Feldnamen abzugrenzen oder von allgemeinen Controls wie einer ungebundenen Textbox etc.
Was das Großschreibungsproblem angeht: Warum sollte man das machen? Die Zeiten, da alle Texte in datenverarbeitenden Maschinen nur mit Großschreibung arbeiten konnten, sind lange vorbei und es ist furchtbar, Texte mit durchgehender Großschreibung zu lesen. Wir haben heute die Möglichkeit, Texte problemlos in auch unterschiedlicher Groß-/Kleinschreibung als gleich zu identifizieren (was der Standard bei Textvergleichen in VBA und auch in den meisten Datenbanken ist) und daher zuzulassen. Will man eine einheitliche Schreibweise in Stammdaten gewährleisten, dann verwendet man entsprechende Lookup-Tabellen und läßt den Benutzer nur die Einträge daraus wählen, statt einen Freitext einzugeben.
Um Dein Beispiel aufzugreifen: "Hammer", "Zange", "Schere" wären die Stammdaten für eine Kombobox, während "Papier" und "Blech" zusätzliche Eigenschaften für das Produkt "Schere" wären, denn eine Schere könnte theoretisch für beides verwendet werden (auch wenn das jetzt ein schlechtes Beispiel ist, weil man in der Praxis wohl ein Produkt "Blechschere" und ein Produkt "Haushaltsschere" o.Ä. erstellen würde).
Diese Grunddaten, Stammdaten, werden einmal sauber definiert in der richtigen Schreibweise, der Benutzer wählt sie dann nur noch aus, dann gibt es keine Probleme mit der Schreibweise.
Gruß
Christian