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

Excel 2016 VBA Grundkurs

Worksheets

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Tabellen sind in der Worksheets-Auflistung enthalten und lassen sich darüber programmieren. Wenn darin Daten enthalten sind, die Sie ausschließlich für VBA benötigen, können Sie diese besonders gut verstecken.

Transkript

Für den Umgang mit der Worksheets-Auflistung habe ich wieder ein eigenes Modul vorbereitet. Und ich will als Erstes zählen, wieviel Worksheets, also Arbeitsblätter da drin sind, Tabellen hier. Das beudeutet eine Prozedur "Sub AnzahlDerTabellen", und kann das dann mit "debug.Print" sofort ausgeben. Und das ist ja sozusagen die Standardeigenschaft hier in der Auflistung, nämlich von "ThisWorkbook" also die Arbeitsmappe, in der der Code sich befindet. Punkt "Worksheets", Punkt "Count". Worksheets sind übrigens ausdrücklich nur die Tabellen. Es können ja in Arbeitsmappen auch noch Diagramme oder alte Excel4-Makroblätter oder Ähnliches enthalten sein. Also, Worksheets ist der Sonderfall, der aber eigentlich als Standard benutzt wird, der nur die Tabellen betrifft. "Sheets", etwas unspezifischer würde alle behandeln. Hier ist es kein Unterschied. Nur falls Sie sich mal irgendwann wundern sollten, dass es da einen Unterschied gibt. dann haben Sie wahrscheinlich Diagramme drin. Wenn ich das mit F5 starten lasse, dann sehe ich sieben Stück. Das entspricht auch hier der Zählung noch. Dann möchte ich zu einer speziellen Tabelle wissen wie sie heißt, also "Sub", nennen wir das mal "NameDerErstenTabelle" Und die spreche ich über ihren Index an, über ihre Ordinalzahl, also die Nummer, mit der sie dahin gespeichert ist. Und ich hatte es schon ein paarmal erwähnt: Diese Auflistung der Worksheets, ist eine von den vielen in Excel, die Eins-basiert ist. Also ich beziehe mich auf "ThisWorkbook" "Worksheets", Klammer auf, das erste Element hätte ich gerne, und dessen "Name"-Eigenschaft. Und Sie merken schon: "Name" die Eigenschaft wird mir gar nicht angeboten. Ich behaupte die mal ganz skrupellos. Die ist bei praktisch allen Objekten vorhanden. Wenn ich das mit F5 laufen lasse, dann sehen Sie, das hat geklappt. Das ginge alternativ über den Namen. Ich könnte also hier - ich kopiere das mal einfach - nicht den Namen der ersten Tabelle, sondern "NamenDerDatenTabelle" erfragen. Dann würde ich an dieser Stelle, weil das nämlich hier in den Klammern der Name ist, den der Benutzer sieht und vorgibt. - ich gehe mal eben mit ALT + F11 rüber - dann sehen Sie, hier habe ich Daten eingetragen. Also ist das der Name, über den ich es ansprechen kann. Es ist natürlich irgendwie albern, die Tabelle an ihrem Namen zu suchen und dann den Namen zu erfragen. Das soll im Moment aber nur beweisen, dass es funktioniert. Das Problem geht nämlich dann los, wenn der Benutzer hingeht und sagt, Ich benenne den mal eben um. Das nenne ich jetzt "Meine Daten". Und, mit ALT + F11 wieder zurück. Dann wird diese Art der Programmierung scheitern. Wenn ich jetzt F5 mache, kommt diese Fehlermeldung, die vor allem sagt: Eine solche Bezeichnung habe ich hier nicht gefunden. Also, Index ist ein bisschen irreführend. Die Suche innerhalb der Worksheets-Auflistung ist gescheitert. Und genauso schlimm, wenn ich die Reihenfolge ändere, wenn ich also hier zum Beispiel die Demotabelle mit gedrückter Maustaste davorlege, und jetzt hier das Ganze starte, ud mit F5 leider die Demotabelle bekomme, obwohl ich erwartet hatte, dass ich die Tabelle 1 mit meinen Daten hier sehe. Hier gibt es nämlich eine alphabetische Sortierung, die ist nicht mehr identisch mit derjenigen, die Sie im Arbeitsblatt sehen. Also, um es kurz zu sagen, beides perfekt und trotzdem zum Scheitern verurteilt. Wenn Sie eine Schleife haben, ist diese Nummerierung innerhalb der Auflistung in Ordnung. Wenn Sie gezielt eine suchen, nach Ihrem Namen und der Name existiert, ist das auch in Ordnung. Aber es gibt bei Excel eine dritte Variante, die ich Ihnen dringend empfehlen kann. Und zwar die sogenannten Codenames, die hier vorstehen. Dieser Name, - das ist ein bisschen irreführend - da unten doppelt, "Name" ist das, was der Benutzer ändern kann. Das steht da oben in Klammern. Codename ist das, was hier ärgerlicherweise "Name" in Klammern heißt. Wenn da Codename stünde wäre das klarer. So heißt die Eigenschaft übrigens auch, wenn Sie es aufrufen wollen. Sie können hier oder da mit "Codename" - ich mach das mal kurz, aber natürlich richtig geschrieben - mit "Codename" sich anzeigen lassen mit F5, dass das Ding im Moment Tabelle 2 heißt. Und diesen Codename können Sie verändern. Ich mache das mal einfach für den hier, die Tabelle 1. Ich würde den immer mit "tbl" beginnen lassen und dann nenne ich ihn einfach "Daten". Wie ich ihn nenne, ist mir völlig freigestellt. Deswegen rutscht er jetzt in seiner alphabetischen Sortierung hier nach unten, weil "tblDaten" hinter "Ta" kommt. Und ab jetzt... Also hier muss ich erst mal wieder vernünftig "Meine" reinschreiben, damit das funktioniert, und es ist inzwischen die Zweite. Das muss ich mal eben korrigieren, damit das alles noch vernünftig aussieht. Das ist wieder die Erste. Und jetzt kann ich aber beschließen, - das funktioniert jetzt sozusagen wieder - jetzt kann ich aber beschließen, dass mir das furchtbar egal ist. Ich kann "Sub NameMeinerDatentabelle" nenne ich das mal. Und mit "debug.Print" greife ich jetzt nicht auf die Worksheets-Auflistung zu, sondern sage direkt: Das ist ein Objektname. Ich kann also "tblDaten" direkt ansprechen, und nach seiner Name-Eigenschaft fragen. Ist nicht nur viel kürzer, sondern auch viel sicherer. Wenn ich jetzt also mit F5 ausführe, kriege ich den Namen "Meine Daten". Ich kann zur Not auch die Position, den Index und irgendwie sowas alles abfragen. Und ganz ehrlich, der Benutzer kann jetzt machen, was er will. Er kann diesen öffentlichen Namen ändern, er kann auch die Position ändern. Ist mir alles völlig egal, ich habe die eindeutig im Zugriff. Und deswegen sollte man eigentlich mit allen Blättern, mit denen man arbeitet, auf jeden Fall diesen Codename verändern. Und damit ist das Einzige, was Ihnen noch passieren könnte, dass der Benutzer dieses Blatt löscht. Da müssen Sie dann entsprechend einen Blattschutz drauflegen. Aber ansonsten sind Sie völlig unabhängig von dem, was der Benutzer mit seinen Blättern macht. Und das Wahrscheinlichste, was er macht, ist nämlich, so ein Blatt umzubenennen. Wenn Sie insbesondere Blätter haben, die Sie mit eigenen Daten versehen wollen, dann könnte man, - ich wechsle mit ALT + F11 mal wieder rüber - hier natürlich hingehen und sagen, ich mache das mal mit dem Test. Da stehen Daten drauf, die ich im Code brauche. Dann könnte ich hingehen, und per Rechtsklick auf der Registerlasche auf Ausblenden gehen. Das fühlt sich so lange gut an, bis Sie einen schlauen Benutzer erwischen, der sagt: Ja, dann gucke ich doch mal, was denn da alles so weggeblendet ist, und geht auf Einblenden. Und schon ist dieses Blatt wieder da und er kann machen, was er will. Deswegen sollten Sie auch das verhindern. Ich werde also dieses Testblatt hier schon mal wieder vernünftig umbenennen: "tblTest". Und zusäzlich, dieses Blatt besonders gut verstecken. Wenn Sie hier nämlich nachgucken... Dieses Eigenschaftenfenster, was Sie übrigens mit F4 oder hier mit AnsichtEigenschaftenfenster einblenden können. Und wenn Sie dort die Tabelle markiert haben, zeigt dieses Eigenschaftenfenster unter anderem genau diese Eigenschaft Die hat drei Zustände: "-1" - Visible, "0" - Hidden, versteckt, das ist das, was ich eben per Rechtsklick gemacht hatte, und dann gibt es noch ein VeryHidden. Das würden Sie wahlweise hier, das geht hier auch, oder im Code setzen. ich mache das mal im Code "Sub TestSuperVerstecken" und dann schreibe ich einfach "tblTest.Visible", - das ist diese Eigenschaft - "=", und dann würde es Ihnen hier angeboten und dann sollten Sie auch dafür sorgen, dass Sie es wieder einblenden könnten zur Not. Und da heißt das Gegenstück einfach "tblTest.Visible=" Visible" oder "xlSheetVisible" um korrekt zu sein. aber das sehen Sie ja hier an den Eigenschaften. Und wenn ich dies jetzt mit F5 ausführe, und mit ALT + F11 drüben nachgucke, dann ist es hier weggeblendet, klar. Aber die Überraschug kommt, wenn Sie jetzt per Rechtsklick auf Einblenden gehen wollen. Es gilt als nicht ausgeblendet, es gilt als weg. Jetzt könnte natürlich ein Benutzer einen guten Trick machen und sagen, ich blende einfach nochmal eins aus dann ist nämlich hier das Einblenden wieder aktiv. Hilft aber nichts, denn nur das andere Ausgeblendete ist sichtbar. Mein richtiger Test ist VeryHidden, Wenn ich mit ALT + F11 nachgucke, Ich kann es also hier mit F5 wieder einblenden, und da ist mein normaler Test auch wieder. Also wenn Sie aus irgendwelchen Gründen Daten innerhalb der Tabelle speichern wollen, wo der Benutzer nicht dran soll, dann sollten Sie dieses Worksheet-Objekt au "VeryHidden" setzen. Das geht auch hier unten in den Eigenschaften. Und dann können Sie es mit dem Code auch wieder sichtbar machen.

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!