Excel 2016 VBA Grundkurs

Selection und ActiveCell

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Mit den Objekten ActiveCell und Selection erfahren Sie, welchen Bereich der Benutzer markiert hat und eventuell durch Ihr Makro verändert haben möchte.

Transkript

Wenn Sie sich aufgezeichneten VBA-Code angucken, dann werden Sie ganz oft die Befehle "ActiveCell" oder "Selection" finden. Und das ist eigentlich schade, denn die sind gar nicht so wichtig um nicht zu sagen, die stören sogar im guten Code. Die braucht man einmal vorneweg, wenn man rauskriegen will, was der Benutzer markiert hat, wenn das für Ihren Code wichtig ist, aber ansonsten sollten sie nicht auftauchen. Meistens steht da aber sowas wie - ich nenne das mal einfach in der Prozedur schon "Schlecht" - Zum Beispiel in der "Tabelle" irgendwas, ".Cells", oder meistens wird "Range" aufgezeichnet, und dann steht da "A1.Select" und in der nächsten Zeile steht "Selection", dann nennen wir es mal einfach "Delete", oder so einen Befehl. Und das ist völliger Quatsch in einer Zeile in einem VBA-Code etwas zu markieren um in der nächsten Zeile etwas damit zu machen. Anständigerweise schreibt man das so. Nicht erst "Select" und anschließend "Selection". Das entsteht nur durchs Aufzeichnen. Diese Art der Programmierung ist also schlecht, deswegen sollte "Selection" gar nicht so oft auftauchen. Aber trotzdem taucht es natürlich auf, und deswegen will ich Ihnen ein bisschen zeigen, was man damit machen kann. Nehmen wir also erstmal einfach die Frage: Wo hat mein Benutzer eigentlich gerade reingeklickt? Also "Sub ZeigeMarkierteZelle" Und mit "debug.Print" will ich die Adresse anzeigen von nämlich "ActiveCell". Und dann werden Sie feststellen, es gibt zwei Adressen. Erstens, ganz wichtig, die amerikanische Schreibweise, "address" mit Doppel-"d". Und wenn Sie dieses "address" nehmen, dann kriegen Sie auch die amerikanische Information. In der "A1"-Schreibweise, die die meisten eingeschaltet haben, ist es auch noch "A1". Aber Sie kennen vielleicht auch die "Z1S1"-Schreibweise, wo also Zeilen und Spalten Ziffern haben. Wo also oben in den Spaltenköpfen nicht die Buchstaben stehen, sondern ebenfalls Ziffern. Das heißt im Deutschen "Z1S1"-Schreibweise, weil so auch die Darstellung in der Formel ist. Im Amerikanischen ist das aber eine Row1-Column1-Darstellung, die also mit "R1C1", "R1C1" darstellt. Und das ist überraschend, wenn Ihr Code jetzt diesen String - das ist nämlich eine Zeichenkette, die dann da zurückkommt - bekommt, und Sie suchen jetzt das "Z" und das "S" da drin. Also wenn Sie es wirklich immer deutsch haben wollen, auch in der "Z1S1"-Schreibweise dann sollten Sie sich angewöhnen, immer "Addresslocal" zu nehmen. Für die "A1"-Schreibweise ist das unerheblich. Und das war's auch schon. Wir können also hier schon speichern, mit F5 einmal ausführen lassen. Offensichtlich habe ich in die Zelle "C5" geklickt. Das können wir mal hier prüfen: Da ist die Zelle "C5". Das Blatt dazu erfahre ich nicht. Das ist implizit in "ActiveCell" enthalten. Sie können beispielsweise ActiveCell nach seinem Parent, nach seinem Elternobjekt fragen. Oder, noch viel einfacher, Sie erfragen einfach "ActiveSheet.Name". Das ist so ein WischiWaschi-Objekt, so ein Unentschiedenes, welches seine Eigenschaften nicht rausrückt. Denn es könnte ja ein Worksheet oder ein Diagramm sein, deswegen sagt es lieber gar nichts. Und jetzt würden Sie mit F5 auch noch erfahren, in welchem Blatt. Das ist normalerwiese gar nicht nötig, denn das Objekt ActiveCell kann diese Informationen alle verarbeiten, und wenn Sie mit ActiveCell irgendwas machen, "Interior.Colour", Farbe zu ändern, dann müssen Sie nicht mal wissen, wo Sie sich befinden. Das geht auch für mehrere Zellen, also eine Auswahl. Deswegen werde ich jetzt "Sub ZeigeMarkierteAuswahl" schreiben. Wiederum mit "debug.Print". und dieses Mal ist es eben "Selection" und schon wieder haben wir so ein WischiWaschi-Objekt, wo nach dem Punkt nichts angeboten wird. Das sollten wir gleich verbessern. Also, das lasse ich mal vorübergehend so unfertig stehen, und mache eine vernünftige Variable, die nämlich den Datentyp Range bekommt. Nennen wir die ruhig "Auswahl as Range" "Range" ist alles was "ActiveCell", "Selection" oder überhaupt mit Zellen, Zellbereichen zu tun hat. Und da muss ich jetzt nur einmal schreiben "Set", das ist ja eine Objektvariable, "RangeAuswahl" gleich "Selection". Und kann jetzt hier mit "RangeAuswahl" arbeiten. Allerdings natürlich nur, wenn ich mich nicht verschreibe. "RangeAuswahl" und nach dem Punkt ist "AddressLocal" und alle anderen Eigenschaften wieder im Angebot. Und da muss ich natürlich, um den Unterschied zu sehen, mehr markieren. Wenn ich das jetzt mache mit F5, sehen Sie, es ist nur die Zelle "C5". Da muss ich einen größeren Bereich markieren und entsprechend wird jetzt hier mit F5 dieser Bereich, also von "C3" bis "I12", - müssen wir mal eben gucken - von "C3" bis "I12" angezeigt. Innerhalb der Auswahl ist eine Zelle immer ein bisschen anders. Das heißt ich kann zu dieser Auswahl eine Menge mehr jetzt rauskriegen. Unter anderem auch die aktive Zelle, die noch oben links ist. Und das will ich jetzt hier ermitteln. Also "Sub" - ach, das können wir kopieren von oben - von hier, Markierte Auswahl besser. Und das kann ich jetzt hier ergänzen, Also, zusätzlich möchte ich zum Beispiel wissen: Wie viele Zeilen hat eigentlich diese Auswahl? Ich kann das ja mal eben zählen. Also von drei bis zwölf sind zwei, vier, sechs, acht, zehn Stück. Man muss immer aufpassen, nicht einfach die Differenz. Es ist immer eine mehr. Also zehn Zeilen, das will ich wissen. Und dann frage ich doch mal jemand, der was davon versteht, nämlich die "RangeAuswahl". Die hat eine Rows-Auflistung. Achtung Plural! Auflistungen sind immer im Plural. Rows ist die Auflistung aller enthaltenen Zeilen. "Row" ist nur die Nummer der in diesem Fall ersten Zeile. Die will ich gar nicht wissen. Ich will die Auflistung aller Zeilen in "RangeAuswahl" wissen. Und die hat dann, wie jede Auflistung wieder eine Count-Eigenschaft. Und dann schreibe ich doch auch mal dazu was es ist, nämlich die Anzahl der Zeilen. Und entsprechend - das wird sich kaum unterscheiden, deswegen kann ich es kopieren - gibt es auch die Spalten. Die heißen, wenn ich mich nicht verschreiben würde, "Column". Auch da wieder "Columns" im Plural für die Auflistung. Und dann hier natürlich "Spalten". Und schließlich möchte ich die ActiveCell anzeigen. Das mag Sie überraschen, weil die sich ja zwangsläufig oben links befindet. Also die "Aktive Zelle" ist "ActiveCell" und davon die "AddressLocal". Und unabhängig davon, die linke obere Ecke. Also, "Linke obere Ecke" um zu zeigen, dass nämlich auch die "RangeAuswahl" eine Cells-Auflistung hat. Und zwar nicht die Cells der Tabelle, die fangen in "A1" an, sondern die Cells dieser "RangeAuswahl". Und die linke obere Ecke ist von denjenigen, die "1, 1" und dazu dann wieder "AddressLocal". Jetzt habe ich keine Lust mehr, noch eine Variable anzulegen, um für dieses Range-Objekt hier die AddressLocal-Eigenschaft wieder zu sehen. Ich weiß, es gibt sie, ich weiß wie sie sich schreibt, das steht da oben, und kann das jetzt ein bisschen abkürzen. Wenn ich das so aufrufe, - brauche ich ein bisschen Platz unten, natürlich nach dem Speichern - und mit F5 aufrufe, dann sehen Sie: Die aktive Zelle und die linke obere Ecke sind identisch. Zehn Zeilen, sieben Spalten, das sollten wir eben überprüfen. Zehn Zeilen hatte ich schon gezählt, zwei, vier, sechs, sieben Spalten. Jetzt fragen Sie sich möglicherweise: Wie geht das denn anders? Ganz einfach, mit der Tab-Taste. Da können Sie innerhalb der Markierung die aktive Zelle weiterschieben. Sie können auch die RETURN-Taste benutzen, dann geht es abwärts. Und jetzt befindet sich die aktive Zelle in "E10" und nicht mehr in der linken oberen Ecke. Das heißt, wenn ich das lösche, aber komplett, und wieder ausführe mit F5, dann sehen Sie jetzt hier den Unterschied. Die aktive Zelle in "E10" und die linke obere Ecke ist in "C3" weiterhin. Ich gebe zu, die wenigsten Benutzer wissen, dass man innerhalb der Auswahl mit der TAB-Taste weiterarbeiten kann. Das ist zwar sehr praktisch, wird aber kaum benutzt. Aber es könnte durchaus passieren, dass Sie eine Mehrfachmarkierung haben und dann ist automatisch nicht mehr die linke obere Ecke die aktive Zelle, weil Sie mehrere davon haben. Es kann ja auch sein, dass ein Benutzer von rechts unten nach links oben markiert, oder von rechts oben nach links unten. Dann ist immer schon die aktive Zelle woanders. Also das sind so die wesentlichen Sachen, die Sie mit Selection und mit ActiveCell machen können. Ganz wichtig, empfehle ich Ihnen, das immer sofort in ein Range-Objekt umzuspeichern, so wie hier. Das sieht erstmal nach Arbeitsbeschaffung aus, sorgt aber dafür, dass Sie die ganzen Eigenschaften und Methoden bekommen, in einer Liste, ohne die immer im Kopf haben zu müssen.

Excel 2016 VBA Grundkurs

Lassen Sie sich systematisch in die Excel-Programmierung mit Visual Basic for Applications (VBA) einführen.

7 Std. 25 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Exklusiv für Abo-Kunden
Ihr(e) Trainer:
Erscheinungsdatum:30.08.2016
Laufzeit:7 Std. 25 min (66 Videos)

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!