Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Excel 2016 VBA für Profis

Worksheet_SelectionChange

Testen Sie unsere 2021 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Mit den Ereignissen des Worksheet-Objekts lassen sich für die jeweilige Tabelle diverse Benutzeraktionen abfangen und mit eigener Programmierung belegen.

Transkript

Dieses Konzept, dass sich ein Objekt und sein Ereignis automatisiert aufrufen lassen, gibt es noch eine Ebene tiefer. In dieser Arbeitsmappe, "ThisWorkbook" sozusagen, das repräsentiert ja die gesamte Datei, kann ich mich auf untergeordnete Elemente, nämlich Blätter, beziehen. Und dasselbe gibt's auch hier, z. B. für die Tabelle 2, genauer gesagt für alle diese Tabellenklassenmodule. Wenn ich da jetzt doppelt reinklicke, da beziehe ich mich nicht auf Workbook, sondern eine Ebene tiefer auf Worksheet. Das Standardereignis von Worksheet ist "SelectionChange". D. h. eine Auswahl oder ein Wechsel der Auswahl in einer Zelle. Also das Worksheet-Objekt überwacht die ihm untergeordnete Selection, nämlich Zellauswahl. Und da das "Target" hier schon vernünftig "As Range" deklariert ist, kann ich direkt schreiben "MsgBox "Zelle: " & target.AddressLocal" Einmal gespeichert, "Debuggen" "Kompilieren"-Check und jetzt wechsle ich in die Tabelle, und Achtung, nur in die Tabelle 2, alle anderen können das nicht, das ist nur in der Tabelle 2, und ich kann jetzt eine beliebige Zelle anklicken und kriege die Adresse genannt. Das ist natürlich nicht nur langweilig, sondern auch nervig, wenn jeder Klickwechsel hier so eine Messagebox auslöst, aber ich habe hier schon ein kleines Beispiel hingeschrieben, das ist sehr praktisch, wenn Sie was prüfen wollen. Sei das Ganze hier ein Formular, was der Benutzer ausfüllen soll. Er muss erst den Vornamen eintragen, und dann den Nachnamen. Und mit dem Nachnamen-Klick prüfe ich, ob er den Vornamen schon eingetragen hat. Ich werde jetzt hier nicht klicken, ich habe es deswegen schon ausgefüllt, weil das furchtbar ist beim Testen, und mit Alt+F11 hier die Messagebox erstmal deaktivieren. Ich möchte also prüfen, ob jemand in die Zelle, und das ist für den Nachnamen, nämlich E7, geklickt hat. Also "if" von dieser "Target" der übergebenen Zelle das "AddressLocal", ob das zufällig "$E$7" ist. Das ist die Zelle, wo ich den Nachnamen eintragen soll. Dann passiert was. Also "End if". Und dann prüfe ich, ob der Vorname vielleicht nicht ausgefüllt ist. Das kann ich entsprechend, es steht ja nicht im "Target". "Target" ist die Zelle, die ich habe, sagen wir von "ActiveSheet.range". "ActiveSheet" ist wieder so ein unklar als "Object" deklariertes, damit muss ich raten, dass es eine "range"-Auflistung gibt, und ob dann vielleicht "$E$6" und dessen "value", allerdings, natürlich Klammer zu und Punkt, ob dessen "value" leer ist. Dann hat der seinen Vornamen nicht ausgefüllt, und dann kann ich die Messagebox erscheinen lassen. Also "MsgBox "Bitte zuerst Vornamen ausfüllen."" Und dann machen wir ruhig einen "vbExclamation". Das ganze gespeichert, Kompiliercheck. Dann müssen wir hoffen, dass E7 und E6 richtig sind, das werde ich gleich noch verbessern. Aber mit Alt+F11 kann ich jetzt hier irgendwo hinklicken, keine Messagebox weit und breit. Ich kann auch in den Vornamen klicken, aber wenn ich in den Nachnamen klicke, dann gibt's diese Meldung. Wenn ich den Vornamen ausgefüllt habe und jetzt in den Nachnamen klicke, ist alles ok. Ich werde ihn wieder rausnehmen, damit die Meldung auch gleich erscheint. Alles andere darf ich anklicken, nur nicht den Nachnamen. Aber die Schreibweise mit den echten Zelladressen ist natürlich furchtbar. Sobald ich jetzt hier eine Zeile dazwischenfüge oder lösche, würde das ganze Konzept zusammenbrechen. Also anständigerweise macht man Bereichsnamen, hier, der Bereichsname, den ich auch hier vergeben kann. "Vorname", mit Return bestätigen, und hier der Bereichsname "Nachname". Und die werde ich jetzt im Code abfragen. Also nicht die Zelladresse, sowas wie hier, sondern ich werde prüfen, ob "AddressLocal" identisch ist mit der lokalen Adresse von, da muss man jetzt tatsächlich "ThisWorkbook" davorschreiben. Die "Names", Achtung, Pluralauflistung, Klammer auf, darin gibt es eine, die "Nachname" heißt und die hat ein "RefersToRange", und der kennt jetzt ein "AddressLocal". Sieht aus wie eine Verschlechterung, weil ich hier viel mehr schreiben musste als "$E$7", aber dafür werden Sie gleich sehen, ist das flexibler. Ich frage einfach, ob sich der Target zufällig da befindet, wo sich auch der Nachname befindet. Und entsprechend für das andere frage ich jetzt nicht, ob das zufällig E6 ist, sondern ich frage auch die "Names"-Auflistung ab. Ich nehm's mal alles weg, auch wenn ein Teil davon wieder auftauchen wird. Ob "ThisWorkbook.Names" und jetzt der "Vorname", und ob dessen "RefersToRange.Value", "Value" bleibt erhalten, ob das leer ist. Dann kann ich also hier, wenn man bisschen Übung hat, sofort lesen, ob der Nachname angeklickt ist, ob der Vorname ausgefüllt ist, speichern, Kompiliercheck, und jetzt kucken wir, ob es immer noch funktioniert. Ich kann irgendwo klicken, aber wenn ich in den Nachnamen klicke, kommt die Meldung. Und zwar auch dann, wenn ich jetzt hingehe und sage Strg + -, die beiden Zeilen fliegen raus. Jetzt hat sich nämlich soeben die Zelladresse geändert. Und trotzdem kann ich hier reinklicken und die Meldung kommt. Und trotzdem wird erkannt, wenn ich den jetzt ausfülle, dass beim Reinklicken hier keine Meldung mehr kommen muss. Also deswegen ein bisschen mehr Mühe mit den Bereichsnamen lohnt sich auf jeden Fall. Das liest sich hier etwas komplizierter am Anfang, aber dafür deutlicher hier, der Nachname, seine Adresse ist identisch mit dem Target und der Vorname, sein Wert ist leer. Damit sind Sie sehr flexibel und können die Tabelle umstrukturieren, ohne, dass Sie sich Ärger einhandeln. Aber grundsätzlich ging es ja darum, dafür zu sorgen, dass in einem automatisch aufgerufenen Ereignis dieser Tabelle, nur dieser. Wenn sie das für Tabelle 3 haben wollen, müssen Sie dort Worksheet "SelectionChange" aufrufen. Also dass in dieser Tabelle geprüft werden kann, beim Klick auf eine bestimmte Zelle, ob irgendwas anderes erledigt ist.

Excel 2016 VBA für Profis

Nutzen Sie die Möglichkeiten der Programmiersprache VBA in Excel 2016, um eigene Dialoge zu erstellen, auf andere Arbeitsmappen zuzugreifen und wichtige Funktionen einzusetzen.

5 Std. 52 min (55 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:25.01.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!