Transkripte
1. 01 – VBA Lektion 8 – Fortgeschrittene Content Einführung: Willkommen bei der nächsten Phase, ein Visual Basic Ninja musta zu werden. Mein Name ist Andrew Derek und ich werde dein Lehrer sein. Wenn Sie neu in VBA sind, schlage
ich vor, dass Sie mit meinem Anfang beginnen, natürlich, denn wir sind dabei, direkt
in einige Themen zu springen , die einige Vorkenntnisse erfordern. Schauen Sie sich einfach auf meine Profilseite an, um den Link zum Anfängerkurs zu finden. Für diejenigen von Ihnen, die bereit sind, öffnen
Sie Excel bequem auf Ihrem Computer. Und fangen wir an. Ich werde damit beginnen, dass sich die Struktur
des Zwischeninhalts geringfügig vom Anfängerkurs ändert. Beginnen Sie natürlich mit strukturiert, um
die Grundlagen zusammen mit einigen zusätzlichen Inhalten
in jeder Lektion abzudecken die Grundlagen zusammen mit einigen zusätzlichen Inhalten , um ein schönes umfassendes Verständnis der VB I Grundlagen zu gewährleisten. die Grundlagen behandelt werden, werden
die Zwischeninhalte über mehrere Kurse hinweg verteilt. Wie Sie sich vorstellen können, gibt es viel zu decken. Während ich Ihnen empfehle, alle behandelten Themen zu lernen und zu verstehen, bietet Ihnen
dieser Ansatz die Möglichkeit, die Dinge, die Sie selektiv lernen möchten. Dies kann sein, weil Sie mit einem bestimmten Problem
am Arbeitsplatz konfrontiert sind oder aus Neugier oder Wunsch nach Meisterschaft. Wie zu Beginn werde
ich natürlich auch weiterhin die häufigsten Fehler ansprechen, die VB I-Entwickler machen und was die Best Practice-Methoden das gewünschte Ergebnis rasieren sollten. Letztendlich möchte ich helfen, Ihren Code effizient,
robust zu machen und Ihren Endverwendungen ein überzeugendes Erlebnis zu bieten. In diesem Kurs werden wir kritischere Arbeitsmappenfunktionen abdecken, hatte eine Datei erstellen Dialogfelder. Wie man Code auf bestimmten Ereignissen ausgeführt, wird über den Umgang mit Datensätzen sprechen. Und ich werde Ihnen eine der mächtigsten Funktionen in VBA vorstellen. Arrays decken auch mehrere Möglichkeiten, mit
Daten umzugehen und beginnen, in Benutzerformulare und Benutzererfahrung zu vertiefen. Jetzt fangen wir an. Wir sehen uns im nächsten Video.
2. 02 – VBA Lektion 9 – Mehr Workbook: Willkommen bei Lektion neun, weitere Arbeitsmappenfunktionen. In der realen Welt müssen Sie diese kritischen VBA-Arbeitsmappenfunktionen kennen. In dieser Lektion erfahren Sie, wie Sie Arbeitsmappen programmgesteuert öffnen, schließen und speichern und einen vollständigen Dateipfad
erstellen, wenn ich
aus szenarienbasierten Geschäftslogik und Annahmen bekannt bin . Sie erfahren, wie Sie mit Popup-Nachrichten umgehen, wenn Sie
eine Arbeitsmappe programmgesteuert öffnen und Code schreiben, um kennwortgeschützte Arbeitsmappen zu öffnen. Sie lernen, wie Sie enorme Dateien sofort laden können. Und ich werde die optionalen Argumente für den Befehl Arbeitsmappe öffnen erklären. Lass uns weitermachen. Betrachten wir dieses Szenario. Sie werden aufgefordert, ein Makro zu schreiben, das Daten von einer externen Quelle benötigt. Die Daten werden jeden
Tag automatisch zu einer bestimmten Zeit erzeugt und in einem bestimmten Verzeichnis hinterlegt. Das ist also bekannt, das ist eine Konstante, die sich nicht ändern wird. Die Datei wird immer jeden Tag in diesen Ordner abgelegt. Der Fall, der automatisch generiert wird, hat eine bestimmte Benennungskonvention und das heißt Jahr, Monat, Tag und Jahr ist voller Zeichen Jahr zwei Zeichen Monat zu Zeichen Tag auf der Schulwährungsumrechnung Punkt csv. Und diese Art von Namenskonvention ist eigentlich ziemlich üblich bei diesen automatischen Aufträgen, die Dateien erstellen. Und das ist, um zu vermeiden, dass der Fall durch die nächste stirbt Datei überschrieben wird. Und es gibt tatsächlich die Verwendungen, die diese Dateien verwenden. Das bedeutet also ein paar Dinge. Das bedeutet, dass wir die Datei nicht bearbeiten oder löschen können. Wir können es nicht verschieben und wir sollten das Follow-up nicht
zu lange halten , nur für den Fall, dass andere aus der Datei sperrt. Und schließlich
benötigt das Team, in dem Sie sich befinden, auch eine Kopie des Sturzes für ihre eigenen Zwecke. Also müssen wir eine Kopie dieser Datei erstellen. Lassen Sie uns also schnell einen Blick auf die Einreichungsfrage werfen. Ich bringe hier nur meine Dokumente an. Okay. Das ist also die Akte. Ich mach das schnell auf. Okay, los geht's. Wie wir sehen können, ist es eine ziemlich einfache Datei. Es sind nur drei Spalten. Wir müssen uns mit einem Land verabreden und wir müssen Werte haben. Dies sind Währungsumrechnungswerte. Möglicherweise stellen Sie auch fest, dass der Dateityp ein CSV- oder ein kommagetrennte Wert ist. CSV-Dateien sind eigentlich nur Textdateien. Sie können jedoch in Excel geöffnet werden, da es CSV-Datei im Grunde eine Tabelle mit Daten speichert. Ich werde das einfach schnell schließen und es im Editor öffnen, nur um zu zeigen, dass Sie nicht gespeichert haben. Ich bringe das hier zurück, Rechtsklick öffnen mit. So sieht die Datei aus öffnet sie im Notizblock. Also in der ersten Reihe enthält unsere Hitters. Und wie Sie sehen können, ist h Wert durch ein Komma getrennt durch. Ich werde das schließen. Das erste Problem, über das wir nachdenken müssen, ist, dass sich der Dateiname jeden Tag ändert. Wir haben jedoch genügend Informationen bereitgestellt, um diesen Dateinamen dynamisch erstellen und
die Datei öffnen zu können , vorausgesetzt, dass sie automatisch zu dem bestimmten Datum und zu der Uhrzeit erstellt
wurde . Normalerweise werden am Arbeitsplatz mit diesen Arten von Jobs die Stürze auf einem Netzfreigabe-Laufwerk abgelegt. In diesem Fall wird es sich jedoch nur auf meinem lokalen Sagenlaufwerk in meinem Dokumentenordner befinden. Aber das ist in Ordnung. Das Konzept ist immer noch das gleiche. Also werde ich einfach mit einer Konstante beginnen, weil wir wissen, dass die Dateijeden Tag
in einem Verzeichnis in
einem bestimmtenVerzeichnis erscheinen jeden Tag
in einem Verzeichnis in
einem bestimmten wird und dieses Verzeichnis sich nicht ändern wird. Also, das ist nur meine Dokumentenmappe. Wie ich bereits sagte, sind diese normalerweise auf Netzwerklaufwerken gemeinsam genutzten Laufwerken, aber das Konzept ist das gleiche. Der Zweck der Verwendung von Variablen, um einen Dateinamen zu erstellen, ist so, dass wir
diese Strings miteinander verketten können , um den vollständigen Pfad und Dateinamen zu erstellen, so dass wir ihn öffnen können. ist es wichtig zu überlegen, wie der Herbstmann aussehen
wird, wenn Sie alle diese Saiten miteinander verkettet haben. Was ich damit meine, ist die Ausschau nach diesen Verzeichnisbackslashes und stellen sicher, dass Sie tatsächlich Backslashes haben, wo sie einer sein sollten. Die nächste Konstante, die ich erstellen möchte, ist dieser Teil des Dateinamens, da wir dies dynamisch basierend auf dem aktuellen Datum erstellen können. Ich werde das einfach in einer Konstante verwenden, weil sich dieser Teil nicht ändern wird. Auch. Das werden wir kopieren. In Ordnung, also lassen Sie uns jetzt unsere Unterroutine definieren. Ich nenne es nur offene Datendatei. Und lassen Sie uns über einige der Variablen nachdenken, die wir brauchen werden. Also werden wir definitiv ein Arbeitsmappenobjekt benötigen, insbesondere die Arbeitsmappe, die wir öffnen werden. Wir werden auch die aktuelle Arbeitsmappe benötigen, weil wir Daten aus der Einwegöffnung und Einlagerung in diese
nehmen könnten . Darüber hinaus benötigen wir die Arbeitsblattobjekte sowohl für die Arbeitsmappe, die wir öffnen werden, als auch für die Arbeitsmappe, in die wir die Daten schreiben werden. Also nun lasst uns daran arbeiten, wie wir den Dateinamen erstellen, dem wir erwarten, dass er dieses Datumsformat hat. Also das Jahr in vollen Zeichen, Monat in Zeichen, Tag in Zeichen. Wie können wir über das Generieren gehen, so dass wir einen vollständigen Dateipfad und Dateinamen erstellen können. Ich ziehe das unmittelbare Fenster für Sekunde hoch. Vba hat einige integrierte Funktionen, die uns das aktuelle Datum und die aktuelle Uhrzeit zurückgeben können. Verwenden Sie in der Regel die Funktion jetzt. Also lassen Sie mich diese Funktion einfach verhören. Wie Sie sehen können, hat die NOW-Funktion Würfel und den aktuellen Zeitstempel zurückgegeben. Es ist nicht genau im gleichen Format, das wir gemacht haben. Sie können dies jedoch tatsächlich verwenden und dies in das Format zwingen, das wir benötigen. Und lassen Sie mich Ihnen zeigen, wie das geht. Also lösche ich einfach die Zeile. Dann. Wir können die Formatfunktion verwenden. Und wie Sie sehen können, fordert es uns auf, ein Dokument vorzulegen, das Ausdruck ist. Also die Sache, die ich ihm zur Verfügung stellen möchte, ist der Ausdruck jetzt, der
das Datum zurückgeben wird, das wir gerade gesehen haben. Und das nächste Argument ist das Format. Dies ist also der Excel Zellformatierungsstruktur sehr ähnlich. Wir können im Grunde einfach das Format angeben, in dem die Höhe zurückgegeben werden soll. Also, das ist, warum, warum, warum, warum m,
m d d, aber in der Nähe gezüchtet und drücken Sie geben. Sie werden sehen, dass es uns das Datum in dem Format zur Verfügung gestellt, das wir benötigen. Also das Jahr, Monat und der Tag, ziehen Sie das einfach nach unten. Okay, wir haben jetzt genügend Informationen, um die Arbeitsmappe zu öffnen, die wir öffnen möchten. Die Art und Weise, wie wir eine Arbeitsmappe geöffnet haben, ist
vor allem mit der Sammlung Arbeitsmappen. Und die Arbeitsmappensammlung hat eine untergeordnete Methode. Kalt offen. Und dann können Sie eine Reihe von Argumenten liefern. Aber wir sind tatsächlich in der Lage, die Arbeitsmappe zu öffnen und gleichzeitig das Objekt auf ein Objekt zu setzen, das wir hier definiert haben. Und wir werden das einfach in einer festgelegten Anweisung verwenden. Schließen Sie sich einfach wie Klammern, also ist es nicht verärgert mit uns. Im Wesentlichen ist die Syntax, dass wir
das Objekt setzen und mit der Angabe, über welche Objekte wir sprechen. Und das ist diejenige, die wir öffnen werden. Lassen Sie uns nun den Dateinamen angeben, der den vollständigen Dateipfad,
das Datum und den Dateinamen sein wird. Und wir verwenden kaufmännisches Und-Verkettungszeichenfolgen. Und jetzt brauche ich das Date, also Moment. Und jetzt brauche ich den Rest des Dateinamens. Nun, wie Sie sehen können, ist
der Dateiname das erste Dokument und es gibt viele andere Argumente danach, und die Argumente, die danach in eckigen Klammern stehen. Das bedeutet, dass es sich tatsächlich um optionale Argumente handelt, und ich werde später in der Lektion darauf eingehen, was diese Schlüsselargumente sind. Als nächstes möchte ich dieses Arbeitsmappe nehmen, das wir gerade geöffnet haben, und ich möchte meine eigene Kopie davon zitieren. Jetzt, da ich mein Arbeitsmappenobjekt
habe, kann ich eine der Methoden dieses Objekts verwenden, um zu speichern und zu speichern unter. Und ich werde es einfach an den gleichen Ort stellen. Also in dem gleichen Verzeichnis, aus dem wir es gerade genommen haben, Normalerweise, ich meine, Sie würden das wahrscheinlich in einem anderen Verzeichnis haben, aber nur um der Demonstration willen. Also verwende ich das noch mal. Und ich werde die Datei in einem anderen Format speichern als das, das wir geöffnet haben. Das ist also ein CSV mit dieser Namenskonvention. Also werde ich den Namen und die Konvention und den Fall-Typ ändern. Also zuerst, ich will das Date umgekehrt. Also di, di Monat, Monat, Jahr, Jahr, Jahr, Jahr. Und jetzt müssen wir auch das Dateiformat angeben. Und ich kann das tun, indem ich Excel Arbeitsmappe Standard oder Excel-Arbeitsmappe normal eingeben. Ich werde Standard verwenden. Und das ist alles. Also lasst uns das laufen, um zu sehen, wie wir gehen. Wenn das Hinzufügen durch passiert plötzlich, wenn ich FI noch einmal. Okay. Und ich produziere fertig. Also lasst uns den Herbst erforschen, um zu sehen, was los ist. So können wir sehen, dass wir SI fallen hier, was großartig ist, das ist das Format und der Dateiname, den wir angegeben haben. Öffnen wir das, um einen Blick zu werfen. Es ist schon offen. Wir haben vergessen, es zu schließen. Da gehen wir. Also haben wir die Datei geöffnet und wir haben dieses Dateiformat in ein XLS x Whip Book geändert. Lassen Sie mich einfach öffnen auch die Währungsumrechnung c ist v, so dass wir sie nebeneinander vergleichen können. Es ist perfekt. Also kann ich voran gehen und die schließen. Es gibt noch eine Sache, die ich tun möchte, ist die Arbeitsmappe nach der
Website zu schließen , es ändert sich falsch. Also lasst uns das nochmal laufen und mal sehen, was passieren wird. Wenn wir eine Arbeitsmappe haben, die bereits mit
diesem Dateinamen vorhanden ist , die ein Speichern als über die Spitze davon gewonnen. Also habe ich es geöffnet. Schauen wir uns mal an. Ja, das ist der CSV. Und jetzt werden wir speichern als. Es hat uns also ein Fehlermeldungsfeld zur Verfügung gestellt. Und es fragt uns, Wollen wir Seitennotiz vorerst überschreiben, was uns einen Debug-Bereich gegeben hat, weil es nicht in der Lage war zu speichern, was darin enden und es wieder schließen wird. Offensichtlich ist dies in Bezug auf die VBA-Automatisierung nicht ideal, da diese Pop-ups die Ausführung Ihres Makros halten und Benutzereingriffe erfordern, um sie zu schließen. Glücklicherweise sind wir in der Lage, diese Arten von Pop-ups zu unterdrücken. Und die Art und Weise, wie wir das tun, ist, indem Sie
die display-Eigenschaft festlegen , die zum Anwendungsobjekt gehört. Das Anwendungsobjekt ist die Excel Instanz, die das übergeordnete Objekt für das Arbeitsmappenauflistungsobjekt ist Wenn ich also application tippe und dann Warnungen anzeige, können
Sie sagen, dass die Methode dort gleich false ist. Was das bedeutet, ist, dass während der Ausführung des Codes die Anzeige der Warnungen unterdrückt. Und es wird automatisch die Standardoption auswählen. Aber denken Sie daran, es immer auf wahr zu setzen, nachdem Sie fertig sind. Versuchen wir das jetzt noch einmal, um zu sehen, ob wir diese Pop-up-Box unterdrückt haben. Wie Sie sehen können, haben wir
die Ausführung des Codes beendet und wir haben kein Popup gesehen, was großartig ist. Und wenn ich den Datei-Explorer einfach öffne, können
wir sehen, dass wir eine neue Datei haben, also wird sie über den vorhandenen Herbst gespeichert, der dort war. Was großartig ist. Also werde ich einfach wieder in unseren Code springen. Okay, jetzt lassen Sie uns durch einige der zusätzlichen Argumente gehen, die wir die Arbeitsmappe öffnen und Arbeitsmappen Speichern unter Befehl
senden können . Jetzt werde ich nicht alle von ihnen durchgehen und irgendwie die
durchgehen , die ich für wichtig halte, zu wissen,
was hilfreich sein kann, um die Warnungen,
die während eines Öffnungs- oder Speicherbefehls angezeigt werden, weiter zu unterdrücken . Alles, was in der Automatisierung im Allgemeinen hilfreich sein kann. Also zuerst, nach der offenen Methode, haben
wir unsere öffnenden Klammern und dann haben wir unsere Argumente, an die wir sie senden können. Der erste ist offensichtlich Dateiname, und das ist obligatorisch. Sie müssen angeben,
was, welches Buch Sie öffnen möchten. Und wir trennen die Argumente durch Kommas. Wie Sie sehen können, wenn ich mit der Eingabe von Kommas beginne, wird
das Argument, auf das wir uns beziehen, fett in intellisense. Das ist also ein gegebenes, dass wir unsere Argumente durch Kommas trennen müssen. Nehmen wir zum Beispiel an, ich wollte das Argument beschädigte Last setzen. Eine Möglichkeit, dies zu tun, wäre, Koma zu treffen, bis korrupte Last fett ist, was da ist. Oder was ich tun könnte, ist, dass ich zuerst ein Komma
getrennt und dann tatsächlich das korrupte Lastargument gelehrt habe. Dann mit einem Doppelpunkt und einem Gleichheitszeichen, und Sie werden sehen, dass jetzt das beschädigte Lastargument in IntelliSense fett formatiert ist, was
bedeutet, dass alles, was ich hier tippe, für das Argument beschädigte Laden ist. Sie können also tatsächlich die Reihenfolge der Argumente angeben, oder Sie können einfach die Komma-Option verwenden, um anzugeben, welches Argument Sie angeben möchten. Die erste ist also Update-Links. Nun, wenn Sie eine Arbeitsmappe am Arbeitsplatz geöffnet haben und sie Verknüpfungen zu externen Quellen enthält,
unabhängig davon, ob es sich um eine andere Arbeitsmappe oder einen Datensatz handelt. Möglicherweise wird die Meldung angezeigt, die besagt,
dass Sie die Links zu diesen Daten aktualisieren möchten? Nun öffne ich offensichtlich eine Arbeitsmappe programmgesteuert und enthält Links. Es wird diese Nachricht anzeigen, die mein Makro halten wird und ich möchte das nicht tun. Sie können also falsch angeben, was verhindert, dass dieses Meldungsfeld angezeigt wird. Das nächste Argument ist schreibgeschützt. Was dies tut, ist es, dass wir die Arbeitsmappe im schreibgeschützten Modus geöffnet haben, was ziemlich selbsterklärend ist. Und das kann speziell für das Szenario nützlich sein, das wir gerade
eingebaut haben , da wir die Datei, die wir öffnen, nicht bearbeiten möchten. Wir wollen nur Daten daraus holen und schnell schließen. Und kann auch verhindern, dass Sturzsperre, was ein Ärger in der Arbeitsplatzumgebung
sein kann mehrere Benutzer die gleiche Datei verwenden. Der nächste ist Format. Und dies wird verwendet, wenn wir eine Textdatei wie eine CSV öffnen. Aber wir wollen angeben, dass das Dateitrennzeichen oder das Zeichen, das die Trennung von h Feld
angibt, unterscheidet sich von einem Komma. So könnte es ein Tab sein, es könnte ein Leerzeichen sein, es könnte ein Semikolon sein, oder es könnte gewohnt Charakter sein. Und das ist eine Aufzählungsliste,
was bedeutet, dass Sie eine Nummer angeben müssen und Sie tatsächlich nur Google können , welche Nummer Sie für die Spitze der fehlerhaften Öffnung angeben müssen, aber ich werde sie einfach schnell durchgehen. Also ist man für tabulatorgetrennte Trennzeichen ein durch Komma getrenntes Trennzeichen, das die Standardeinstellung ist. Drei ist für Leerzeichen, vier ist für Semikolons, fünf ist nichts, und sechs ist das benutzerdefinierte Zeichen, das Sie benötigen, um das Trennzeichen fallen anzugeben. Der nächste ist das Passwort. Am Arbeitsplatz, der möglicherweise eine Arbeitsmappe geöffnet hat, beim Öffnen der Arbeitsmappe nach einem Kennwort
gefragt wird. Und offensichtlich ist dies ein weiterer Fehlerpunkt für die Automatisierung weil es den Benutzer auffordert, ein Kennwort anzugeben. Jetzt können Sie tatsächlich dieses Passwort angeben. Lassen Sie uns das Passwort speichern ist nur Passwort. Sie können das eigentlich nur als Zeichenfolge in diesem Argument angeben. Wenn Ihre Arbeitsmappe also ein Kennwort enthält, empfiehlt
es sich, das in einer Konstante anzugeben, ähnlich wie wir die Konstanten für den Dateipfad und für den Dateinamen verwendet haben, damit Sie das nicht einfach unter jedes Mal, wenn Sie die Arbeitsmappe öffnen oder schließen, wird
die nächste, über die ich sprechen möchte, getrennt. Wenn wir also angegeben haben, dass es sich um ein benutzerdefiniertes Trennzeichen im Format Argument handelt, müssen
wir angeben, was das ist. So könnte es Mangel sein, es könnte ein doppeltes Anführungszeichen sein oder es könnte alles sein. Es ist nur das Zeichen, das in dieser Datei verwendet wird, das angibt, dass es sich um ein Trennzeichen für das nächste Feld handelt. Und der nächste, über den ich sprechen möchte, ist korrupte Last. Das ist also äußerst nützlich. Und am Arbeitsplatz fällt ein häufig auf Dateiservern gespeichert, sogar Ihren eigenen Ordner Eigene Dateien. Und wenn Ihr Arbeitsplatz viele Verwendungen hat und Sie mit großen Excel -Dateien umgehen, kann
dies offensichtlich zu Problemen führen. Meiner Erfahrung nach brauchte ich zwei bis fünf Minuten, um Arbeitsmappen zu öffnen. Und das liegt an ein paar Dingen. Vor allem ist es auf die Netzwerkbandbreite zurückzuführen. Wenn Sie also viele Benutzer in Ihrem Netzwerk haben, gibt es nicht genug Bandbreite, um die Datei schnell bereitzustellen. Der Hauptschuldige für das langsame Laden von Dateien außer der
Bandbreite im Netzwerk ist jedoch unnötige Formatierung. Ich habe bemerkt, dass einige Benutzer die Formatierung über
eine ganze Tabelle oder sogar bis zur letzten Zeile in der Arbeitsmappe ausfüllen möchten . Und das macht die Arbeitsmappe nicht nur unglaublich groß, es macht das Öffnen der Arbeitsmappe sehr langsam, da Excel eine Menge Aufgaben erledigen muss , bevor tatsächlich ein Öffnen der Datei präsentiert wird. Was kann also beschädigte Last für uns
in der Instanz tun , in der wir eine Arbeitsmappe haben, die lange dauert, um zu öffnen, was ich tun werde, ist, dass es nur Radar ist, aber ich werde auch Excel Extraktdaten im korrupten Lastargument angeben. Und was das tut, wird es alle Formatierungen ignorieren und wir werden
den Fall so schnell wie möglich aus der Dateiquelle öffnen ,
was bedeutet, dass es so schnell wie möglich aus dem Netzwerk gelesen werden kann, es geöffnet wird. Und es wird alle Formatierungen ignorieren und einfach öffnen, so dass Sie schnell dort hineinspringen, Daten
extrahieren und herausspringen können . Okay, also lösche ich diese jetzt einfach. Und jetzt sprechen wir über die Argumente, die wir an den Befehl Speichern unter senden können. Der erste ist also Dateiname, der ziemlich offensichtlich ist. Es ist nur der Dateiname, den wir angeben, dass wir die Datei speichern möchten. Und das nächste ist das Dateiformat, das wir schnell abgedeckt haben. Hier stehen zahlreiche Optionen zur Verfügung. Wenn Sie also eine bestimmte Anforderung haben, dass eine Datei in einem bestimmten Format gespeichert wird, dann googeln Sie einfach die XML-Dateiformataufzählung und Sie sehen eine vollständige Liste der Dateiformate, in die Sie die Datei exportieren können. Die wichtigsten hier aber, Excel Arbeitsmappe zu Fehler, die XLS X ist, können
Sie auch XML CSV verwenden. Eine andere wirklich gemeinsame, zumindest nach meiner Erfahrung, ist XL Excel Sheet, die für die Abwärtskompatibilität mit Excel 2003 zurück zu 2007 Arbeitsmappen ist. Das ist also nur das Punkt-XLS-Dateiformat. Und der nächste, über den ich sprechen möchte, ist die Konfliktlösung. Dies ist also, was passiert, wenn wir mehrere Verwendungen in derselben Datei haben. Und es gibt an, welche Änderungen priorisiert werden sollen, um gespeichert zu werden. Die Standardeinstellung ist die Excel USA-Auflösung, die in der Automatisierung nicht ideal ist, da sie den Benutzer auffordert, die Speicherkonflikte zu lösen. Die andere Option ist XL-Sitzungsänderungen. Das bedeutet also, dass Excel die lokalen
Verwendungsänderungen gegenüber allen Änderungen der Remoteverwendung priorisiert . Und der andere ist Excel -Sitzungsänderungen. Das ist also das Gegenteil von dem, das wir gerade behandelt haben. Das bedeutet, dass Excel die anderen
Verwendungsänderungen gegenüber unseren eigenen in dieser lokalen Sitzung priorisiert . Und so fasst das die wichtigsten Argumente zusammen, die ich in dieser Lektion behandeln wollte. Also, das packt hören neun. In dieser Lektion, die Sie über das programmgesteuerte Öffnen,
Schließen und Speichern von Arbeitsmappen gelernt haben, habe ich Ihnen gezeigt, wie Sie
einen vollständigen Dateipfad für eine Datei basierend auf Geschäftslogik und Annahmenerstellen einen vollständigen Dateipfad für eine Datei basierend auf Geschäftslogik und Annahmen .
Popup-Meldungen, während Code ausgeführt wird, und wie Sie eine kennwortgeschützte Arbeitsmappe öffnen. Ich habe Ihnen gezeigt, wie Sie Dateien schnell laden können, die normalerweise sehr lange dauern. Und ich habe die wichtigsten optionalen Argumente für den Befehl Arbeitsmappen dot open erklärt. Danke fürs Ansehen, und wir sehen uns im nächsten Video.
3. 03 – - 10 – Lesson für -: Willkommen bei Lektion zehn, Dialogfeldern „Datei“. Ein Dialogfeld Datei ist eine integrierte Funktion von Office-Anwendungen. Kurz gesagt, es ist im Grunde ein Fenster, das
dem Benutzer eine Ansicht des Dateisystems präsentiert , so dass der Benutzer eine Datei oder ein Verzeichnis für
den von der Anwendung angegebenen Zweck auswählen kann , der es kalt ist. Ein Beispiel für ein Dateidialogfeld ist das Fenster, das angezeigt wird wenn Sie Datei auswählen und aus einer beliebigen Office-Anwendung öffnen. In dieser Lektion werde ich Ihnen beibringen, wie Sie Dateidialogfelder erstellen. Ich werde die verschiedenen Eigenschaften erklären, die wir in der Lage sind
, um unser Dateidialogfeld anzupassen. Ich werde Ihnen zeigen, wie Sie mit der Antwort aus den USA umgehen. Der zusätzliche Inhalt, den wir behandeln, umfasst mit Anweisungen, die integrierte VBA DIR-Funktion und die integrierte VBA LAN-Funktion. Lasst uns antreten. Dateidialogfelder sind etwas, das ich oft beim Erstellen von VBA-Anwendungen verwende. Der Zweck ist im Grunde, den Benutzer zu auffordern, eine Datei oder einen Ordner zu finden. Nur ein paar Szenarien, in denen Sie verwenden können. Es könnte sein, den Benutzer zu bitten, eine Datei zu finden, aus der Sie Daten
extrahieren werden oder wo der Benutzer eine Datei speichern möchte, wie und wo ihre Verwendung wirklich bis zu
Ihrer eigenen Vorstellungskraft verwendet wird . Verwenden Sie das Szenario in der letzten Lektion als Beispiel, , die eine Kopie einer externen Arbeitsmappe öffnet und speichert, können Sie versuchen, die Datei automatisch zu finden, da wir
das Verzeichnis, in dem sie sich befinden soll, und die Namenskonvention dieses Dateinamens kennen . Und wenn es nicht erfolgreich ist, fordern
Sie den Benutzer auf, die fehlende Datei zu finden. Also lasst uns versuchen, genau das zu erreichen. Betrachtet man die Routine aus der letzten Lektion, wollen
wir versuchen, die Datei mit der Logik zu öffnen, die wir bereits definiert haben. Und wenn das fehlschlägt, stellen Sie dem Benutzer eine Dateiauswahl vor. Es gibt ein paar Möglichkeiten, wie wir dies tun können, wenn die Datei nicht existiert und VBA versucht, sie zu öffnen, das würde VBA in einen Laufzeitfehler zwingen. In diesem Fall müssten wir eine Fehlerbehandlungsroutine schreiben, damit die VBA weiß, was zu tun ist, wenn dieser spezifische Fehler auftritt. Wir werden jedoch die Fehlerbehandlung in einer Gittersitzung abdecken. Und ich habe das Gefühl, dass es einen besseren Weg gibt, dies zu erreichen, anstatt nur zu versuchen, eine Datei zu öffnen, die möglicherweise existiert oder nicht, was eine Ära verursachen würde. Wir könnten zuerst testen, um zu sehen, ob die Datei tatsächlich existiert, bevor wir versuchen, sie sogar zu öffnen. Auf diese Weise verhindern wir, dass eine Laufzeit-Ära auftritt und dass diese Ära berücksichtigt werden muss. Zusammenfassend versuchen wir also, die Datei automatisch zu öffnen. Und wenn diese Datei nicht existiert, werden
wir den Benutzer auffordern, die Datei auszuwählen, die geöffnet werden soll. Lassen Sie uns nun darüber sprechen, wie wir feststellen, ob eine Datei existiert oder nicht. Vba hat eine Funktion, die wir verwenden können, um dies zu erreichen, und es heißt D. Lassen Sie mich das unmittelbare Fenster aufrufen. Also die DIR-Funktion, werden
wir testen, um zu sehen, ob ein Verzeichnis existiert. Und wenn es existiert, wird
es den Dateinamen als Zeichenfolge zurückgeben. Und wenn es nicht existiert, wird
es eine 0 lange Zeichenfolge zurückgeben. Also die Datei, die wir im ersten Beispiel verwendet haben, habe ich gerade den Dateipfad kopiert und ich werde das nur als String liefern. Und wir wissen, dass es existiert, weil wir das in der letzten Lektion verwendet haben. Wenn wir also Enter drücken, können wir sehen, dass es uns den Dateinamen zur Verfügung gestellt hat. Nun, wenn ich nur einen Charakter hier ändern würde. Ich weiß, dass diese Datei nicht existiert, und wenn ich Enter drücke, werden
Sie sehen, dass sie uns eine 0 lange Zeichenfolge zur Verfügung gestellt hat. Daher sind wir in der Lage, die DIR-Funktion zu verwenden, um festzustellen, ob die Datei existiert oder nicht. Denn wenn es existiert, wird
es eine Zeichenfolge zurückgeben, die größer als 0 ist, oder die Länge dieser Zeichenfolge ist größer als 0. Und wenn es nicht existiert, wird
es eine Zeichenfolge mit der Länge von 0 zurückgeben. Bewegen Sie einfach das unmittelbare Fenster aus dem Weg. Lasst uns anfangen. Um zu überprüfen, was die DIR-Funktion zurückgibt, werde
ich nur eine grundlegende if-Anweisung verwenden. Warten Sie eine Minute. Ich bringe das sofortige Fenster wieder hoch. Ich werde nur darauf hinweisen, für 1 Sekunde, und ich werde Ihnen nur die Längenanweisung zeigen. Also, wenn ich diese Funktion in eine andere Funktion wickle, die uns die Länge einer Zeichenfolge sagt, und diese Funktion heißt Lin. Es ist 31 gezählt. Das bedeutet also, dass innerhalb dieser Zeichenfolge 31 Zeichen enthält. Wenn ich das jetzt so ändere, dass es nicht existiert, existiert die Datei nicht. Es hat uns eine Länge von 0 Zeichen gegeben. Also innerhalb dieser if-Anweisung sind
wir in der Lage, diese len Funktion zu verwenden und in die len Funktion eingewickelt ist die Funktion. Und wenn die Datei nicht existiert, werden wir 0 bekommen. Und wenn die Datei existiert, bekommen
wir etwas größer als 0. Also ziehe ich das wieder aus dem Weg. Kommentieren Sie das. Wenn ja, wenn die Länge von D und der Pfad ist die, okay, so haben wir diese if-Anweisung geschrieben. Also die erste Funktion dort ist die Länge, die das ist, alles in diesen Klammern. Und wenn wir hier Gewürze treffen, wird
es uns den Ausdruck in der Mitte zeigen. Und der Ausdruck in der Mitte ist dieser. Wenn also die Länge dessen, was von D zurückgegeben wird, wenn diese Länge größer als 0 ist, dann können wir voran gehen und die Arbeitsmappe öffnen. Also kopiere ich dieses Exemplar. Also sollte ich sagen. Und das werde ich hier setzen. Sonst tun Sie etwas. Was wollen wir also tun, wenn die Datei nicht existiert? Wir möchten den Benutzer auffordern, die Datei auszuwählen. Um das zu tun, benötigen
wir ein Dateidialogfeld. Dafür brauchen wir eine Variable. Also ist es, es ist oben, das ist Topf des Büros oder es ist in Office integriert, sollte ich sagen. Sie gehen auf den Dateidialog. Nun, dies ist nur ein generisches Objekt, das blinkt. Daher müssen wir dieses Objekt setzen. Also mache ich das jetzt einfach. Jetzt ist das Dialogfeld Datei ein untergeordnetes Element des Anwendungsobjekts. Und wie ich in der letzten Lektion erwähnt habe, ist die
Anwendung der Arbeitsmappensammlung und der Arbeitsmappenobjekte offensichtlich. Also brauche ich Anwendung, ich habe das falsch verschüttet. Punktdatei-Dialog. Es gibt ein paar verschiedene Dateidialogtypen. Und zum Glück sagt es uns, welche wir zur Verfügung haben. Also wollen wir eine Dateiauswahl. Aber die anderen Typen, die wir dort haben, gibt es eine Dateiauswahl, äh, Ordner pika, öffnen Dialog und einen Speichern unter Dialog. Aber ich möchte Aktenauswahl. Sobald der Code diese Zeile ausgeführt hat, hat
er dieses leere Objekt in ein Dateidialogfenster gesetzt, das zur Anwendung gehört. Und oben im Dateidialog befindet sich ein Dateidialog, Datei pika. Es gibt ein paar andere Eigenschaften, die ich sitzen möchte. Zum Beispiel möchte ich dem Benutzer nicht erlauben, mehr als eine Datei auszuwählen. Ich möchte nicht, dass sie eine Datei auswählen, die nicht der richtige Dateityp ist. Und ich möchte dem Benutzer auch helfen, indem ich beginne, in einem bestimmten Ordner zu suchen. Um das zu tun, müssen
wir mehr Eigenschaften dieses Dateidialogobjekts setzen. Und dazu werde ich eine Width-Anweisung verwenden. Also im Grunde eine with Anweisung ermöglicht es Ihnen, mehrere Eigenschaften gleichzeitig zu sitzen. Also werde ich das einfach aufstellen. Und ähnlich wie bei einer if-Anweisung benötigt
die width - Anweisung eine end - Anweisung. Jetzt in dieser Width-Anweisung, können
wir mehrere Eigenschaften auf einmal sitzen. Eine andere Sache ist auch, dass
wir innerhalb dieser mit Aussagen nicht wieder deklarieren müssen, welche Variable welche spricht. Zum Beispiel, wenn ich einen Filter setzen möchte, der filtert, welche Art von Dateien in diesem Dialogfeld „Datei“ ausgewählt werden können. Ich muss nicht zuerst den Objektnamen und dann die Eigenschaft sagen. Ich kann einfach mit der Eigenschaft oder dem Punkt auf die erste Eigenschaft beginnen, die ich
immer ändere, wenn ich ein Dateidialogfeld sitze, ist, dass ich die Filter gereinigt habe. Also denke ich, dass dies eine untergeordnete Eigenschaft des Dateidialogobjekts ist, und clear ist eine untergeordnete Methode der filters-Eigenschaft. Und der Grund, warum ich das tue, ist, weil Filter für diese Objekte im Cache gespeichert sind. Das bedeutet, dass, wenn ich eine Reihe von
Filtern sitze und dann diesen Dialog ausblende und dann wieder die Filter von dem letzten Mal gezeigt habe, dass ich das Dialogfeld in der neuen angezeigt habe. Es ist also immer nur eine gute Übung, die Filter zu löschen. Und das nächste, das hinzugefügt werden soll, ist, einen Filter hinzuzufügen, damit wir eine CSV-Datei auswählen können. Also wieder verwenden wir die filters-Eigenschaft. Aber dieses Mal möchte ich einen hinzufügen. Es gibt also die Add-Methode. Jetzt sagt es uns, was wir liefern müssen. Also müssen wir eine Beschreibung als String und Erweiterung eine Zeichenfolge und eine Position liefern. Die Beschreibung ist also ziemlich unkompliziert. Es ist eine Zeichenfolge, die Sie nur eingeben können, um zu beschreiben, was Sie ihnen erlauben, auszuwählen. Die Erweiterungen sind die Dateierweiterungen oder die Zeichen, die nach dem Punkt angezeigt werden. Und die Position ist, wenn Sie mehr als eine haben, welche Position in dieser Liste sollte dieser Listenpunkt B? Beginnen Sie also mit CSV-Dateien, der Beschreibung und der Erweiterung. Ich werde hier einen Platzhalter verwenden. Ich werde in einer Sekunde erklären, warum. Was ein Platzhalter tut, ist, dass es Windows sagt , dass ich ein beliebiges Zeichen vor diesem Zeichen akzeptiere. Also, was es tun wird, ist, nach dem Patent
eines beliebigen Charakters oder irgendwelchen Zeichen zu suchen , und dann Punkt CSV, was bedeutet, dass es alles herausfiltern wird, was keine CSV-Datei ist. Ich möchte auch verhindern, dass der Benutzer mehrere Dateien auswählen kann, obwohl er theoretisch mehrere Dateien in diesem Fall auswählen kann.
Ich möchte nicht, dass sie es tun, ich möchte nur zulassen, dass sie eine Datei auswählen. Das ist also. Mehrfachauswahl falsch. Also setze ich es auf falsch. Und um dem Benutzer zu helfen, möchte ich
sicherstellen , dass er nicht zu lange herumjagen muss. Also habe ich eine gebildete Vermutung, dass es in meinem Dokumentenordner sein wird. Daher möchte ich, dass sie anfangen, in diesem Ordner zu suchen. Und um das zu tun, kann
ich sagen, dass der anfängliche Dateiname gleich ist und ich werde nur diese Konstante liefern. Also, was das tun wird, ist, dass es das Fenster öffnet und es wird in diesem Ordner sein. Und so wäre die letzte Eigenschaft dots show, die wir den Datei-Dialog dem Benutzer präsentieren. Also gibt es hier einen Haken. Der Fang besteht darin, dass das angezeigte Formular, d. h. das Dateidialogfeld, ein modales Formular
ist. Das bedeutet also, wenn das Formular angezeigt und auf dem Bildschirm vorhanden ist, bedeutet
dies, dass kein Code ausgeführt werden kann. Aber das ist okay. Das können wir tatsächlich zu unserem Vorteil nutzen. Also, was ich tun werde, ist, dass ich
diese Punkt-Show-Eigenschaft in eine if-Anweisung setzen werde . Das bedeutet also, wenn es diese Zeile auswertet, wird
es dem Benutzer tatsächlich das Dateidialogfeld anzeigen, aber es wurde nicht fortgesetzt, weil es nicht möglich ist, es ist modal. Daher wird im Hintergrund kein Code ausgeführt. Sobald sie jedoch eine Datei und die Hitze ausgewählt haben, okay, solange es über diese Zeile kommt, bedeutet dies, dass sie nicht nur das Formular gesehen haben, sie haben einen gefallenen Treffer OK ausgewählt. Und wenn Show gleich false ist, bedeutet
das, dass sie tatsächlich auf Abbrechen geklickt haben und dieses Dateidialogfeld geschlossen haben. Also haben wir hier zwei Bedingungen. Wir haben, wenn sie eine Datei ausgewählt haben oder fünften Treffer OK. Und wenn sie aus diesem Dateidialogfeld abgebrochen haben, wenn sie eine Folsäure ausgewählt haben und gehen Sie voran und arpanet, wie wir hier oben getan haben. Also werde ich nur diese Zeile kopieren. Wahrscheinlich einfacher, nur um es wieder oben, weil ich werde es ändern, aber das ist okay. Und ich werde das ganze Zeug in den offenen Argumenten Klammern entfernen. Nun, was will ich liefern? Ich möchte die Elemente bereitstellen, die sie ausgewählt haben. Also, das ist Punkt ausgewählte Elemente. Nun, da der Schriftartdialog möglicherweise mehrere Auswahlen zulassen kann, wird
dieses Objekt hier diese Eigenschaft eine Liste ist, daher muss ich den Index angeben. Und wegen der erlaubten ihnen, einen auszuwählen, wird
der Index immer nur eins sein. Aber wenn es zum Beispiel mehrere gäbe, müssten
Sie sie dann durchlaufen und eine Aktion nacheinander ausführen. Das ist also gut. Wenn die Show wahr ist, bedeutet
das, dass sie es gesehen haben, haben sie ok getroffen. Daher möchte ich, dass Sie die Datei öffnen, wenn sie ausgewählt ist. Andernfalls möchte
ich, wenn sie auf Escape oder Cancel geklickt haben, ein Meldungsfeld anzeigen. Nicht wirklich eine gute Zeit mit seiner Mac-Tastatur. Und ich möchte auch das U-Boot verlassen. Also Exit Sub ist ein wenig anders als N sub. N sub ist der letzte Endpunkt der gesamten Routine. Und Exit Sub ist nur ein Punkt, an dem du dazu kommen kannst, wir werden sagen, okay, ich habe genug. Ich werde das U-Boot anmutig verlassen. Das bedeutet, dass, wenn wir diese if-Anweisung überschritten haben, es bedeutet, dass entweder die Datei existiert und wir sie geöffnet haben, oder die Datei wurde ausgewählt und wir haben sie auch geöffnet. Wir werden nicht in der Lage sein, diesen Punkt mit anderen Mitteln zu erreichen, weil wir das U-Boot verlassen haben, bevor es zu dieser Codezeile gelangen kann. Das bedeutet, dass wir die gleichen Aktionen ausführen können, die wir zuvor gemacht haben, was Speicherfehler in Version war. Schließen Sie die Arbeitsmappe, und schalten Sie die Anzeigewarnungen wieder ein. Okay, also sind wir fast bereit, das zu testen. Was ich aber zuerst tun werde,
ist, dass ich in meinen Ordner „Dokumente“ springen werde und ich
werde nur den Dateinamen ändern, so dass er definitiv nicht existiert. Also werde ich nur eins am Anfang hinzufügen. Ich kann es genauso gut auch für dieses tun. Jedenfalls. Also lassen Sie uns diesen Code testen. Ich werde es mit F8 durchgehen. Also habe ich die Warnungen deaktiviert und die Datei existiert nicht, weil ich den Dateinamen geändert habe. Also, jetzt wird es auf diese Seite der if-Anweisung springen, die andere Bedingung, es wird dieses Objekt sitzen. Jetzt werden wir sagen, dass das Objekt gesetzt wurde. Es ist ein Dateidialogfeld und es ist ein Dateidialog, eine Dateiauswahl. So wird die nächste Zeile in die Width-Anweisung eingegeben. Also werden wir die Filter löschen. Wir haben das Fenster noch nicht gesehen, weil wir die Punkt-Show nicht getroffen haben. Und wir werden den CSV-File-Filter hinzufügen. Wir werden die Mehrfachauswahl ausschalten. Wir legen den anfänglichen Dateipfad zu dem Ordner ,
so dass er in meinem OneDrive, Eigene Dateien Ordner angezeigt wird. Und jetzt, nachdem ich F8 gedrückt habe, wird
es uns das Dateidialogfeld zeigen oder hoffentlich. Okay, da gehen wir. Also und es befindet sich im Ordner Eigene Dateien. Sie würden reingehen. Das ist die Datei, die ich gerade umbenannt habe. Also werde ich sie einfach auswählen. Drücken Sie OK. Also jetzt habe ich eine osmanische Seite, die ausgewählten Elemente Index von eins. Und ich werde dieses WB-geöffnete Objekt mit dem Befehl Arbeitsmappen dot open sitzen, die Datei öffnen wird, die wir in diesem Dateidialogfeld ausgewählt haben. Also, wenn Sie F8 noch einmal treffen. Oh, okay, also ist der Code bis zum Ende übersprungen, also treten wir nicht mehr durch. Aber ich kann bestätigen, dass es abgeschlossen ist , weil wir die Datei haben, die wir gerade gespeichert haben. Also hatten wir das, weil wir es umbenannt haben. Denken Sie daran, wir haben eine davor gesetzt, zurück in, im Datei-Explorer, aber wir haben gerade erstellt, dass es gut zur aktuellen Zeit hier ist. So ist es abgeschlossen, aber es ist einfach irgendwie von uns weggelaufen. Der Code ist vor uns weggelaufen. Jetzt müssen Sie vorsichtig sein, wenn Sie Ihren Code debuggen und durchlaufen. Dass manchmal der Code von Ihnen weglaufen kann und er
einfach anfangen kann , sich selbst mit voller Geschwindigkeit auszuführen. Was offensichtlich ein Ideal ist, besonders wenn Sie debuggen, versuchen
Sie sicherzustellen, dass die Dinge nicht kaputt sind, bevor Sie es mit Tempo ausführen. Und der Grund, warum dies geschieht, ist irgendwie unbekannt, aber wir kennen die bestimmten Bedingungen, die es eintreten lassen. Und diese Bedingungen, wenn ein Remoteprozeduraufruf auftritt
, der diese Arbeitsmappe öffnet, und es kehrt zurück zu diesem Codemodul, um mit dem Code fortzufahren. In diesem Fall ist die Arbeitsmappe geöffnet,
die von einem Prozeduraufruf gesendet wird, um diese Arbeitsmappe zu öffnen. Und dann, wenn es fertig ist, dieser Befehl, kommt
er direkt zurück in diesen Code und er wird nur in vollem Tempo ausgeführt. Was Sie jetzt tun können, um das zu umgehen, ist, Ihren Code mit Haltepunkten zu verwerfen. Und der Grund, warum Sie das tun, ist, dass, wenn es ausgeht und seinen Remoteprozeduraufruf ausführt und es zurückkommt und es voll Tempo ausführt. Es wird am nächsten Haltepunkt anhalten. Also lasst uns das noch mal versuchen. Ich werde F5 drücken und wir sollten sofort sehen, wie der Dateidialog erscheint. Aber wenn wir eine Datei auswählen, wird
sie bei diesem endif oder diesem endif aufhören. Und ich würde OK schlagen. Boom, so dass es am ersten Haltepunkt nach der Arbeitsmappe geöffnete Zeile gestoppt. Und ich kann einfach weitermachen. Ok, also fasst das dieses praktische Beispiel zusammen. Zusammenfassend, was wir getan haben, ist, dass wir zuerst die Warnungen ausgeschaltet haben. Wir haben dann getestet, um zu sehen, ob die Datei existiert und wir tun das mit der Funktion. Und das wird uns einen Dateinamen zurückgeben, wenn die Datei in diesem Verzeichnis existiert, und wenn nicht, wird sie uns nichts zurückgeben. Daher werden wir die Länge der Zeichenfolge testen. Wenn Funktion zurückkehrt und wenn die Datei existiert, werden
wir nur direkt in springen und diese Datei öffnen. Aber wenn die Datei nicht existiert, wenn wir nicht automatisch lokalisieren können, dann werden wir den Benutzer über ein Dateidialogfeld fragen. Wir sitzen dann mehrere Eigenschaften auf einmal. Und während wir in dieser Width-Anweisung sind, hatten
wir auch eine if-Anweisung, die die Tatsache nutzte , dass
die Falldollar-Box es modal anzeigt, was uns
im Grunde ermöglichte, auf dieser Zeile zu pausieren und Weiß für die -Benutzer, um eine Datei auszuwählen, oder drücken Sie auf Abbrechen und führen Sie dann den Code entsprechend aus. Also öffnen wir entweder den Fehler, den sie ausgewählt haben, oder wir brechen einfach ab und beenden das U-Boot. Wir fahren dann wie gewohnt fort, das heißt, Erin Version der Datei zu speichern und die Datei zu schließen, ohne zu speichern. Das schließt diese Lektion ein. Zusammenfassend haben wir heute gelernt, wie man Dateidialogfelder erstellt. So passen Sie unser Dialogfeld an. Beispiel: Erstellen eines Ordners oder einer Dateiauswahl, so dass der Benutzer mehrere Dateien auswählen kann, das Fenster in
einem bestimmten Ordner beginnt und Dateien nach Dateierweiterung herausgefiltert werden kann. Wir haben gelernt, wie man mit der Antwort aus der USA Ende,
die ich Ihnen mit Aussagen vorgestellt habe, umzugehen . Darüber hinaus waren die integrierten VBA-Funktionen, die wir behandelt haben die DIR-Funktion und die LEN-Funktion. Ich hoffe, Sie haben dieses Video genossen und wir sehen uns im nächsten.
4. 04 – - 11 – Laufen auf Events: Willkommen bei Lektion 11, auf Veranstaltungen laufen. In VBA. Wir sind in der Lage, einige Ereignisse abzufangen, die durch den Benutzercode oder andere Umgebungsgründe ausgelöst werden. Nur ein paar Beispiele für einige Ereignisse. Klicken Sie auf eine Schaltfläche, wenn ein Blatt zu
einer Arbeitsmappe hinzugefügt wird oder wenn eine Änderung an einem Arbeitsblatt vorgenommen wird. Abfangen von Ereignissen kann sehr nützlich sein, um sicherzustellen, dass unsere VBA-Anwendungen so funktionieren, wie wir sie beabsichtigen. In dieser Lektion werden wir die Frage beantworten, was sind Ereignisse? Wir werden über die verschiedenen Ereignistypen und Event-Umfang sprechen. Und wir werden ein paar praktische Beispiele für die Verwendung von Ereignissen in unserem Code machen. Wir werden auch über die integrierte VBA-Funktion namens links sprechen. Lassen Sie uns ein wenig detaillierter darüber sprechen, welche Ereignisse tatsächlich sind. Ereignisse oder einfach eine Aktion oder ein Trigger, der aufgetreten ist. Ein Ereignis kann von einem Benutzer programmgesteuert oder nach Datum oder Uhrzeit initiiert werden. Es gibt zahlreiche Ereignisse oder Trigger, die wir in VBA verwenden können, die Sie in der Lage sind, Code
abzufangen und dann sofort auszuführen, sobald das Ereignis erkannt wird. Um unsere VBA-Anwendungen so robust wie möglich zu gestalten. Manchmal müssen wir Ereignisse abfangen, damit wir eine konsistente Benutzererfahrung gewährleisten können . Meine Philosophie funktionale konsistente VBA-Anwendungen zu erstellen, besteht darin, eine Sperre so weit wie möglich zu steuern und gleichzeitig die Aktionen des Benutzers
abzufangen und sie in einer Weise zu behandeln, die ich angebe, was dies tut entfernt so viele Umgebungsvarianzen wie möglich, was zu unerwarteten Problemen mit den von uns erstellten Anwendungen führen kann. Ein einfaches Beispiel hierfür kann sein, wenn ein unerfahrener Benutzer
meine VBA-Arbeitsmappe oder -Anwendung öffnet und keine Makros aktiviert. Sie können erkennen, dass die Anwendung, die ich gebaut habe, um kaputt zu sein, und das liegt daran, dass sie nicht tut, was sie erwarten, es zu tun, glauben Sie es oder nicht, dies ist ein ziemlich häufiges Problem , das ich am Arbeitsplatz erlebt habe. Was wir tun können, um dies zu umgehen, ist eine Arbeitsmappe in einem standardmäßig
gesperrten Zustand einrichten und Logik in der Arbeitsmappe öffnen Ereignis anwenden, was bedeutet, dass das Makro aktiviert wurde und dann Code
ausführen, der die -Anwendung und entsperrt sie. Ich werde Ihnen später in der Lektion genau zeigen, wie Sie das tun. Lassen Sie uns über den Ereignisbereich sprechen, ähnlich der Arbeitsmappe Objektmodellhierarchie wie im Detail in meinem Anfängerkurs diskutiert, gibt es mehrere Ebenen oder Arten von Ereignissen. Dies sind Arbeitsblattereignisse, Arbeitsmappenereignisse, Anwendungsereignisse Verwenden Sie das Formular Ereignisse, Chat ,
Ereignisse, auf Zeitereignisse und auf wichtige Ereignisse. Grundsätzlich sind dies die Ereignisse, die auf diesen diskreten Ebenen der Anwendung auftreten. Beispielsweise wäre das Ändern einer Zelle ein Arbeitsblattereignis. Das Hinzufügen eines neuen Arbeitsblatts zu einer Arbeitsmappe wäre ein Arbeitsmappenereignis im Fenster, Minimieren, Maximieren oder Ändern der Größe. Das wäre ein Anwendungsereignis. Klick auf eine Schaltfläche auf einem Benutzerformular, das wir erstellt haben, wäre ein Benutzerformular Ereignis auf Änderung einer Graphenserie oder Graph Neugröße wäre ein Diagrammereignis. Wenn eine bestimmte Zeit eintritt, wäre ein termingerecht Ereignis. Und wenn bestimmte Tasten auf der Tastatur gedrückt werden, wäre ein onKeyEvent. Bitte beachten Sie, dass es sich bei dieser Liste nicht um eine vollständige Liste von Veranstaltungen handelt. Lassen Sie uns nun auf die Verwendung von Ereignissen in unserem Code. In diesem praktischen Beispiel möchte
ich sicherstellen, dass der Benutzer Makros aktiviert. Und um dies zu tun, möchte ich den Standardstatus der Arbeitsmappe ändern. Was ich damit meine, ist, dass ich alle Arbeitsmappenblätter nach einem ausblenden möchte. Und derjenige, der ausgeblendet wurde, enthält eine Meldung, in
der der Benutzer aufgefordert wird , Makros zu aktivieren und die Arbeitsmappe erneut zu öffnen. Wenn sie dann Makros aktivieren und die Arbeitsmappe öffnen, werde
ich das Ereignis des Öffnens der Arbeitsmappe abfangen,
was bedeutet, dass sie definitiv Makros aktiviert haben und dann
diese ausgeblendeten Blätter anzeigen und die Meldung ausblenden, in der sie aufgefordert werden, zu aktivieren -Makros. Weil wir Ereignisse abfangen wollen, die zur Arbeitsmappe gehören. Ich gehe in das, dieses Arbeitsmappenobjekt. Und ich möchte Ihre Aufmerksamkeit auf diese wahren Dropdown-Felder oben auf der IDE lenken. Also die auf der linken Seite zeigt uns das Objekt, über das wir in diesem Fall sprechen, wir wollen über eine Arbeitsmappe sprechen, die die Arbeitsmappe ist. Und die andere Seite kann uns alle Ereignisse zeigen , die in diesem Arbeitsmappenobjekt abfangen konnten. Wie Sie sehen können, gibt es eine ganze Reihe. Also, was das getan wird, ich bin mir nicht sicher, ob dies auf dem Bildschirm sichtbar ist, aber was ich tun werde, ist, es einfach zu kopieren und einzufügen. Was dies getan hat, hat diese Unterstruktur automatisch erstellt. Und es ist ein privates Sub, privat,
was bedeutet, dass es zu diesem Arbeitsmappenobjekt gehört. Und es ist nicht von allen anderen Blättern oder Codemodulen sichtbar es sei denn, wir beziehen sich explizit zuerst auf das Objekt dieser Arbeitsmappe. Daher wird dieses Sub automatisch ausgeführt, wenn die Arbeitsmappe geöffnet wird. Es gibt nichts weiter, was wir tun müssen, um sicherzustellen, dass dieses Unterteil läuft auf Arbeitsmappe geöffnet. Abgesehen davon, dass
die Makros in der Arbeitsmappe selbst aktiviert sind. In diesem Behalten möchte ich also durch die Arbeitsblätter blättern und ein bestimmtes Arbeitsblatt ausblenden. Also werde ich beginnen, indem ich ein neues Blatt hinzufüge, und ich werde eine Nachricht auf diesem Blatt setzen, die besagt, bitte aktivieren Sie Makros. Also hier ist unser Arbeitsbuch. Ich werde ein neues Blatt hinzufügen, und ich werde dieses ein aktiviertes Blatt nennen. Und ich werde und wir werden diesen Hintergrund auf Weiß setzen. Du sagst also nicht diese Gitter. Und ich werde auch alles darunter verstecken. Und auf dieser Seite werde ich sicherstellen, dass die Zelle groß genug ist. Und ich werde das rot machen. Und wir werden es nur mutig machen, nur so dass es
sich auf einer könnte tatsächlich die Größe erhöhen abhebt . Und dann nur ja, cool. Die Absicht ist also, dass, wenn sie die Arbeitsmappe geöffnet haben und sie keine Makros
aktiviert haben oder sie sehen werden, dieses Blatt ist, das Aktivierungsblatt, alle anderen werden ausgeblendet und es wird ihnen klar sagen, was sie tun müssen , damit dieses Makro funktioniert. Also werde ich einfach voran gehen und schnell die anderen Arbeitsblätter ausblenden. Also haben wir diese jetzt aktiviert, so dass sie sehen werden, wenn sie die Arbeitsmappe geöffnet wenn sie keine Makros aktivieren. Also springen wir zurück in die IDE. Und lassen Sie uns an dieser Arbeitsmappe arbeiten, öffnen Sie behalten. Denken Sie an die Objekte, die wir brauchen werden. Wir benötigen ein Arbeitsmappenobjekt, bei dem es sich um die Arbeitsmappe handelt, die wir gerade betrachten. Wir werden auch ein Arbeitsblattobjekt benötigen. Und was ich tun möchte, ist, dass ich jedes Blatt in der Arbeitsmappe durchlaufen möchte und
die Arbeitsmappe je nach Name ein- oder ausblenden möchte. Also weiß ich, dass dieser hier sichtbar sein wird und der Rest verborgen wird. Daher kann ich nur diese Namenseigenschaft betrachten und feststellen, ob ich diese Arbeitsmappe ein- oder ausblenden möchte. Also haben wir dies zu Beginn natürlich getan, durch jedes der Arbeitsblätter
gefahren haben. Also werde ich das einfach schnell machen. Also haben wir nach Schleife gefragt. Das geht also durch jedes Arbeitsblatt in der Arbeitsmappe Schattierungen Sammlung. Aber bevor ich fortfahre, möchte ich etwas erklären, da wir diese Arbeitsblätter willkürlich durchlaufen
werden. Wenn nur ein Blatt sichtbar ist, das wir haben. Und die erste Form, die wir in dieser Schleife
begegnen, ist eine, die wir verstecken wollen, die brechen wird. Es können nicht alle Arbeitsblätter in der Arbeitsmappe ausgeblendet werden, die mindestens eine Form sichtbar sein müssen. Also, was ich tun werde, ist, dass ich das in zwei separaten Schleifen machen werde. Zuerst ist man sicher, dass die, die wir zeigen wollen, und dann die zweite ist die verstecken, die wir verstecken wollen. Also werde ich den Namen des Arbeitsblatts abfragen und es ist aktiviert Blatt. Nun, weil dies derjenige ist, den wir zeigen wollen, wollen wir das Negieren davon. Wir sind nur an den Arbeitsblättern interessiert, die diesen Namen nicht haben. Daher werde ich nur 11 Sache hinzufügen, was nicht ist. Also wird es nur diese if-Anweisung eingeben. Wenn der Name nicht aktiv Blatt, dann und wir werden Argument für das nennen und wir wollen es XL sichtbar machen. Und wenn es auf Sie verschwindet, drücken Sie einfach den Kontrollraum und
es bringt es zurück Punkt x0, xo machbar. Cool. Jetzt wird die nächste Schleife, es wird zu kopieren und einfügen. Ich werde das loswerden und nicht, und ich werde das ändern. Machen Sie es versteckt. Also werde ich jetzt speichern und das wird die sichtbaren Zustände jedes der Blätter beibehalten und auch eine andere Sache, die Fehler oder Fehler auslösen könnte, ist der geschützte Zustand des Blattes oder der Arbeitsmappe. So haben Sie möglicherweise einen geformten Schutz, der nur dem Benutzer erlaubt, bestimmte Zellen zu bearbeiten. In diesem Fall möchten Sie das Blatt entfernen, bevor Sie es heiß oder zeigen, und Sie tun das so. Und hier würden Sie auch ein Passwort angeben, wenn Sie eines hinzugefügt haben.
Es ist eine gute Idee, wenn Sie ein Passwort haben, um das als Konstante zu speichern,
stellen Sie sicher, dass, nachdem wir die sichtbare Eigenschaft festgelegt haben, um es erneut zu schützen, das ist, wenn Sie eine -Form, die geschützt ist. Aber in diesem Fall tun wir es nicht. Ich werde das einfach löschen. Dasselbe nochmals für die Arbeitsmappe. Wenn Sie über eine geschützte Arbeitsmappe verfügen und sie derzeit geschützt ist, können
Sie dies einfach außerhalb der Folate tun, bevor sie in die vollständige Schleife eintritt. Da diese Arbeitsmappe nicht geschützt ist, werde ich das nur löschen. Wir können nun diesen Code ausführen, um zu testen, was passiert, wenn ein Benutzer
die Arbeitsmappe öffnet , ohne sie tatsächlich schließen und erneut öffnen zu müssen. Also mache ich das jetzt einfach. Wir gehen durch, wenn ich oh, also werden wir Laufzeit-Ära. Objektvariable oder mit Blockvariable nicht gesetzt. Das ist gut. Ich bin froh, dass wir einen Laufzeitfehler haben, also debuggen wir ihn einfach. Es steht hier auf dieser Linie. Also für jedes Arbeitsblatt, also gibt es nichts. Weißt du, was wir nicht getan haben? Wir haben das Objekt nicht festgelegt, das Arbeitsmappe ist. Also werde ich das einfach schnell ändern. Da diese Arbeitsmappe, nur das Hinzufügen dieser Zeile nichts bewirkt, weil der Code bereits dieses Gesetz verabschiedet ist. Und was ich tun werde, ist, dass ich es einfach hier nach oben ziehe, so dass es dieses Objekt festlegt. Und sagen wir jetzt, ja, okay, das funktioniert, wenn jetzt
den Arbeitsblattnamen abfragt und wir wollen nur diese if-Anweisung eingeben, wenn der Name nicht aktiv Form und das aktuelle Arbeitsblatt mit Blick in dieser Schleife ist tatsächlich die Form aktivieren. Also überspringt es Grad gehen. Und das aktuelle Blatt ist Custdata. Und doch wollen wir, dass dieser sichtbar ist. übergeordnete Eins wird ausgegeben, die dort ist. Ja, großartig. Ok, geh. Ich warte nur, bis wir zur nächsten Schleife kommen. Okay, jetzt sind wir in der zweiten Schleife und das ist diejenige, die die Laken verstecken wird, die wir versteckt haben wollen. Und der aktuelle ist ein aktiviertes Blatt. Und es ist versteckt. Das 1 vierte gegeben hat noch nicht, und es hat sich nicht mehr versteckt. Also, wenn wir das dann minimieren, stelle
ich sicher, dass dieser Code beendet ist. Ich werde dies minimieren und Excel aufrufen. Ich sehe also, dass die Aktivierungsmakromeldung verschwunden ist. All das Blatt ist verschwunden, und es hat alle anderen Blätter gezeigt, die wir zeigen wollen. Was passiert, wenn mehrere Blätter versteckt werden sollen? Wir können zusätzliche Kriterien hinzufügen oder wenn es zu dieser if-Anweisung ist, die innerhalb der Schleife ist, die die Formen ausblenden soll. Aber das kann irgendwie außer Kontrolle geraten, besonders wenn Sie viele Arbeitsblätter in der Arbeitsmappe haben, gibt es einen einfacheren Weg. Zurück in Excel. Ich füge einfach ein neues Arbeitsblatt hinzu und zeige Ihnen, wie. Also habe ich eine neue Form hinzugefügt, die jetzt SHA-2 heißt. Was ich mache, ist eine Namenskonvention im Blattnamen zu verwenden. Also stelle ich sicher, dass die ersten sieben Zeichen ein Unterstrich versteckt sind, und es könnte zahlreiche Gründe geben, warum Sie Blätter versteckt haben, könnte sein, dass Sie einen Datensatz haben, den Sie vor dem Benutzer verstecken möchten. Oder es könnte sein, dass Sie eine Reihe von Einstellungen für
eine Form haben , von der Sie lesen, aus Code. Es ist im Grunde alles, was Sie nicht wollen, die Bearbeitung. Also lassen Sie uns voran und fügen Sie dies unserer if-Bedingung hinzu. Lassen Sie mich Ihnen zunächst im unmittelbaren Fenster zeigen, wie ich diese Namenskonvention verwenden werde . Also werden wir eine integrierte VBA-Funktion verwenden, die links aufgerufen wird. Und was Lift tut, ist, dass es uns
eine bestimmte Anzahl von Zeichen von der linken Seite der Zeichenfolge zurückgibt . Und wir geben an, wie viele Zeichen wir von der linken Seite der Zeichenfolge wollen. Also werde ich einfach links tippen und dann sehen Sie die Argumente, die wir gemacht haben. Also haben wir eine Schnur und eine Schnur, ich tippe sie einfach aus. Das ist also die Form, die wir gerade der Arbeitsmappe hinzugefügt haben. Und ich werde Komma treffen, und es ist die ersten sieben Zeichen. Also möchte ich, dass es die ersten sieben Zeichen dieses Blattnamens zurückgibt. Und wie Sie sehen können, hat
es die ersten sieben Zeichen zurückgegeben, die in der Schule versteckt sind, weil wir nun die ersten sieben Zeichen des Arbeitsblatts Namen zurückgegeben haben. Wir können diese Logik in unserer if-Anweisung verwenden. Also werde ich einfach wieder in den if-Block
LCF springen , weil wir die erste if-Bedingung dort haben und es ist kein anderes, Es ist ein anderes. Wenn wir eine andere Bedingung haben, wollen wir testen. Links, wie wir gerade gelernt haben, von der Zeichenfolge, die Arbeitsblattname ist. Und es sind die ersten sieben Zeichen gleich versteckten Unterstrich. Dann. Und ich möchte auch dasselbe tun. Ein anderer Weg, den wir erreichen können, ist auch das Hinzufügen einer All-Bedingung in unserer if-Anweisung. Also zeige ich es dir schnell, oder dann können wir das einfach kopieren. So können wir tatsächlich zwei Bedingungen zu dieser if-Anweisung hinzufügen. Aber ich werde das einfach löschen. So können wir das jetzt ausführen und nur testen, um zu sehen, ob dieses Arbeitsblatt verschwindet. Ok? Und wir haben hier tatsächlich getestet. Wenn wir also das Blatt auswählen, können
wir sagen, dass die Eigenschaft des Blattes bereits ausgeblendet ist, geformt versteckt ist, aber ich werde diese einfach aus dem Weg bewegen. Ja, das Blatt, das ich erstellt habe, das ausgeblendete,
unterstrichene Daten war , ist aus der Arbeitsmappe verschwunden. Wenn Sie diese Art von Funktionalität testen, die auf Open und UNCLOS ausgeführt wird, ist
es ratsam, sich eine Routine zu erstellen, die den Status
zurücksetzt, damit Sie ihn
schnell erneut testen können , damit Sie nicht jedes der Arbeitsblätter und wählen Sie die sichtbare Eigenschaft aus. Also werde ich das jetzt einfach schnell machen. Und dann zeige ich Ihnen, was Sie sonst noch nutzen können. Und ich werde das in einem neuen Code-Modul tun, Modul drei
einfügen. Ok. Also kühle ich es zurücksetzen Arbeitsmappe, die ich jederzeit Kohle kann. Und das wird es in den Zustand zurückversetzen, in
dem sich die Arbeitsmappe befinden sollte, wenn sie geöffnet wird. Ich werde meine Variablen benennen. Wieder. Ich brauche zwei For Loops. Und die erste Schleife wird für die Auditoren sein, die wir zeigen wollen. Und die zweite Schleife wird vier Elemente sein, die wir verstecken wollen. Die, die wir zeigen möchten, ist derjenige, der
Xite aktiviert ist , weil dies das einzige Blatt ist, das wir aktivieren möchten, wenn die Arbeitsmappe geöffnet wird. Und ich möchte auch die LCA für die versteckten unter der Schule hinzufügen. Okay, also können wir das jetzt verwenden, um unsere Arbeitsmappe
wieder in den Zustand zurückzusetzen , in dem sie sich befinden sollte, wenn sie geöffnet wird. Ich werde das jetzt mit F5 testen. Oh gut, wir müssen über Ungleichheit reden. Und ich bin froh, dass wir diese Laufzeitfehler bekommen, weil es uns wirklich hilft, zu lernen. Wenn also Debug trifft, sagt
es uns, was falsch ist. Also, wenn nicht Arbeitsblatt 0.9c und der aktuelle Arbeitsblatt Punktname aktiv Blatt. Es ist eine Schnur. Okay, Sie können hier sehen, dass ich ein Minus anstelle eines Gleichen habe. Das ist also nur ein Beispiel für das Debuggen Ihres Codes und das Testen Ihres Codes, um sicherzustellen, dass er funktioniert und robust ist. Also traf wieder F5. Und ich gehe zurück zu meinem Buch. Und wie Sie sehen können, ist nur dieses Blatt sichtbar. Eine andere Möglichkeit, diese Routine zu verwenden, ist, wenn die Arbeitsmappe geschlossen ist. Nehmen wir an, für ein Beispiel, ein Benutzer verwendet es und sie haben Makros aktiviert, und dann werden alle Blätter ausgeblendet, aber sie speichern die Arbeitsmappe und verwenden dann ein true kommt zusammen. Und sie haben keine Makros aktiviert, da dieser Benutzer die Arbeitsmappe
bereits gespeichert und die Blätter ausgeblendet hat. Ich möchte sicherstellen, dass jedes Mal, wenn die Arbeitsmappe geschlossen wird, diese Blätter ausgeblendet sind und die Meldung angezeigt wird, die ihnen auffordert, Makros zu aktivieren. Also werde ich nur diesen Unternamen kopieren und ich werde zurück in das dieses Arbeitsmappencode-Modul springen. Und ich werde diese Ereignisse einfach durchschauen, um eines zu
finden, das den Benutzer beim Schließen der Arbeitsmappe auffordert. Dann bin ich in der Lage, die Form sichtbare Eigenschaft auf das zu setzen, was ich will. Er würde vor der Nähe gehen. Und es wurde eine Routine erstellt, die das Close-Ereignis
der Arbeitsmappe abfängt und es uns ermöglicht, Code auszuführen, bevor die Arbeitsmappe tatsächlich geschlossen wird. Also, was ich tun werde, ist, dass ich jetzt ein Makro aufrufen werde, das bereits gebaut wurde. Zusammenfassend wird diese Routine hier das Ereignis
abfangen , dass der Benutzer die Arbeitsmappe schließt. Und bevor die Arbeitsmappe tatsächlich geschlossen wird, wird
sie die Routine für das Zurücksetzen der Arbeitsmappe aufrufen. Und die andere Sache, die ich tun möchte, ist auch die Arbeitsmappe zu speichern, die die sichtbaren Zustände jedes der Arbeitsblätter speichert. Also werde ich das einfach schnell machen. Ok, da gehen wir. Ok Leute, das ist alles vorerst. In dieser Lektion haben wir gelernt,
welche Ereignisse und wir haben die Oberfläche gekratzt, wie wir sie verwenden können. Wir sprachen über Ereignisbereich, IA, auf welcher Ebene der Anwendung, die Ereignisse, die ausgelöst oder erfasst wurden. Und wir haben ein paar praktische Beispiele für das Abfangen von Arbeitsmappe
geöffnet und Workbook Close-Ereignisse und Ausführen von Code abgeschlossen , sobald das Ereignis erkannt wird. Wir haben auch über die integrierte VBA-Funktion namens lift gelernt, die die angegebene Anzahl von Zeichen von links von der Zeichenfolge zurückgibt. Einige andere Dinge, die in dieser Lektion auftraten, waren das Testen Ihres Codes. Wir stießen auf ein paar Laufzeitfehler. Das war eine gute Sache. Es ist besser für uns, diese Fehler herauszufinden als Ihre Benutzer. Wir haben auch die Kontrolle der Benutzererfahrung angesprochen, worum es sich bei den praktischen Beispielen handelte. Und schließlich haben wir gelernt, ein Makro aus einem anderen Makro aufzurufen. Mein Name ist Andrew, danke fürs Ansehen, und ich sehe dich im nächsten Video.
5. 05 – - 12 – Umgang mit Daten: Willkommen zurück. Dies ist weniger als 12, die sich mit Daten beschäftigen. Mir wurde klar, dass der Umgang mit Daten ein ziemlich vager und breiter Titel für
dieses Thema ist , weil es unzählige Möglichkeiten gibt, Daten in VBA zu behandeln. Dieser Titel wird also wiederkehrendes Thema für den Rest meiner Kurse sowohl für fortgeschrittene als auch für fortgeschrittene Inhalte sein. In dieser Lektion erfahren Sie mehr über das Importieren von Daten aus verschiedenen Quellen in unsere Arbeitsmappe. Wir werden lernen, wie Sie eine Verbindung zu externen Datenbanken herstellen und
einige grundlegende SQL-Abfragen ausführen , um Daten abzurufen und an Excel zurückzugeben. Wir machen diese Lektion in zwei Teile. Im ersten Teil werden wir Daten
aus der CSV-Datei importieren , die wir in der vorherigen Lektion geöffnet haben. Und im zweiten Teil werden wir eine Verbindung zu einer Datenbank herstellen und
alle Daten aus einer Tabelle innerhalb dieser Datenbank extrahieren . Und in beiden Beispielen werden
wir ein Blatt in dieser Arbeitsmappe
mit den Daten füllen , die entweder aus der Datei oder aus der Datenbank extrahiert wurden. In diesem ersten Beispiel werden
wir einige weitere Funktionen in
dieses Unterprogramm einbauen , das wir in den letzten Lektionen aufgebaut haben. Und nur als Zusammenfassung,
was diese Routine tut, ist, dass sie zuerst nach
einer Datei sucht , um zu sehen, ob sie existiert, und öffnet sie, falls dies der Fall ist, andernfalls fordert sie den Benutzer auf, diese Datei zu finden. Der nächste Schritt ist also, dass wir die Daten aus dem Arbeitsblatt
extrahieren, das wir geöffnet haben, auf ein Blatt in dieser Arbeitsmappe
auffüllen und dann auf die gleiche Weise fortfahren möchten. Also werden wir ihre eigene Kopie der Arbeitsmappe sagen und wir werden es schließen. Also werden wir hier anfangen zu codieren. Dies ist der Punkt, an dem die Arbeitsmappe
geöffnet ist, da das Makro sie automatisch öffnet. Und wenn es diese Datei nicht finden kann, wird
es den Benutzer auffordern, diese Datei zu finden. Also wieder, wenn wir hier zu diesem Pod kommen, bedeutet
das, dass wir die Arbeitsmappe offen haben. Und es ist nicht nur offen, es ist auf dieses offene WB-Objekt gesetzt. Das erste, was ich tun werde, ist das aktuelle Arbeitsmappenobjekt festzulegen. Das ist also, dass die Arbeitsmappe tatsächlich den Code ausführt. Und jetzt wechseln wir über diese aktuelle Arbeitsmappe zu sprechen. Ich werde ein Arbeitsblatt festlegen und in diesem Fall werden
wir das Blatt ein Objekt verwenden, das hier oben ist. Und dort werden wir die Daten hinterlegen. Jetzt werde ich das Arbeitsblattobjekt aus der Arbeitsmappe festlegen, die wir geöffnet haben, die CSV-Datei ist. CSV ist ein sehr einfaches Dokument. Es ist nur ein Textdokument. Ein CSV kann auch nur ein Blatt enthalten. Daher muss ich hier keinen Namen angeben. Ich kann einfach einen Index liefern, der einer ist, denn es wird immer nur ein Blatt in einem CSV-Dokument geben. Sobald der Code diesen Punkt hier erreicht hat, haben wir beide Arbeitsmappen geöffnet. Wir werden auch beide Arbeitsblattobjekte festgelegt. Jetzt können wir fortfahren und beginnen, die Daten aus
der Arbeitsmappe, die wir gerade geöffnet haben, aus dem Arbeitsblatt zu nehmen . Ich finde den schnellste Weg, dies zu tun, ist die Verwendung von Bereichen. Und das liegt daran, dass ich einfach die Bereichswert-Eigenschaft verwenden kann und das alle Informationen enthält, die sich in diesem Bereich befinden. Und dann kann ich den Wert von einem Bereich zu einem anderen Bereich zuweisen. Um das zu tun, brauche ich ein paar Bereichsobjekte. Einer, der einen Bereich von der Arbeitsmappe angibt, die wir geöffnet haben, und einer, der einen Bereich aus der aktuellen Arbeitsmappe angibt. Lassen Sie uns zuerst den Bereich von der Arbeitsmappe festlegen, die wir gerade geöffnet haben, die R und G offen ist. Es gibt einen raffinierten kleinen Trick, den wir hier verwenden können, um Excel dazu zu bringen,
uns zu sagen , was der verwendete Bereich dieses Arbeitsblatts ist. Ia, Excel sagt uns alle Spalten und Zeilen, die Daten enthalten. Es ist wichtig, sich daran zu erinnern, dass dies nur nützlich ist, wenn wir über einen Tisch sprechen. Ein Blatt, das nur eine Tabelle enthält, um die Bereichseigenschaft
con zu verwenden , identifiziert, ob mehr als eine Tabelle
auf einem Blatt vorhanden ist, und es wird nur beide standardmäßig enthalten. Es ist also so einfach, dass wir
das Arbeitsblattobjekt verwenden und den verwendeten Bereich angeben. Jetzt kann ich das andere Bereichsobjekt basierend auf der Größe dieses Bereichsobjekts sitzen. Da wir Werte von einem Bereich in einen anderen Bereich verschieben, müssen diese Bereiche die gleiche Größe
haben. Lassen Sie mich Ihnen zeigen, wie das geht. Was wir hier tun, ist, dass wir ein neues Bereichsobjekt sitzen, das sich in der aktuellen Arbeitsmappe auf dem aktuellen Arbeitsblatt befindet, das Blatt eins ist. Und mit dem Festlegen dieses Bereichs auf die gleiche Größe wie die geöffneten Objekte. Und wie wir das tun, ist die Verwendung der Adresseigenschaft des Bereichs offenen Objekts. Die Adresseigenschaft wird uns die obere linke Zelle und die untere rechte Zelle der Tabelle mitteilen. Nun, da wir beide unseres Bereichsobjekts gesetzt haben, können
wir einfach den Wert eines auf den Wert des anderen setzen. Und das war's. Der Grund, warum ich diese Methode bevorzuge, ist, dass sie extrem effizient ist. Wir mussten keine Zeit damit verbringen, manuell herauszufinden, wie groß die Bereiche sind, weil wir dafür eine eingebaute Excel Funktionen verwenden. Außerdem verwenden wir die Benutzeroberfläche überhaupt nicht,
was bedeutet, dass wir keine Blätter auswählen oder Arbeitsmappen auswählen oder Bereiche auswählen. Wir verwenden kein Copy and Paste, das Daten in die Zwischenablage kopiert,
indem wir einfach die Eigenschaften und Methoden verwenden, die uns innerhalb dieser Objekte zur Verfügung stehen. Also lasst uns versuchen, das zu laufen. Ich gehe nur zu F5 durch den ersten Pop mit Währungsumrechnung CSV. Ok. Wir sitzen jetzt aus dem aktuellen Arbeitsmappenobjekt und wir setzen das aktuelle Arbeitsblattobjekt. Und ich saß ein zweites Arbeitsblattobjekt,
das aus der Arbeitsmappe stammt, die wir gerade geöffnet haben. Wenn Sie jetzt die Eigenschaft used range
dieses Arbeitsblattobjekts verwenden , um die Bereichsdimensionen zu setzen. Nun, schnell nur, um das sofortige Fenster zu öffnen, nachdem wir das Objekt gesetzt haben. Und ich werde sehen, wie die Adresse dieses riesigen Bereichs ist. Also werde ich die Adresse zurückgeben. Jetzt wird I1 zurückgegeben, um 805 zu sehen. Also, wenn ich nur unsere Währungsumrechnung bringen, csv, Wir können sagen, dass die obere linke Ecke I1 ist. Und wir sollten sagen, dass die untere rechte Ecke C 805 ist, dass wir 805 haben. Das ist also eine sehr schnelle und einfache Möglichkeit, Excel dazu zu bringen, Ihnen mitzuteilen wie viele Zeilen und Spalten in diesem Arbeitsblatt verwendet werden. Also springe ich hier wieder rein bringe das Minutenfenster runter. Also jetzt sitze ich auf einem Arbeitsblatt arrangieren, das in der aktuellen Arbeitsmappe genau die gleiche Größe wie der Bereich hat, den wir gerade aus der Arbeitsmappe genommen haben, die wir geöffnet haben. Jetzt nehme ich den Wert aus dem Bereich in der Arbeitsmappe, die wir gerade geöffnet haben. Und ich setze dies als den Wert des Bereichs in der aktuellen Arbeitsmappe ein. Und lassen Sie mich Ihnen schnell
eine aktuelle Arbeitsmappe zeigen , die wir auf Blatt 1 haben. Ich bringe das hier auf. Auf Blatt eins. Wir haben I1, um 805 zu sehen. Und das war sofort, was objektiv schneller ist als die Verwendung von Copy and Paste. Lassen Sie uns das minimieren. Fahren Sie nun wie gewohnt fort. Wir werden die Routine nur speichern, schließen und beenden. Gehen wir nun zum nächsten Beispiel über. In diesem Beispiel werden wir eine Verbindung zu einer Microsoft Access-Datenbank herstellen und alle Daten aus einer Tabelle
ziehen und diese auf einem neuen Arbeitsblatt in dieser Arbeitsmappe
auffüllen. Bevor ich fortfahre, möchte ich Ihnen nur die überschüssige Datenbank zeigen. Also bringe ich das hier hoch. Wenn Sie diese Videos mitverfolgen, stehen die Datenbank und die CSV-Datei im Projektbereich dieses Kurses
zum Download zur Verfügung . Also werden wir einfach diese Datenbank öffnen. Wie Sie sehen können, haben wir hier zwei Tische. Wir haben die Währungstabelle und wir haben einen Testtitel. Aber im Moment sind wir nur besorgt über diese Tabelle hier, TBL unterstreicht Währungsumrechnung. Und wenn ich diese Tabelle öffne, werden
Sie sehen, dass sie die gleichen Informationen enthält, die in der CSV-Datei enthalten sind. Okay, also werde ich das jetzt schließen. Und fangen wir an. Ich werde hier unten etwas Platz schaffen. Also werde ich einfach damit beginnen, unsere Unterroutine zu definieren. Ich nenne es nur verbinden mit zwei dB. Denken wir darüber nach, was wir hier brauchen werden. Daher werden wir definitiv Outlook-Buch und ein Arbeitsblattobjekt benötigen, da wir Daten aus der Datenbank in diese aktuelle Arbeitsmappe auf einem Arbeitsblatt füllen
werden. Ich könnte genauso gut voran gehen und dieses Arbeitsmappenobjekt setzen. Um also eine Verbindung zu einer Datenbank herzustellen und Daten daraus zu extrahieren, brauchen
wir zwei Dinge. Wir brauchen ein Rekordset und wir brauchen eine Verbindung. Stellen Sie sich einen Datensatz wie ein Arbeitsblatt vor. Es ist im Wesentlichen eine Tabelle der Datensätze, die wir aus der Datenbank zurückgeben. Und die Verbindung ist die Verbindung zwischen Visual Basic oder Excel und der Datenbank selbst. Wie immer bei VBA
gibt es zahlreiche Möglichkeiten, wie wir eine Verbindung zu einer Datenbank herstellen können. In diesem Beispiel werde ich IDEO DB oder aktive x-dot Objekte verwenden. Und das liegt daran, dass wir diese Methode für mehrere verschiedene Datenbanktypen verwenden können. Um also ein aktives X-Punkt-Objekt verwenden zu können, müssen
wir diesen Verweis tatsächlich in unsere Arbeitsmappe einfügen. Und dazu wählen wir Werkzeuge aus und wählen Referenzen aus. Und ich bringe das hier hoch. Und wir müssen nach der Microsoft Active X Dot Object Library suchen. Also scrolle ich hier runter, bis wir zu Microsoft kommen. Und Sie möchten die aktuellste auf Ihrer Maschine auswählen? Auf meiner Maschine, die 6.1 ist und okay ist, sobald wir diese Referenzbibliothek hinzugefügt haben, können
wir jetzt Variablen dieser Typen setzen. Also beginnen wir mit einem Datensatzsatzobjekt. Es wird es meine RS nennen. Als nächstes werde ich das Verbindungsobjekt deklarieren. Jetzt, da ich diese Objekte deklariert
habe, werde ich sie als neue generische leere Versionen dieser Objekte setzen. Der nächste Schritt wird also eine Verbindung zwischen Excel und der Microsoft Access-Datenbank phi,
diesem DB-Verbindungsobjekt, herstellen. Und um das zu tun, müssen wir eine Verbindungszeichenfolge einrichten. Also werde ich noch eine Variable brauchen. Ich füge das einfach hier hinzu. Und jetzt werde ich eine Verbindungszeichenfolge erstellen. Die Verbindungszeichenfolge erfordert eine bestimmte Syntax, die Syntax unterscheidet sich
jedoch je nach Datenbanktyp, zu dem Sie eine Verbindung herstellen. Es gibt einige großartige Ressourcen online, die Ihnen helfen können,
eine Verbindungszeichenfolge für die Datenbank zu erstellen , mit der Sie in der Verbindungszeichenfolge eine Verbindung herstellen möchten. In diesem Beispiel müssen wir ein paar Dinge bereitstellen. Das erste ist der Anbieter und das zweite ist die Datenquelle. Der Anbieter teilt VBA nur mit, welchen Mechanismus wir verwenden, um eine Verbindung mit dieser Datenbank herzustellen? Und der Anbieter, den wir in diesem Beispiel verwenden werden, ist ein Standard-Microsoft ice OLA
DB-Mechanismus und seine Version 12. Und wir werden App-Parameter mit einem Semikolon trennen. Und um die Datenquelle zu erstellen, werde
ich nur die Konstante wiederverwenden, die wir im Beispiel zuvor verwendet haben, was die Verknüpfung zu meinem Ordner Dokumente ist. Und dieser letzte Teil ist der Dateiname der Datenbank. Also hole ich das einfach von hier aus. Mit diesen beiden kombiniert, ist
es der Dateipfad des Ordners Eigene Dateien und der Dateiname der Datenbank. Das ist also unsere Datenquelle. Nun, da wir eine Verbindungszeichenfolge erstellt haben, können
wir eine Verbindung zu einer Datenbank herstellen. Beachten Sie nur eine Sache, ich habe einen Tippfehler hier, ich habe ein N auf diesem und eins und darauf. Also werde ich das einfach ändern. Und ich werde die Open-Methode des Verbindungsobjekts verwenden. Und es wird uns sagen, was wir liefern müssen, wenn es
eine Versorgungsverbindungszeichenfolge ist , die wir erstellt haben. Und wenn wir einen Benutzernamen und ein Passwort haben, können wir sie angeben. Und wir können auch andere Optionen liefern,
aber alles, was wir in diesem brauchen, ist nur die Verbindungszeichenfolge. Nachdem diese Zeile ausgeführt wurde, werden
wir hoffentlich eine Verbindung zu unserer Datenbank hergestellt haben. Und jetzt können wir beginnen, Befehle an eine Datenbank zu senden, um
die Datensätze, die wir wollen, und die Befehle, die wir
senden, was SQL oder SQL genannt wird, zurück zu bringen die Datensätze, die wir wollen, und die Befehle, die wir
senden, was SQL oder SQL genannt wird . SQL-Haupt-strukturierte Abfragesprache Ich werde eine SQL-Anweisung erstellen müssen, und ich werde das in einem String-Objekt tun. Also werde ich einfach ein neues Objekt erstellen und es STI SQL nennen. Lassen Sie uns nun unsere SQL-Anweisung erstellen. Jetzt kann SQL unglaublich kompliziert werden. In diesem Fall möchten wir jedoch nur
alle Datensätze zurückgeben, die sich in einer bestimmten Tabelle befinden. Um das zu tun, verwenden
wir Select und wir werden einen wild-gefangen hier Stern verwenden, von
dem alles ist. Und jetzt müssen wir unseren Tabellennamen angeben, der TBL auf der Schulwährungsumrechnung war. Okay, jetzt, da wir unsere SQL-Anweisung haben, können
wir mit der Open-Methode beginnen, die uns sagen wird, was wir brauchen, die Quelle, die die SQL-Anweisung ist. Und wir müssen die Verbindung liefern, die die Verbindung ist, die wir mit der Datenbank hergestellt haben. Und es gibt andere Argumente, die wir liefern können, aber das ist alles, was wir vorerst liefern müssen. Das erste, was ich immer mache, nachdem ich einen Datensatz
geöffnet habe , ist, dass ich überprüfe, ob wir Datensätze
zurückgegeben haben und die Datensätze sitzen Objekt eine Datensatzanzahl Eigenschaft hat, jedoch gibt es einen Haken und lassen Sie mich erklären. Lassen Sie uns also über die Unterschiede zwischen Excel und Datenbank sprechen. Excel ist sehr Makroebene, da wir leicht auf einzelne Zellen innerhalb einer Tabelle verweisen können. Eine Datenbank konzentriert sich jedoch stärker auf Datensätze, d. h. eine ganze Tabelle oder Datensatzgruppe, die von einer Abfrage zurückgegeben wird. In einer Datenbank gibt es also weniger Fokus auf einzelne Zellen. Und obwohl dies eine gute Möglichkeit ist, Datasets in einer Datenbank zu verarbeiten, kann
dies als Einschränkung angesehen werden, wenn eine Datenbank aus Excel referenziert wird. Um das zu umgehen, haben sie einen Mechanismus erfunden, den wir einen Cursor nennen. Also lassen Sie mich einfach Excel aufklären. Also denken Sie an eine Cursorsperre dies, es ist buchstäblich nur die Zelle mit derzeit auf der
zeigt, welche Spalte und was Roe waren auf. Und wir sind in der Lage, mit dem Cursor herum zu navigieren. dies im Hinterkopf behalten, müssen
wir angeben, wo sich der Küstenstandort auf dem Verbindungsobjekt befindet. Also lassen Sie mich das jetzt schnell machen. Und es wird Client verwendet. Wir werden also den Excel Cursor verwenden, nicht den Datenbank-Cursor. Und auf diese Weise können
wir leicht
eine genaue Darstellung der Anzahl der Datensätze in der Datensatzgruppe erhalten . Also werde ich nur die Datensatzanzahl Eigenschaft innerhalb einer einfachen if-Anweisung verwenden. Und der Grund, warum ich das tue, ist, wenn wir anfangen, mit einem Datensatz zu interagieren, als ob es Datensätze hat, aber es hat keine Aufzeichnungen, dann wird das eine Ära produzieren. Also möchte ich nur Code ausführen, wenn ein Datensatz tatsächlich zurückgegeben wurde. Also, wenn wir innerhalb dieser if Anweisung mit offener Datenverbindung mit offenen direkten sitzen würde und wir haben Datensätze aus der Datenbank zurückgegeben. Jetzt kann ich also
ein neues Arbeitsblatt erstellen , auf das ich die Daten auffüllen werde. Und um ein neues Arbeitsblatt zu erstellen, muss
ich die sheets-Auflistung verwenden, die zum Arbeitsmappenobjekt gehört. Also WB, denn das ist die Arbeitsmappe, in der wir
das Blatt und die Blattsammlung erstellen wollen . Und es gibt eine Methode, die Anzeige für diese Zeile, wir werden nur ein generisches Blatt hinzufügen. Ich möchte jedoch auch den Namen angeben. Und ich werde nur das aktuelle Datum verwenden, wie wir es in einer vorherigen Lektion mit Format
getan haben . Wählen Sie dort auch einen Unterstrich aus. Diese Zeile wird also einen neuen Farbton in diesem Arbeitsmappenobjekt hinzufügen, bei
dem es sich um diese aktuelle Arbeitsmappe handelt. Und es wird die Name-Eigenschaft zur gleichen Zeit wie das neue Arbeitsblatt
hinzufügen und es wird ein Blatt mit diesem Namen zu erstellen. Das ist also der aktuelle Tag in Tag und Monat. Also d, d m, m, und es wird einen Unterstrich und dann Währung haben. Nachdem ich meine neue Form erstellt habe, kann
ich dann mein Arbeitsblattobjekt basierend auf dem, was wir gerade erstellt haben, setzen. Ich werde das nur kopieren, weil das die Namenseigenschaft ist. Es ist genau das Gleiche. Cool. Also auf einem U-förmigen wollen nicht nur alle Daten füllen, ich möchte auch die Feldkopfzeilen einschließen. Und wenn Sie einen Datensatz wie eine Tabelle betrachten, enthält
er nicht die Feldkopfzeilen, aber die Feldkopfzeilen sind über das Datensatzsatzobjekt verfügbar. Was ich also tun werde, ist eine for-Schleife zu verwenden und die Anzahl der Felder in der Datensatzgruppe zu
durchlaufen. Und dann füllen wir die Feldnamen auf das Arbeitsblatt innerhalb dieser for-Schleife. Also verwende ich die Eigenschaft fields, und diese Eigenschaft hat eine Methode namens count. Ich muss nur diese x-Variable definieren. Stellen Sie es wie entlang, nur für den Fall. Und jetzt kann ich voran gehen und das auf das Arbeitsblatt füllen. Ich möchte, dass es in Zeile eins ist, weil dort die Feldkopfzeilen gehen. Und ich werde x verwenden, was unser Punkt in unserer for-Schleife ist. Und jetzt werde ich die Feldnameneigenschaft
aus dem Datensatzsatzobjekt für die aktuelle Spalte, auf der wir uns befinden, holen . Eine Sache, die ich hier hinzufügen möchte, ist, dass im Gegensatz zu einer Tabellenkalkulation oder einem Arbeitsblattobjekt Eigenschaft
dieses Felds 0 indiziert ist. Was ich damit meine, ist die Indexnummer beginnt bei 0. Während ein Arbeitsblattobjekt, beginnt
der Index bei einem, wie in Zeile 1,
Spalte 1, usw. Aber die Eigenschaft fields, die Indizierung beginnt bei 0. Das bedeutet, dass ich eine von der x-Nummer wegnehmen muss, weil sie hier bei einer beginnt. Welche wir verwenden, um zu adressieren, welche Spalte es sich auf dem Arbeitsblatt befindet. Jetzt möchte ich sicherstellen, dass sich der Datensatzsatz-Cursor auf dem allerersten Datensatz befindet. Also werde ich nur eine Move-Methode verwenden. Wie Sie sehen können, gibt es mehrere verschiedene Arten von Methoden, aber ich möchte sagen, zuerst zu bewegen. Das wird also nur den Cursor bis zum ersten Datensatz in diesem Datensatz bewegen. Und jetzt, da ich auch mein Feldkopf gefüllt ist, kann
ich jetzt voran gehen und beginnen, die Daten aus dem Datensatz zu füllen, setzen Sie sich auf das Arbeitsblatt. Um das zu tun, werde ich eine due until Schleife verwenden, und ich werde eine Schleife machen, bis der Datensatz das Ende erreicht. Also zeige ich dir, wie ich das machen werde. Führen Sie E, o, F oder Ende der Datei aus. Jetzt, weil ich hier keine Indexschleife verwende, brauche
ich eine andere Zahl oder einen Zähler, um zu zählen, welche Zeile wir derzeit auf Summen stehen, die hier eine neue Variable greifen. Und ich werde das hier sitzen,
22, weil die erste Reihe bereits mit den Kopfzeilen
besetzt ist und wir in Zeile zwei beginnen werden. Wenn Sie also darüber nachdenken, wird diese Schleife durch die Datensätze oder Zeilen schleifen, und ich brauche eine andere Schleife, um durch die Felder oder Spalten in meinem Datensatz zu wechseln. Also werde ich eine ähnliche Methode verwenden, wie wir hier verwendet haben. Jetzt kann ich diese aktuelle Zelle aus dem Datensatz in die Zelle im Arbeitsblatt füllen. Und ich werde y als Rho verwenden, weil das die Reihe dort ist, beginnt bei zwei. Und der Spaltenindex ist x Punktwert gleich. Und ähnlich wie oben, verwenden wir x minus eins, weil Felder 0 Index sind. Wir verwenden dieses Mal die Value-Methode. Ich habe gerade einen Fehler gefunden. In dieser Schleife sollen wir also Name nicht Wert verwenden, weil Wert der Inhalt der Zelle ist und Name der Name des Feldes ist. Also werde ich das ändern. Nachdem wir diese Schleife hier beendet haben, bedeutet
das, dass wir alle Spalten in dieser aktuellen Zeile im Datensatz durchlaufen haben. Also, jetzt müssen wir das anpassen. Wir müssen zur nächsten Zeile im Arbeitsblatt und zur nächsten Zeile in der Datensatzgruppe wechseln. Also, deshalb werde ich y gleich y plus eins machen. Und ich werde zum nächsten Datensatz und zum Datensatz mit der move next Methode wechseln. Okay, also denke, wir sind bereit, das jetzt zu testen, ich werde es nur mit F8 durchgehen. Also klicken Sie einfach hier und stoppt aufgetreten. Und wenn wir nicht sofort einen Pfeil haben, bedeutet das, dass wir kompiliert haben und alles ist gut oder zumindest ist es gut für jetzt. Ja, ja. Ok. Das ist gut. Es ist kompiliert. Fangen wir an, das durchzugehen. So werden wir Arbeitsmappe Objekt sitzen. Wir werden eine neue leere Version des Datensatzes und der Datenbankverbindung erstellen. Wir bauen eine Verbindungszeichenfolge. Und ich könnte einfach das unmittelbare Fenster aufrufen, nur um
Ihnen zu zeigen , wie das fertig aussieht. So sieht es aus, ein plattiertes. Also habe ich den Pfad und den Dateinamen verkettet. Bringen wir das runter. So hoffentlich jetzt können wir uns mit dieser Verbindungszeichenfolge verbinden , die Daumen gekreuzt sind. Nun, das schien zu funktionieren. Also, jetzt werden wir den Küstenstandort festlegen. So setzt es die Cursorposition auf die Client-Seite, was bedeutet, dass wir in der Lage sind,
eine genaue Darstellung davon zu erhalten , wie viele Datensätze in Datensatzsatz zurückgegeben wurden. Ich werde jetzt SQL-Abfrage aufbauen. Ich werde diesen Datensatz öffnen, den die Finger gekreuzt haben, mit ausgeschriebenen SQL-Anweisung richtig. Ja, das ist gut. Also lasst uns das unmittelbare Fenster aufrufen und wir können verhören, was die Datensatzanzahl ist. Okay, also haben wir 804 Datensätze in diesem Plattenset, was alles im Titel ist. Lasst uns weitermachen. Jetzt werden wir ein neues Arbeitsblatt erstellen. Und wir können sagen, dass es heute Abend ein neues geschaffen hat. Oh, das ist der aktuelle Tag hier in Australien unter Schulwährung, was ausgezeichnet ist. Und ich werde diese Objekte so einstellen, dass wir den gleichen Namen verwenden, den wir gerade
erstellt haben , so dass wir Arbeitsblattobjekt festgelegt haben. Lasst uns weitermachen. Also, jetzt werden wir die Feldkopfzeilen auf dem Blatt füllen. Also werde ich nur Excel aufrufen, damit wir sagen können, dass es das noch getan hat. Also haben wir das Blatt hier, ich werde Magnet, wenn es klein ist. Also können wir den Blattnamen hier sagen, und es ist nur die Feldkopfzeilen auf dem Blatt aufgefüllt. Das ist großartig. Ähm, ich mache das auch im Split-Screen, also trage einfach einen Moment mit mir, damit wir den Code gleichzeitig ausführen können. Wir können es sagen, füllen Sie das Arbeitsblatt. Also zurück zum Code jetzt. Wir werden zum ersten Rekord übergehen. Wir werden die Cursorposition auf den ersten Datensatz und den Datensatz setzen. Und wir werden den ersten Rotor zwei einstellen. Und jetzt werden wir jeden Datensatz in diesen Plattenzentren durchlaufen und das
runterbringen, bis wir auf den Grund des Datensatzes kommen. Also im Moment, wie Sie sehen können, sind
wir nicht am Ende des Datensatzes und diese Eigenschaft ist falsch. Also werden wir jetzt einfach mit dem Rad durchfahren. Es ist interessant, aber es liegt daran, dass der Wert ist, nach C zu starten Okay, also jetzt geht es durch. Also denken Sie vielleicht auch, wow, wir gehen durch diesen Datensatz, der Zelle für Zelle gesetzt wird, aber das ist einigermaßen effizient. Wenn wir mehr Spalten und mehr Zeilen oder mehr Datensätze haben würden, würde
ich das wahrscheinlich auf eine andere Weise tun, aber wir waren nicht berührt, bis wir zu den erweiterten Inhalten gekommen sind. Im Moment ist diese Methode eigentlich ganz in Ordnung für das, was wir tun wollen, was eine kleine Anzahl von Zeilen und Spalten auf ein Arbeitsblatt auffüllt. Und wie gesagt, ist es ziemlich effizient, weil, wenn nicht
die Benutzeroberfläche verwendet wird, nur Werte von einem Ort zum anderen zu setzen. Also, was ich tun werde, ist, dass ich einfach ein Nachrichtenfeld am
Ende setzen werde , das anzeigt, dass wir den Boden erreicht haben. So gab es 805 jede Reihe. Damit wir es zum vollen Preis einstellen können und wir das Nachrichtenfeld erhalten können, wenn es fertig ist. Also, jetzt werde ich F5 treffen und fertig. Wie Sie sehen können, ist es ziemlich schnell. Und lassen Sie uns einfach schnell durch hier blättern. Ich bringe das noch ein bisschen weiter. Und ja, es hat alle Aufzeichnungen aufgefüllt. Hoffentlich, wenn ich noch die Kontrolle runterdrückte, hatte ich eine 105. Da gehen wir. Das hat also alle Datensätze aufgefüllt. Okay, das schließt also Lektion 12 ein. Zusammenfassend haben wir uns mit dem Import von Daten aus verschiedenen externen Quellen befasst. Wir haben eine CSV-Datei geöffnet und diese in unsere Arbeitsmappe importiert. Wir haben auch eine externe Datenbank verbunden und wir führen eine grundlegende SQL-Abfrage, um die Datensätze zurückzugeben, an denen wir interessiert waren. Die neuen VBA-Funktionen, die wir eingeführt haben, waren die aktive x Datenobjekte Library und auch das Datensatzsatztypobjekt. Mein Name ist Andrew, danke fürs Ansehen, und ich sehe dich im nächsten Video.
6. 06 – - 13 – Arrays: Willkommen bei Lektion 13. Arrays. Meiner Meinung nach, ein Anstieg der mächtigsten und nützlichsten Funktion in VBA. Arrays sind so nützlich, weil sie es uns ermöglichen,
enorme Datenmengen effizient im Speicher zu halten und gleichzeitig sehr wenig Ressourcen zu verbrauchen. Dies ermöglicht es uns, arbeitsintensive Aufgaben in Sekundenbruchteilen auszuführen. In dieser Lektion erfahren wir mehr über mein Lieblingsthema, Arrays. Wir werden über Single-Dimension-Arrays sprechen, und wir werden auch über mehrdimensionale Arrays sprechen. Stellen Sie sich ein Array als virtuelle Tabelle vor. Medaillon Tisch Es kann Zeilen und Spalten enthalten. Dies ist, was wir meinen, wenn wir uns auf die Dimensionen eines Arrays beziehen. Ein eindimensionales Array enthält nur eine Spalte. Daher benötigt es nur eine Dimension, um auf einen bestimmten Wert 0 zu verweisen, der Rho ist. Ein mehrdimensionales Array enthält mehr als eine Spalte. Dies bedeutet, dass Sie mehrere Dimensionen benötigen, um auf
einen bestimmten Punkt oder Wert innerhalb dieses Datensatzes zu verweisen , z. B. Spalte und welche Zeile. Der Vorteil der Verwendung eines Arrays oder wenn es heißt ein Blattbereich oder Record Sit ist aufgrund seiner Effizienz. Er ist nur ein schneller Vergleich eines Bereichsobjekts mit einem Array. Ein Bereichsobjekt ist ein Verweis auf eine bestimmte Position auf einem Plan. Und da die Variable anordnen eine Darstellung dieser spezifischen Formposition ist, verfügt
sie über zahlreiche andere übergeordnete und untergeordnete Eigenschaften. diesem Grund verbraucht die Variable in VBA mehr Speicher im Vergleich zu einem Array mit den gleichen Dimensionen. Ein Bereichsobjekt muss auch einen Verweis zwischen dem in VBA deklarierten theoretischen Objekt und
dem physikalischen Bereichsobjekt auf dem Arbeitsblatt aufrechterhalten . Dies bedeutet, dass zwischen derVariablendarstellung des Bereichsobjekts und
demphysischen Bereichsobjekt auf
dem Blatt immer unvermeidbare Lese- und Schreibvorgänge durchgeführt Variablendarstellung des Bereichsobjekts und
dem werden. Daher, wenn wir über
sehr große Datensätze sprechen , die eine arbeitsintensive Operation erfordern. Und damit habe ich sogar nur einen einzigen Wert innerhalb des Titels gesucht. Die Leistung des Bereichsobjekts ist im Vergleich zu einem Array sehr schlecht. Auf der anderen Seite ist ein Array nur ein grundlegender Objekttyp, der sehr wenige Eigenschaften hat. Es sind buchstäblich genau die richtigen Dimensionen und der Datentyp. Das bedeutet, dass Sie es einfach mit Daten laden und mit minimalem Aufwand halten können. Und durch sein einfaches Nitrit, macht
es die gleichen arbeitsintensiven
Aufgaben mühelos und damit unglaublich schnell erledigt werden . Wir werden uns heute zwei praktische Beispiele ansehen, ein eindimensionales Array und ein mehrdimensionales Array. Springen wir direkt rein. Und dieses Beispiel werde ich Ihnen eindimensionale vorstellen entstehen und auch die integrierte VBA-Funktion namens split. Ich werde nur schnell ein neues Codemodul hinzufügen. Also sind wir in Modul fünf. Jetzt fangen wir mit Split an. Split ist eine integrierte VBA-Funktion, die es uns ermöglicht, eine Operation für eine Zeichenfolge auszuführen, die sie in zahlreiche diskrete Komponenten basierend auf einem Trennzeichen aufteilt. Ein Trennzeichen ist ein Zeichen, das einen Trennpunkt bezeichnet. Wenn Sie sich in der letzten Lektion erinnern, haben wir CSV-Dateien verwendet. Eine CSV-Datei hat ein Koma als Trennzeichen zwischen Feldern. Die Split-Funktion ermöglicht es uns auch zu definieren, welches Zeichen wir als Trennzeichen verwenden möchten. Ich werde zuerst anfangen, nur indem ich eine Unterroutine erstelle. Okay, ich nenne es nur SBA SPL-Array. Okay, also zuerst, was ich tun werde, ist unsere Array-Variable zu deklarieren. Nun ist dieser Datentyp eine Zeichenfolge. Was das bedeutet, ist, dass alles in diesem Array als String gespeichert wird. Sie sind tatsächlich in der Lage, mehrere Datentypen zu halten, indem Sie variant verwenden. Allerdings verwende ich selten Variante. Und der Grund dafür ist, dass ich es
einfach auf die einfachste Weise halten möchte , die eine Zeichenfolge ist. Wenn Sie die Registerkarte „Variantendaten“ verwenden, können
Sie Probleme wie Datumsformate und solche Dinge auftreten. Und das ist offensichtlich unerwünscht. Also halte ich immer nur alles ist eine Schnur. Jetzt möchte ich auch eine String-Variable deklarieren, und das wird ein Stück Text halten, der Dinge
enthält, die wir aufteilen möchten. Also lasst uns darüber nachdenken, warum wir vielleicht etwas aufteilen wollen. Ok, also werde ich einfach wieder in unser vorheriges Beispiel hier springen. Wie Sie hier sehen können, haben wir den vollständigen Dateipfad
der Datenbank, die wir im vorherigen Beispiel hatten. Also werde ich nur kopieren, dass wieder in Modul fünf gesprungen ist, und ich werde es dieser Variablen hier zuweisen. Nehmen wir zum Beispiel an, wir wissen, dass dies ein vollständiger Dateipfad ist, aber wir wollen nur den Dateinamen selbst erfassen. Wir wissen, dass ein Verzeichnis Backslashes enthält. Deshalb, wenn wir diese Zeichenfolge durch umgekehrte Schrägstriche teilen, Wir können nun den Dateinamen greifen, die der letzte Herbst in diesem Split sein wird. Also lasst uns das jetzt einfach machen. Also verwende ich die Split-Funktion hier und meine Klammer, und der Ausdruck, den ich die Split-Funktion senden möchte, ist geteilt und das Trennzeichen ist umgekehrter Schrägstrich. Ich muss nichts anderes liefern. Sobald diese Zeile ausgeführt wird, hält ein Array in SPL und es wird diese Zeichenfolge enthalten, die durch den umgekehrten Schrägstrich geteilt wird. Was ich also erwarte, ist die erste Zeile in meinem Array, die C-Doppelpunkt enthält. Und der nächste wird Gebrauch sein, und der nächste wird I und II sein. nächste ist OneDrive und so weiter und so weiter und so weiter. Also, was ich tun werde, ist, dass ich den Code durchschritt und nachdem wir diese Zeile ausgeführt haben, werde
ich Ihnen zeigen, was im Überwachungsfenster passiert. Und unbesorgt über diesen Kontext, der aktuelle Kontext dieses Unterprogramms. Also schlag okay. Okay, jetzt unten im Überwachungsfenster sehen wir, dass wir unsere Variable hier haben. Wir können sagen, dass oben eine Zeichenfolge ist und eine Eigenschaft von 0 bis fünf hat. Und Array ist 0 indiziert,
was bedeutet, dass der allererste Datensatz 0 indiziert ist. Im Gegensatz zu einer Tabelle, die an einer indiziert ist, gibt es keine Zeile 0, es gibt nur Zeile 1. Also im Array ist das erste Element immer eine 0 für Zeile und Spalte. Aber dieses ist nur ein eindimensionales Array, daher haben wir nur Zeilen. Wie Sie hier sehen können, wenn ich das Plus treffe, können
Sie sehen, dass der 0 Index C Doppelpunkt ist, was genau das ist, was ich erwartet habe. Und der nächste ist verwendet, und der nächste ist EI und DRA. Der nächste ist One Drive Dokumente von bla, bla. Wie Sie hier sehen können, und ich verdopple SPL fünf, halte
ich den tatsächlichen Dateinamen selbst. Lassen Sie uns jetzt darüber sprechen, wie ich den Dateinamen aus diesem Array ziehe. In diesem Fall weiß ich, dass der Dateiname der letzte Herbst in dieser Zeichenfolge ist. Denken Sie daran, als wir uns das Array in der Uhr angesehen
haben, sahen wir, dass oben Saite 0 bis fünf besagte. Daher wissen wir, dass es sechs Elemente in diesem Array gibt, und wir bezeichnen diese Dinge als Grenzen. Also die niedrige Grenze,
was bedeutet, dass es das erste Element in der Anordnung und die obere Grenze ist das letzte Element im Array. Wenn ich also den letzten Herbst greifen möchte, würde
ich mich auf die obere Grenze meines Arrays beziehen. Also werde ich nur diese obere Grenze verwenden und jetzt
werde ich das in das Direktfenster ausdrucken. Also verwende ich
die Klammern wieder, weil ich mich tatsächlich auf etwas innerhalb des Arrays beziehe. Und jetzt im Alter beziehen sich auf den Index. Also noch eine, die fünf ist. So zeigen Sie einfach 5 zuerst, das ist der sechste Punkt, weil es bei 0 beginnt. Also, wenn ich das hier wieder herbringe und F8 drücke, dann bringe das einfach auf. Sie werden im unmittelbaren Fenster sehen, dass es uns den Dateinamen gegeben hat. Nun, was, wenn ich nicht explizit Cy5 wollen, weil ihre zahlreichen Ordner, gibt es zahlreiche, mehr Ordner als diese oder weniger Ordner, als wir in dieser aktuellen Zeichenfolge haben. Was ich dann tun kann, bezieht sich auf die eigentliche Grenze. Das ist also eine Berechnung, die mir sagt, was die untere oder obere Grenze dieses bestimmten Arrays ist. Also, anstatt einen Index zu liefern, werde
ich Ihnen gebundene U-Kurve von dem liefern, was reichlich ist. Und wenn wir darüber schweben, werden Sie sagen, dass es uns sagt, dass die obere Grenze fünf ist. Also, wenn ich das einfach mache und wieder F5 drücke, wirst
du sehen, dass es dasselbe getan hat. Ebenso, wenn ich die untere Grenze oder das erste Element im Array zurückgeben möchte, das wäre C-Doppelpunkt. Ich kann auch L-gebunden verwenden. Also, wenn ich das einfach mache, können
Sie sehen, dass es jetzt den C-Doppelpunkt im Direktfenster hat. Das war also nur ein sehr schnelles und einfaches Beispiel, um Sie in
Arrays einzuführen und Sie gleichzeitig in die Split-Funktion einzuführen. Gehen wir nun zu mehrdimensionalen Arrays über. Dieses nächste Beispiel ist möglicherweise nicht ganz praktisch. Es dient jedoch als eine gute Einführung in 2D-Arrays. Gleichzeitig demonstrieren wir, wie effizient und schnell bei
Verwendung als Tisch im Vergleich zur Verwendung eines Blattes in exakt der gleichen Art und Weise sterben . Wir werden dieses Beispiel in zwei Teilen machen. Der erste Teil, wir werden bis
5 Tausend Zeilen auf einem Arbeitsblatt mit Zufallszahlen laden . Und dann werden wir durch diese 5 Tausend Zeilen nach einem bestimmten Wert suchen. Danach werden wir auch ein 2D-Array mit 5 Tausend Reihen von
Zufallszahlen laden und einen bestimmten Wert innerhalb dieses Arrays suchen. Ich bleibe hier in Modul fünf. Aber ich werde damit beginnen, nur unsere Unterroutine zu definieren. Okay, also denken Sie an die Variablen, die wir brauchen werden. Die erste Handlung, ich werde ein Arbeitsblatt mit 5 Tausend Zeilen von Zufallszahlen laden. Also brauche ich definitiv die Arbeitsmappe und das Arbeitsblatt. Jetzt habe ich ein leeres Blatt fertig. Das ist kalt geformt drei. Also verwende ich das einfach in diesem Beispiel. Ich werde die 5 Tausend Zeilen mit ein paar for-Schleifen laden. Daher brauche ich ein paar Zahlen oder ganze Zahlen. Wenn Sie bereits vertraut sind, verwende ich die x- und y-Ganzzahlen als Zeile und den Spaltenzeiger in meinen vollständigen Schleifen. Die erste for-Schleife wird also für die Zeile sein. Es geht also von Reihe 1 zu Reihe 5 Tausend. Und ich ging von Spalte A nach Z, also ist das 26. Das wird also von eins bis 26. Also in dieser Schleife, da wir in einer Reihe sind und wie wir durch die Spalte
eins bis 26 auf der aktuellen Zelle, die innerhalb dieser for-Schleife mit dem y-Punkt ging, fahren , möchte
ich eine Zufallszahl in diese Zelle drucken, und ich möchte, dass diese Zahl zwischen 15 Tausend sein. Ich werde dies schnell in einem Kommentar aussprechen, um zu erklären, wie wir eine Zufallszahl zwischen bestimmten Werten
erstellen. Also zuerst werden wir mit ein paar Klammern beginnen. Und in diesen Klammern wollen wir die Ober- und Untergrenze plus eins haben. So ist die obere Grenze 5 Tausend. Und jetzt wollen wir die untere Grenze subtrahieren, die eins ist. Und dann müssen wir eins plus. Nun, außerhalb dieser Klammern, wollen
wir mal, dass durch die R und D Funktion, die ein Zufallsgenerator ist. Nun wollen wir auch die untere Grenze wieder hinzufügen, also das ist eins. Aber wir wollen keine Dezimalstellen, daher müssen
wir dies als Ganzzahl umwandeln. Also, wenn ich das jetzt einfach nimm und es in das unmittelbare Fenster bringe, bringe
ich einfach das sofortige Fenster hoch, so dass ich später nicht
herunterzoomen und ein Fragezeichen machen und dann befragen muss , was dieser Wert zurückgibt. Es hat uns eine Zufallszahl gegeben. Und diese Zahl überschreitet nie fünftausend daran geht nie unter einem. Also, jetzt werden wir das benutzen und das in einer Zelle bevölkern. Sounds, Filme Sofortige Fenster-Identität. Wie wir schon viele Male gemacht haben und ich zugehört habe, wollen
wir das Blatt ansprechen. Wir wollen die Zellen auf dem Blatt ansprechen. Welche Zellen wir wollen. Wir wollen x, y, weil wir den Zeilenzeiger haben, haben
wir den Spaltenzeiger. Punktwert entspricht Zufallszahl, das sind Kosten als Ganzzahl. Also, nachdem wir alle Werte auf die 5 Tausend Zeilen und 26 Spalten geschrieben haben. Und ich möchte im Wesentlichen dasselbe tun, aber die Werte lesen und nach einer bestimmten Nummer suchen. Und die Nummer, nach der ich suchen möchte, ist 4.999. Also werde ich das wirklich schnell kopieren. Weil wir im Wesentlichen dasselbe tun. Wir beginnen in Reihe eins und gehen zu Reihe 5 Tausend. Und in jeder Zeile gehen wir durch Spalte 12, Doppelpunkt 26. Und ich werde das vorerst loswerden. Also, um einen Wert zu verhören, werde
ich nur eine if-Anweisung verwenden. Wenn. Also, wenn die aktuelle Zelle, auf der wir sind, wenn der Wert dieser Zelle gleich 4.999 ist, 4.999
Schleifen, dann möchte ich etwas tun. Ich möchte den Wert in dieser Zelle durch Herbst gefunden ersetzen. Und ich werde das auch einfach in das unmittelbare Fenster debuggen. Und ich werde dann auch die Adresse einschließen. Und dieses Mal werde ich es kopieren. Okay, jetzt gehen wir auf unser Array. Also werde ich einfach wieder auf die Top Ian Euro-Erklärung springen. Und ich werde unser Array deklarieren. Und Sie werden bemerken, obwohl ich über ganze Zahlen spreche, beziehe ich mich immer noch darauf als String. Und das ist rein aus Gründen der Effizienz, aber auch es gibt eine wirklich schnelle und einfache Möglichkeit, Strings und Ganzzahlen zu vergleichen. Nun, da wir unser Array definiert haben, können
wir jetzt die erste Dimension oder Deklarationsanweisung bemaßen, die es nur als Array einrichtet. Jetzt möchte ich die Dimensionen dieses Arrays bereitstellen. Wie groß ist die Tabelle, wie viele Spalten und wie viele Zeilen? Jetzt kann ich das auch in der Deklarationserklärung tun, aber ich ziehe es immer vor, es separat zu tun. Die Art und Weise, wie Sie die Größe einer Array-Variable zuweisen, ist die read deem-Anweisung. Und wir lehrten den Namen der Array-Variablen. Jetzt müssen wir die Spalten- und Zeilennummern angeben. Aber zuerst lassen Sie mich das einfach aussagen und ich werde Ihnen etwas erklären. So wissen wir bereits, dass Arrays anders indiziert sind als andere Objekttypen, wie Zellen und Bereiche und Blätter, et cetera, da sie bei 0 beginnen,
so dass die 0 indiziert ist. Nun sind auch die Indizierungseigenschaften unterschiedlich. Zum Beispiel, wenn wir uns auf eine bestimmte Zelle in einem Bereich oder auf einem Arbeitsblatt beziehen. Wir brauchen zuerst die Reihe. Und dann haben wir die Säule gemacht. Aber in einem Array ist
es eigentlich umgekehrt. Sie wenden zuerst die Spalte an und geben dann die Zeile an. Und das kann möglicherweise wirklich verwirrend werden, aber es ist eigentlich aus einem ziemlich einfachen Grund. Und der Grund ist, dass Sie, während
Sie Code ausführen, keine Spalten zu einem Array hinzufügen können. Sie können Zeilen nur hinzufügen, wenn Sie an eine Tabelle mit Daten denken, die Sie in der Laufzeit verwenden, dass Ihre Bewertung Iraner, die abfragen oder versuchen, ein Objekt zu finden. Es ist sehr selten, dass Sie diesem Titel Spalten hinzufügen müssen, aber Sie müssen möglicherweise Zeilen zu diesem Titel hinzufügen oder neue Datensätze zu dieser Tabelle hinzufügen. Und aus diesem Grund können Sie die Spalteneigenschaft in
einem Array nicht erweitern , ohne zuerst dieses Objekt zu zerstören und dann erneut zu beginnen. Also dann lesen Sie die ganze Sache und laden Sie sie dann wieder auf. Jedenfalls. Also lassen Sie uns den Spaltenwert setzen und wir wissen, dass es 26. Wir wollen einen zu Zed. Und weil das Array bei 0 beginnt, bedeutet
das, dass es 25 sein muss. Und wir wissen, dass es 5 Tausend Zeilen geben wird,
weil es bei 0 beginnt, es sind 4.999. Das hat also unsere Array-Größe auf 5 Tausend Zeilen und 26 Spalten gesetzt. Und jetzt, da wir die Größe des Arrays festgelegt haben, können
wir die Grenzen des Arrays in Schleifen verwenden. Also mache ich das jetzt einfach. Also das erste, was wir tun wollen, das ist identisch mit dem, was wir hier oben mit dem Blatt gemacht haben. Wir wollen es zuerst mit Zufallszahlen laden, und dann wollen wir durch dieses Array fahren und wir wollen 4.999 finden. Also vier. Und ich werde hier nur 0 verwenden. Jetzt. Könnte 4.999 verwenden, weil ich bereits weiß, dass dies die obere Grenze des Arrays ist. Ich kann jedoch auch die Berechnung der oberen Begrenzung verwenden, die gebunden ist. Und wir müssen liefern, nach welcher Obergrenze wir suchen. Das ist also Array Rand. Aber weil wir mehrere Dimensionen haben, müssen
wir liefern, nach welcher Dimension wir suchen wollen. Und seltsam punktet dieser Index auf eins. Also suchen wir nach den Zeilen in diesem Fall. Die Spalten werden also eins sein und die Zeilen wären zwei. Also suchen wir nach dem Index von zwei. Frag mich nicht, warum sie das getan haben. So haben sie es gemacht. Und jetzt können wir durch die Spalte wird Sie wieder gebunden verwenden. Und ich suche die Kolumne, also ist das eine. Und ich kopiere das hier oben nicht. Aber ich werde jetzt zuweisen. Und ich suche die Spalte, erste Spalte, Zeile. Ich werde den Wert darauf zuweisen. Also genau das gleiche zur Vollschleife hier oben. Was wir tun, ist, dass wir durch diese beiden for-Schleifen
fahren, durch die Reihen und die Spalten gehen. Und wir weisen jeder einzelnen Zelle innerhalb jeder Zeile und jeder Spalte einen Wert zu. Und jetzt auch genau das gleiche wie das Beispiel. Was wir tun wollen, ist, dass wir
durch das Array fahren wollen und wir wollen nach einem bestimmten Wert suchen. Also nochmal, ich werde das einfach kopieren und dort einfügen. Es wird ein bisschen nach unten gehen. Los geht's. Und ich werde die gleiche if-Anweisung haben, aber für das Array. Bevor ich fortfahre, erinnern
Sie sich vielleicht, dass ich das Array als String definiert habe,
was bedeutet, dass es nur Strings enthält. Also, was das bedeutet, sagen wir, wir haben die Nummer neun. Wenn wir eine Neun haben, ist das eine tatsächliche Ganzzahl, aber es hält sie so, wie eine Zeichenfolge. Also sieht VB eye es nicht als numerisches Zeichen o. Was das bedeutet, ist, wenn ich hier eine ganze Zahl verwende und ich eine Zeichenfolge hier habe, werden
diese nie vergleichen. Was das bedeutet, ist, dass ich das kosten muss, was ich hier habe, was als String gehalten wird, als Ganzzahl. Und die Art und Weise, wie ich eine Zeichenfolge als Ganzzahl kosten kann, ist Breite, die Kosten als Ganzzahlfunktion. Es gibt ein paar Probleme damit. Ein Problem, das wir damit haben, ist, dass, was passiert, wenn diese bestimmte Spalte
oder, oder dieser bestimmte Wert keine Zahl enthält, wir tatsächlich eine Ära bekommen. Also zeige ich es dir im unmittelbaren Fenster. Nehmen wir an, wir senden die Sea INT-Funktion ein Alpha-Zeichen. Uns wird ein Missverhältnis beigebracht, weil es sich nicht umwandeln kann. Das in eine ganze Zahl, weil es ein Alpha-Zeichen ist. Es gibt zahlreiche Möglichkeiten, dies mit sehr ähnlichen integrierten einzeiligen Funktionen zu umgehen, aber ich werde jetzt nicht darauf eingehen. Wir werden das zu einem anderen Zeitpunkt abdecken. Okay, genau das gleiche wie unsere Schleife hier oben. Ich möchte den Wert in dieser Zelle durch gefundenes Element ersetzen. Und ich möchte auch eine Nachricht in die unmittelbaren Fenster debuggen. Also mache ich das jetzt einfach. Ich gehe einfach zurück zu diesem gelehrten Missverhältnis. Wenn ich das sitze oder eine Variable als
Ganzzahl deklariere , weil wir ganze Zahlen halten, würde das nicht funktionieren. Ich wäre nicht in der Lage, ihm eine Zeichenfolge zu senden. Und das ist ein weiterer Grund, warum ich Strings verwende. Denn im Grunde kann jeder andere Datentyp in einen String
konvertiert werden und ihn dann von einer Zeichenfolge entfernt konvertieren. Aber wenn Sie es als Integer-Datentyp festlegen, können
Sie nichts anderes als Ganzzahlen eingeben, sogar Zahlen über 32,5 Tausend, da dies die maximale Grenze einer Ganzzahl ist. Wie auch immer, wir werden den Debug-Druck ändern. Ich werde das etwas anders machen. Also werde ich auch den Array-Namen einschließen und der Punkt ist in dieser Druckanweisung. Nun wollte ich auch den Unterschied zwischen den beiden vergleichen. Und ein guter Vergleich ist, wie viel Zeit es braucht, um eine Aufgabe zu erledigen. Wie viel Zeit dauert es, um
das Sheet-Beispiel zu vervollständigen und wie viel Zeit es dauert, um das Array-Beispiel zu vervollständigen. Um das zu tun, muss ich ein paar Datumssummen machen. Also werde ich nur eine Datumsvariable hinzufügen. Und ich werde auch ein paar ganze Zahlen hinzufügen. Der erste wird die Anzahl der Sekunden halten, die benötigt wird, um den ersten Teil abzuschließen. Und der zweite hält die Anzahl der Sekunden, die es dauert, um den zweiten Topf zu machen. Wie soll ich das erreichen, indem ich
die Zeit auf eine Variable setze, bevor sie Punkte sind und danndiese die Zeit auf eine Variable setze, bevor sie Punkte sind und dann der aktuellen Zeit
vergleichen, nachdem wir sie beendet haben, so dass wir sehen
können, wie viel Zeit zwischen diesen beiden Punkten verstrichen ist. Also beginnen wir, indem wir die aktuelle Uhrzeit und das Datum in die Date-Variable setzen. Und denken Sie daran, dass es jetzt immer die aktuelle Zeit zurückgibt, egal was passiert. Und nachdem wir fertig sind. Und jetzt können wir eine andere Funktion verwenden, um die Anzahl der Sekunden zu zählen, die es dauerte, um diese Aufgabe zu
erledigen, und dann diese Zahl dieser Variablen hier zuweisen. Ich werde einfach damit aufhören. Die Funktion, die Sie verwenden, um den Unterschied zwischen zwei Diäten zu vergleichen, ist Datum DEF. Und Sie können sehen, dass es nach Intervall eine Zeichenfolge fragt. Also ist es Stunden, Minuten, Sekunden, Tage, Wochen, Monate, Jahre, und dann das erste Datum, Also das ist das früheste Datum und das zweite Datum, das ist
die aktuelle Zeit oder das Datum,
das Sie das Licht von Tag, den Sie mit dem ersten Datum vergleichen möchten. Und das ist es, was Sie liefern müssen. Also will ich Sekunden. Und der erste Dydt ist D G Punkt. Und die zweite Nacht, nun, das ist jetzt. Also jetzt. Und wir werden dann die Anzahl der Sekunden halten, die es dauerte um von hier nach hier zu kommen. Und jetzt können wir dasselbe für diesen tun. Also verwende ich das Lager wieder, weil wir das nicht mehr brauchen. Wir haben bereits festgehalten, wie viele Sekunden es gedauert hat. Und ich werde die andere Integer-Variable greifen. Und ich werde genau das Gleiche tun. Okay, jetzt, da ich diese zwei ganzen Zahlen
habe, debugge ich diese einfach in das unmittelbare Fenster. Ich kopiere das einfach. Während wir dies ausführen, kann
Excel berichten, dass es tatsächlich nicht reagiert
, und das liegt daran, dass es lange dauern kann, dies zu tun. Wenn du darüber nachdenkst, machen wir 5 Tausend Reihen und wir machen 26 Spalten. Das ist also wie ein 203.000 Tausend, ja, 130 Tausend Operationen. Und dann machen wir noch 130 Tausend Operationen hier. Und dann machen wir weitere 130 und
130 Tausend Operationen weil es die Anzahl der Zeilen mal die Anzahl der Spalten ist. Und wir machen etwas Besonderes für H1. Und der Zweck war wirklich nur, Ihnen den Unterschied in der Zeit zu zeigen, den es braucht um Werte aus einem Blatt zu ziehen und sie aus dem Speicher zu ziehen. Und jedes Mal, wenn wir tatsächlich durch eine dieser Schleifen gehen, um etwas mit der Zelle zu
tun, wo sie lesen oder schreiben. Also lesen wir davon in diesem Fall,
das ist, um den Wert zu überprüfen. Und wir schreiben auch dran. Also geben wir ihm einen Wert. Und doch haben wir hier einen Wert zur Verfügung gestellt, wenn der Zellenwert tatsächlich gleich 4.999 ist. Aber zur gleichen Zeit machen wir das gleiche mit dem Array. Wir schreiben tatsächlich 130 tausend Mal hier. Und wir lesen davon 130 tausend Mal in diesem. Also werde ich erwarten, dass dies eine Weile dauern wird, bis es abgeschlossen ist, und es wird definitiv berichten, dass Excel nicht reagiert. Und das liegt daran, dass es einen Timeout-Wert für seine Prozedur Kohle hat,
was bedeutet, dass es nicht
länger als eine bestimmte Zeit mit Aufgaben beschäftigt sein kann , bevor es meldet, dass es nicht reagiert. Und nachdem wir das ausgeführt haben, zeigen wir Ihnen einen schnellen Weg, um das zu verhindern. Aber es kommt zu einem Preis der Leistung. Sie würden es also sehr sparsam verwenden wollen. Okay, fangen wir jetzt an. Setzen Sie den Cursor hier hoch. Ich werde F5 in 321 treffen. Okay, wir haben die Fans auf meinem Computer sehr schnell gesponnen. Okay, also schiebe ich dieses sofortige Fenster hier nach oben. Und wir werden sagen, ich werde diesen hier einfach loswerden. Wird sehen, dass es gefunden 4.999 an mehreren Stellen und halten sie auf ihre Zufallszahlen. Es ist also, weißt du, es wird nicht immer gleichmäßig sein, aber es ist ein vernünftiger Vergleich. Also, wenn gefunden 4.999 in diesen Adressen im Bereich, und es fand auch 4.999 in dem Array in diesem Punkt ist. Aber am wichtigsten ist, dass es
260 Tausend Iterationen von Lesen und Schreiben auf ein Blatt in 20 Sekunden abgeschlossen . Aber ein hat die gleiche Menge an Iterationen oder
260 Tausend zu einem Array in weniger als 1 Sekunde abgeschlossen . Also, wie Sie sich vorstellen können, summiert sich
diese Zeit deutlich und diese Zeitverkürzung ist extrem auffällig. Okay, also nur eine letzte Sache, bevor wir fertig sind. Wie erwartet reagiert das VBA-Fenster oder Excel vollständig angezeigt, während dieser Code ausgeführt wurde. Es gibt also ein y, das wir umgehen können. Und das ist, wir verwenden einen Befehl namens do events. Und was der Befehl do events tatsächlich tut, ist, dass Excel andere Ereignisse in der Warteschlange priorisieren
kann,
wie das Aktualisieren des Fensters,
et cetera, et cetera, et cetera. Und das kann sehr nützlich sein, wenn Sie andere Anwendungen verwenden, die ein Makro verwenden, das Sie erstellt haben. Und es kann eine Kraft Panik Schließung verhindern weil sie denken, dass Sie Anwendung eingefroren ist. Aber aus Performance-Gründen möchten
wir nicht do Ereignisse bei jeder Iteration der Schleife verwenden, wir möchten es nur sparsam verwenden. Also sagen wir hier alle 1000 Reihen. Wenn ich also Do-Ereignisse in meine Loops setzen muss, benutze ich die Mod-Funktion, die mathematische MOD-Funktion, um das für uns zu tun. Also habe ich hier nur eine if-Anweisung eingefügt, die sicherstellt, dass der Befehl do events nur alle 11000 Zeilen ausgeführt wird. Also gehen Sie einfach voran und fügen Sie diese if-Anweisung zu unseren ANOVA-Schleifen hinzu. Und 11000 reichen vielleicht nicht aus, weil es
mehr als den Timeout-Wert benötigen könnte , um einhundert, zehnhundert Zeilen auszuführen. Setzen Sie dies in Ihrem Test auf einen vernünftigen Wert. Es wird es auch in Ri Schleife hinzufügen, nur um fair zu sein, weil wir tatsächlich zusätzliche Zeit hinzufügen. Das ist Fäulnis tun Ereignisse bringt zusätzliche Zeit. Lass uns das noch mal laufen. Ich ziehe das hier runter. Hoffentlich sollten wir Excel nicht als nicht reagiert sehen, aber wer weiß? Schauen wir uns mal an. Ok, es ist fertig. Die bringen das hier hoch. Und wir haben nicht gesehen, dass Excel Anzeige nicht reagiert, was gut ist. Und wir haben auch keine Leistungsreduzierung gesehen. Es sind immer noch 20 Sekunden und 0 Sekunden, also das ist positiv. Und das sagt mir, dass ich denke, ich Ereignisse alle 1000 Zeilen befehle, ist ein ziemlich vernünftiges Intervall, um diesen Befehl tatsächlich zu tun. Okay, das fasst also das zweite praktische Beispiel in dieser Lektion zusammen, die Einführung in 2D-Arrays oder mehrdimensionale Arrays und eine Demonstration der Leistungsunterschiede zwischen der Verwendung von nur Bereichen und Arrays, die Daten im Speicher für einfachen Lese- und Schreibzugriff. Ich möchte nur einen letzten Kommentar machen, bevor ich diese Lektion abschließe. Wie Sie im zweiten praktischen Beispiel gesehen haben, fügt die Durchführung iterativer Operationen eines
Zellbereichs Durchführung iterativer Operationen eines
Zellbereichsbeträchtliche Zeit für die Ausführung unseres Codes hinzu. Und das ist eine häufige Falle, in die VB ich entwickeln, so oft fallen in. Meiner Erfahrung nach war ich in der Lage, Daten-Crunching-Makros zu optimieren
, die Minuten oder sogar Stunden gedauert haben, bis ich ein paar Sekunden ausgeführt habe. Und das ist einfach, indem Sie die Datensätze
innerhalb von Arrays im Gegensatz zu Zellbereichen verwenden und manipulieren . Offensichtlich sind die Arbeitsblatt-, Lese- und
Schreiboperationen das, was die meiste Zeit in Anspruch nimmt. Und es ist unvermeidlich, dass
Sie, um
ein Array zu laden oder die Daten wieder auf ein Arbeitsblatt zu deponieren, Lese- und Schreibvorgänge in das Arbeitsblatt oder aus dem Arbeitsblatt ausführen müssen. Im erweiterten Inhalt zeige
ich Ihnen, wie Siemit einem einzigen Lesevorgang einen ganzen Datensatz aus
dem Blatt in ein Arrayaufnehmen mit einem einzigen Lesevorgang einen ganzen Datensatz aus
dem Blatt in ein Array und das gesamte Array
mit einem einzigen Raj auf das Blatt zurückgeworfen haben -Operation, um noch mehr Zeit zu sparen. Also Leute, das schließt die Lektion heute ein. Wenn es so weit geschafft hat, möchte
ich Glückwünsche sagen, Sie haben gerade das einzige nützlichste Konzept in
Visual Basic gelernt , außer den einzelnen Dimensionen und mehrdimensionalen Arrays, die in dieser Lektion gelernt wurden, Sie auch etwas über die Split-Funktion gelernt, Sie Strings in
kleine Komponenten aufteilen können , wobei ein spezifiziertes Zeichen als Trennzeichen verwendet wird. Sie haben auch gelernt, wie Sie die R- und D-Funktion verwenden, um eine Zufallszahl zwischen zwei Zahlen zu generieren. Und schließlich haben Sie gelernt, wie Sie eine Differenz
zwischen zwei Diäten in einem bestimmten Intervall,
IA, Sekunden, Minuten, Stunden,
Tagen,Wochen, Monaten oder Jahren zurückgeben zwischen zwei Diäten in einem bestimmten Intervall, IA, Sekunden, Minuten, Stunden,
Tagen, können. Mein Name ist Andrew. Danke fürs Ansehen und wir sehen uns in der nächsten Lektion.
7. 07 – - 14 – Daten: Willkommen bei Lektion 14. Datumsangaben. Ich wollte nur über die Probleme sprechen, auf die Sie wahrscheinlich mit Datumsangaben beim Codieren und VBA stoßen werden, worauf Sie achten müssen und was Sie tun können, um diese Probleme zu mildern. Also heute werden wir darüber sprechen, wie Excel Daten speichert, wie VBA Daten speichert, und ja, sie sind unterschiedlich. Wir werden auch das große Problem in der Art und Weise, wie Termine umgesetzt werden, behandeln. Und ich werde Ihnen ein paar Möglichkeiten zeigen, um diese Probleme anzugehen. Es ist wichtig zu verstehen, wie Excel und VBA Datumsangaben tatsächlich gespeichert haben. Denn wenn Sie das Rollformat eines Excel Datums und eines VBA-Datums vergleichen, gibt es eine Diskrepanz. Übertrifft Türen Datumsangaben als Zahl. Es ist eine fortlaufende Zahl, die angibt, wie viele Tage seit dem ersten Januar 1900 vergangen sind. So wird als Beispiel der 11. August 2020 als 44.054 gespeichert. Und das liegt daran, dass der 11. August 2020
44.054 Tage seit dem ersten Januar 1900 ist . Vba speichert auch Daten als Zahl, und es ist auch eine fortlaufende Zahl, aber ausgedrückt als Anzahl, wie viele Tage seit dem 31. Dezember 1899 vergangen sind. So wird der 11. August 2020 als 44.055
gespeichert, 44.055 Tage nach dem 31. Dezember 1899. Vollständige Excel - und VBA-Datumsangaben, Stunden, Minuten und Sekunden werden als Dezimalzahl der Deichzahl ausgedrückt. Also, wenn zum Beispiel 0,5 gleich 12 Uhr Mittag ist, oder 0,25 ist gleich sechs AM. Daher stellt die Zahl 1,25 in VBA den 31. Dezember 1899 um 6 Uhr dar. Und in Excel stellt die Zahl 1.25 den ersten Januar 1900 um sechs dar,
ich speichere Datumsangaben auf diese Weise macht es für
Excel und VB I für diese Meta einfach , Berechnungen an Datumsangaben durchzuführen. Zählen Sie beispielsweise die Anzahl der Tage zwischen Datumsangaben, fügen Sie Datumsangaben zusammen, und cetera. Microsoft sieht dies als ein sehr einfaches, aber effektives Konzept. Wenn Excel das Datum einem Benutzer in einer Kalkulationstabelle
oder mit VBA im Meldungsfeld „Direktfenster“ anzeigt oder ein Formular usw. verwendet , wird eine Berechnung durchgeführt, die die Daten in einem vom Benutzer lesbaren Format darstellt. Und hier stoßen wir auf Probleme denn es gibt so viele Möglichkeiten, wie ein Datum zum Ausdruck gebracht werden kann. Zum Beispiel, US Long Date, uns kurzes Datum, Europäischer langer Tag, europäisches kurzes Datum, Julianisches Datum ,
Unix, Zeitstempel, et cetera, et cetera. All diese verschiedenen Möglichkeiten, Diäten auszudrücken, können die eingebaute Datumsberechnung verwirren oder sogar völlig verwirren ,
die verwendet wird, um eine Darstellung
eines Datums zu nehmen und im sequentiellen Zahlenformat zu speichern. Wenn Sie Excel als Teil Ihres Arbeitslebens verwenden, werden
Sie dies sicherlich erfahren haben. Für diejenigen in den USA Umgang mit Daten, in denen die Daten in einem europäischen Format gespeichert und umgekehrt. Wahrscheinlich ist das Problem eigentlich schlimmer für diejenigen von uns, die das US-Datumsformat nicht verwenden , da die eingebaute Berechnung uns Datumsformate zu begünstigen scheint. Es sollte auch
berücksichtigen, aber nicht immer das lokale Datums- und Uhrzeitformat auf Ihrem Computer sitzen. Hier ist ein Beispiel für dieses Datumsberechnungsproblem. Excel hat dieses europäische Datum bis zum 13. Tag des Monats als US-Datum behandelt, und dann wird es auf ein europäisches Datum umgespiegelt. Hier ist ein weiteres Beispiel ein unerklärliches Verhalten der Datumsberechnung in Excel. Wenn wir brauchen, um Daten zu oder aus
Arbeitsblättern mit VBA zu lesen oder zu schreiben und unsere eigenen Berechnungen an diesen Daten durchzuführen. Das ist offensichtlich ein riesiges Problem. Wenn wir außerdem ein formatiertes Datum an eine Zelle senden, unterliegt
es erneut der fehlerhaften Datumsberechnung von Excel, da Excel es als Datum sieht und an diesem Datum
eine fehlerhafte Berechnung
durchführen muss , um es in sein Zahlenformat zu konvertieren. Also, was können wir tun? Einfach gesagt, Sie müssen so viel wie möglich kontrollieren. Und um so viel wie möglich kontrollieren zu können, müssen
Sie vorbereitet sein, damit Sie verstehen müssen, womit Sie konfrontiert werden könnten. Mit anderen Worten, machen Sie so viel Analyse wie möglich. Wenn Sie Benutzereingaben benötigen, erlauben Sie ihnen
nicht, in einem Datum zu sprechen. Verwenden Sie ein Datumsauswahl-Steuerelement, um sicherzustellen,
dass das Datum korrekt ist Speichern Sie Ihre Daten möglichst als Zeichenfolge auf dem Blatt. Dadurch wird verhindert, dass Excel ausgeführt wird. Es sind verrückte fehlerhafte Berechnungen auf Datumsangaben. Wenn Sie ein Datum in eine Zelle schreiben, platzieren
Sie einfach ein einzelnes Apostroph vor Ihre Datumszeichenfolge. Dadurch wird verhindert, dass Excel eine Berechnung dafür durchführt. Wenn Sie Daten als Datumsangaben in einem Arbeitsblatt speichern müssen, was erforderlich wäre, wenn die Benutzer nach Datum filtern oder ein Datum in einer Formel verwenden müssen, verwenden Sie ein nicht mehrdeutiges Datumsformat. Verwenden Sie beispielsweise Alpha-Zeichen als Monat, IA, AN als Januar. Was dies tut, ist es sicherzustellen, dass die Florida-Excel-Berechnung
sofort erkennen kann , welche die dy-Komponente ist und welche die Monatskomponente ist. Führen Sie schließlich Ihre eigenen Berechnungen durch. Wenn Sie Daten aus einem Blatt abholen, verlassen Sie sich
nicht auf die grundlegenden integrierten Funktionen. Analysieren Sie Ihre Daten als ersten Schritt beim Erstellen Ihrer Anwendung. Und das ist, damit Sie eine bessere Vorstellung davon haben können welche zufälligen Datumsformate Excel auf Sie werfen wird. Sie haben für die zuverlässige Durchführung Ihrer Datumsberechnungen. Hier ist ein echtes Beispiel für ein Szenario,
mit dem ich vor kurzem konfrontiert war , und die Schritte, die ich unternommen habe, um sicherzustellen, dass die Daten korrekt waren, meine Anwendung musste Daten aus einer CSV importieren und als Excel die Datei öffnete, führte
sie fehl Berechnung für das Datumsfeld, und dies war das Ergebnis der Excel Berechnungen. Mein erster Schritt bestand also darin, die größte Stichprobengröße zu erhalten, die ich
bekommen konnte , und die möglichen Termine zu unterstützen, mit denen ich möglicherweise konfrontiert werden könnte. Auf diese Weise kann ich meine eigene Funktion schreiben, die all
diese Daten verarbeiten und in ein tatsächliches Datum konvertieren kann . Also lasst uns diese Funktion jetzt neu aufbauen. Also lasst uns anfangen, Funktion aufzubauen. Ich werde einfach aufhören, indem ich ein neues Codemodul hinzufüge. Modul sechs. Und ich werde nur eine Funktion definieren. Also nenne ich es wird von String getrennt. Und was wir brauchen, um die Funktion zu liefern, ist der Dydt als String. Und ich möchte ein Date zurückgeben. Der Zweck dieser Funktion ist es, das Datum zu nehmen, das in einem
beliebigen zufälligen Format ist und das zurückzugeben, als ein tatsächlicher gestorben ist. So führen Sie meine eigene Datumsberechnung für diese Zeichenfolge durch. Also habe ich meine Analyse bereits auf
der größten Stichprobengröße von Daten durchgeführt , die ich möglicherweise erhalten könnte. Und ich bemerkte, dass sie in diesem Beispiel
echte potenzielle Datumsformate waren , die ich möglicherweise sehen konnte. Ich weiß auch, dass diese Datei von einer Anwendung oder einer Webanwendung erstellt wird. Daher kann ich mehr oder weniger garantieren, dass die Diäten die Eingabe erhalten werden nicht schrecklich viel
ändern, weil die Datei automatisch von einem Stück Software generiert wird. Und in der großen Stichprobengröße, die ich erhalten
habe, wurde mir klar, dass es echte potenzielle Ergebnisse gab, wie Excel diese Daten präsentieren wird. Was ich normalerweise immer mache, ist,
sie als Kommentare an der Spitze weiterzugeben , damit ich von diesen arbeiten kann. Also das erste, was ich bemerkt habe, ist, dass ein Datumsformat
ein Leerzeichen hat und das andere Datumsformat gut hat, Devs zu Gewürzen hier und einen anderen Raum dort. Das, was ich bemerkt habe, ist eine der Diäten hat einen zwölfstündigen Zeitstempel mit ihm und zahlen ihn am Ende. Und der andere ist in einem 24-Stunden-Zeitstempel. Jetzt, da ich diese Dinge kenne, kann
ich für diese Szenarien sorgen. Das erste, was ich tun will, ist, diese doppelten Leerzeichen zu behandeln. Die Art und Weise, die ich darüber nachdenke, ist die Verwendung der Ersetzen-Funktion, um ein doppeltes Leerzeichen durch ein einzelnes Leerzeichen zu ersetzen. Also zuerst werde ich nur meine Variable deklarieren es
nur STR versuchen Datum nennen. Und jetzt werde ich doppelte Leerzeichen durch ein einziges Leerzeichen ersetzen. Aber die Ersetzen-Funktion hier und der Ausdruck, den wir senden möchten, ist das STI-Datum. Und was wir finden wollen, sind wahre Gewürze. Und was wir es ersetzen wollen, ist ein einziges Gewürz. Also werde ich in der Lage sein, eine dieser Diäten zu dieser Ersetzungsfunktion zu senden, und es wird nur die S1 beeinflussen. Der nächste Schritt ist, dass ich den Unterschied zwischen diesen beiden identifizieren muss. Also offensichtlich haben wir einen, der im 24-Stunden-Zeitstempel ist und der andere kein zwölfstündiger Zeitstempel ist und einen IM OPM enthält. Also, was ich tun kann, ist nach AM oder PM in einer Zeichenfolge zu suchen. Und wenn das existiert, dann weiß ich, dass ich dieses Format habe. Und wenn es nicht existiert, dann weiß ich, dass ich dieses Format habe. Also kann ich einfach eine einfache if-Anweisung dafür verwenden. Also stelle ich Ihnen das nur in STI oder in String-Funktion vor. Was das also tut, ist, dass es in einer Zeichenfolge nach einer Zeichenfolge sucht, die Sie definieren. Und wenn das, wonach Sie suchen, innerhalb dieser Zeichenfolge existiert, wird die Position in dieser Zeichenfolge als Ganzzahl zurückgegeben. Und wenn es in der Zeichenfolge nicht existiert, wird 0 zurückgegeben. Also will ich bei Charakter eins anfangen. So können Sie an jedem Punkt in der Zeichenfolge beginnen. Und String eins ist das, was du schickst, was das sein wird. String zwei ist das, wonach ich suche. Ich suche, dass ich bin und ich brauche nichts anderes zu liefern. Nun, wenn das größer als 0 ist, dann haben wir ich bin in der Zeichenfolge. Was passiert also, wenn Sie PM in der Saite haben? Nun, wir können einfach eine mündliche Erklärung verwenden und dasselbe verwenden. Oder wir haben auch einen anderen Zustand. Also, wenn wir diesen Teil der if-Anweisung eingeben, bedeutet
das, dass wir diese Art von Diät haben. Und wenn wir diesen Teil der if-Anweisung eingeben, haben
wir diese Spitze des Datums. Das erste, was wir jetzt tun wollen, ist, dieses Datum nach Gewürzen zu teilen. Und das war ein Grund, warum ich diese doppelten Gewürze von Anfang an losgeworden bin. Sie leisten sich, dass ich eine neue Variable brauche, eine Array-Variable. Und ich nenne es SPL-Gewürz, also teilt es sich nach Raum. Wir gehen SPL Gewürz gleich Split. Was teilen wir mit dem Setzen der Vorlagenzeichenfolge? Und wir teilen es nach Weltraum. Was das jetzt bedeutet, ist, dass ich jetzt ein Array habe, das drei Zeilen haben sollte. erste Zeile ist dieser Teil des Datums, die zweite Zeile ist dieser Teil des Datums, und die dritte Zeile ist dieser Teil des Tages. Lassen Sie uns zuerst an diesem Teil der Website arbeiten, das tatsächliche physische Datum ist. Also, was ich jetzt tun kann, ist, dass ich nach Backslash-Zeichen teilen kann, was mich dann mit einem anderen Array führt. Das ist dieser Teil. Diese Portion. Und dieser Teil Summen wird eine andere Array-Variable benötigen. Und ich kopiere das und ich werde das hier einfügen. Jetzt weiß ich, dass der Dydt-Teil in der ersten Zeile existieren wird, die unten 0 in diesem Array ist. Also benutze ich wieder Split. Und was soll ich teilen? Ich werde SPL-Raum aufteilen. Und ich benutze die Zeile 0, die die erste Zeile ist. Und das Trennzeichen ist umgekehrter Schrägstrich. Also, jetzt in diesem, werde
ich drei Reihen halten. Die erste Reihe ist der Tag, zweite Reihe ist der Monat, und die dritte Reihe ist die Gaea. Als nächstes befassen wir uns mit diesem Teil des Datums, der Zeit. Und so weiß ich, dass ich hier zwei Doppelpunkte habe und das durch Doppelpunkte trennen kann. Und noch ein, das wird das Alpha sein und das wird die Minuten sein, und das wird die Sekunden sein. Also mache ich das Gleiche hier. Geben Sie ihm ein paar Klammern. Und ich weiß, dass die Tom-Komponente in Reihe zwei existiert, die eins ist. Also jetzt kann ich anfangen zu koppeln, um das
Datum von dem zu geben , was wir von dieser Zeichenfolge getrennt haben. Und ich werde das zuerst in einer temporären Variablen speichern, die ich dann der Funktionsvariablen zurückweisen werde, die von der Funktion zurückgegeben wird. Also werden wir das jetzt einfach definieren. Und das variable Oberteil ist ein Dite. Jetzt werde ich Ihnen eine andere Funktion vorstellen, die wir Datum Getreide nennen. Und was das tut, ist, dass es ein Datum konvertiert und wir können speziell
dem Gaea-Monat eine ganze Zahl zur Verfügung stellen, so dass wir uns nicht auf die Yankee-Excel-Berechnung verlassen müssen. Also weiß ich, dass das Jahr im SPL-Backslash-Array ist, und ich weiß, dass es in der dritten Zeile dieses Arrays ist. Das Jahr ist also in SPL, echtes Spiel, und es ist in R3, das Punkt zwei ist, weil es bei 0 beginnt. Und denken Sie daran, dass der Monat auch in diesem Array ist, und das ist in Zeile zwei. Daher, unten, Ende der Tag ist in der ersten Reihe. Artikel 0 Also, jetzt habe ich das richtige Datum als Datum in dieser Variablen gespeichert. Also, was ist jetzt mit der Zeit? Normalerweise würde ich eine Funktion verwenden, die der Datumsserie ähnelt, die Zeitgetreide genannt wird. Die serielle Zeitfunktion erfordert jedoch eine 24-Stunden-Zeit. Und leider haben
wir in diesem Beispiel keine 24-Stunden-Zeit, aber das ist eigentlich OK, weil wir
diese Komponente des Farbstoff rechtzeitig haben und es ein I am und pm hier hat. Ich weiß, dass ich dies zuverlässig an eine Datumsvariable senden kann und es richtig konvertiert. Und das liegt daran, dass es hier nicht unsere europäische Diätpuppe hat. Es hat buchstäblich nur die Zeit mit einem IM und PM. Also werde ich einfach eine Variable erstellen, die uns hilft, damit jetzt umzugehen. Also Schrott, das ist gleich. Also normalerweise wurde das eigentlich ausgerufen. Normalerweise würde ich diese Komponente hier verwenden, aber in diesem Fall muss ich das eigentlich nicht tun. Also werde ich das vorerst auskommentieren. Denn was ich in diesem Array verwenden werde, ist eigentlich im 12-Stunden-Format. Und ich kann diese Indict Serie nicht verwenden. Daher werde ich nur einige Strings miteinander verketten, um dies zu generieren. Und ich werde das dieser Datumsvariablen als Beale-Raum zuweisen. Und ich möchte Zeile zwei, die eins ist, weil ich mich auf das Array beziehe, das die Zeichenfolge durch Gewürze teilt, also ist das Zeile eins, und das ist R2. Und so verketten ich hier nur Strings. Also, was das zurückkehren wird, ist das hier. Und es wird das einer Datumsvariablen zuweisen. Also jetzt ist es eine einfache Frage, diese zusammen hinzuzufügen, weil wir hier einen Bruchteil haben
, der der Bruchteil einer ganzen Zahl ist, die den Würfel und die Zeit darstellt. Und dann haben wir hier eine ganze Zahl, die das tatsächliche Datum darstellt. Also kann ich diese einfach zusammenfügen. Und wir haben eine vollständige Datumszeit. Jetzt werde ich das zurück zu einer Funktionsvariable zwei gleich zurückgeben. Und ich werde auch funktionieren. Also, das behandelt dieses Datum. Jetzt reden wir über dieses Datum. Also weiß ich, dass dies ein Leerzeichen enthält und ich es nach Tag und Zeit teilen kann. Also werde ich das hier einfach kopieren, weil wir genau das Gleiche gemacht haben. Ebenso weiß ich, dass ich Backslashes in meiner Datumskomponente habe, also kann ich das auch verwenden. Und ich weiß, dass ich hier einen 24-Stunden-Zeitwert habe. Also kann ich jetzt meinen Doppelpunkt verwenden. Und ich kann jetzt auch anfangen, meine Diäten miteinander zu koppeln. Mit diesem Datum, ähnlich wie dieses Datum, weiß
ich, dass es Tag, Monat, Jahr ist, also kann ich das wirklich einfach direkt nach oben kopieren. Und hier beginnt es sich von dem obigen zu unterscheiden. Und sie werden Zeit Getreide verwenden, die ähnlich dydt Getreide ist, um den Zeitwert zu generieren. Okay, das erste, worum es bittet, ist Alpha. Alpha ist in der ersten Reihe, Spiel Doppelpunkt, und es ist die erste Zeile, was bedeutet 0. Und die Minute ist in Reihe zwei. Und diese Daten, die er hatte, enthalten keine Sekunden, also werde ich nur 0 liefern. Also jetzt haben wir unsere Zeitfraktion und wir haben auch unsere Ernährung als volle Zahl. Also kann ich sie einfach zusammenfügen. Und ich kann das wieder zu einer Funktion zurückgeben. Und ich möchte auch die Funktion hier beenden. Okay, also lasst uns das testen. Ich werde nur einen Haltepunkt auf den Einstiegspunkt einer Funktion setzen. Und ich werde diese Datumszeichenfolge hier kopieren, die erste, und ich bringe einfach das unmittelbare Fenster auf. Nun, Fragezeichen, erhalten Sie Datum von String und ich werde es dieses Datum senden. Was gibt es uns? Oh, okay, das ist gut. Das hat uns eine Sabo-Funktion gegeben, die nicht definiert ist. Und das liegt daran, dass ich das falsch geschrieben habe. Ich habe den Raum nicht kontrolliert. umgekehrter Schrägstrich. Das wird auch bedeuten, dass dieses nicht korrekt ist, weil ich es von oben kopiert habe. Funktioniert das? Jep. Ok. Cool. Ok. Sehen wir uns das hier an. Wenn ich wieder in das unmittelbare Fenster springe, können
Sie das Fragezeichen STI Datum sagen. Und es gibt die Zeichenfolge zurück, was korrekt ist. Und jetzt wird es das Doppel-Leerzeichen ersetzen. Aber in diesem Fall müssen wir keine Gewürze. Da Strings also identisch sein sollten, wenn ich einfach wieder in das unmittelbare Fenster springe, werde, sollten wir das sagen können. Lassen Sie uns löschen, löschen Sie diese Zeile, damit wir sie nebeneinander vergleichen können. Ja, identisch. Richtig? Nun, was wir erwarten, ist, dass dies überspringt, wenn Aussage dann in dieses gesprungen ist. Was das tut. Okay, das ist gut. Wir teilen uns jetzt nach Weltraum. Also, wenn ich jetzt füge dies hinzu, um zu sehen. Aktuelle Kontexte sind in Ordnung. Okay, und im Uhrfenster können wir sehen, dass wir jetzt eine Schnur haben, die nach Gewürzen aufgeteilt ist. Also haben wir die erste Zeile, die das tatsächliche Datum enthält, und wir haben die zweite Zeile, die die Zeit enthält. Das ist großartig. Also zurück in unser Code-Fenster. Jetzt wird durch umgekehrten Schrägstrich geteilt. Also unterschreiben Sie nochmal, was ich tun werde, ist eine Uhr hinzuzufügen. Und ich bin nur besorgt über diese Kontexte, die groß ist und keine Schäden meiner Uhr, können
wir sagen, dass SPL Backslash. Wenn wir das öffnen, haben wir durch umgekehrte Schrägstriche den Farbstoff in Zeile 1,
den Monat in Zeile zwei
und das Jahr in Zeile drei aufgeteilt den Monat in Zeile zwei . Perfekt. Ja, Backup zum Echo Fenster. Wir spalten uns nach Doppelpunkt. Und ich füge einfach eine G9 hinzu, ich füge eine Uhr hinzu. Und wieder, sind nur mit diesen Kontexten beschäftigt. Und wir können sagen, dass wir die Zeit haben, die sie darauf antworten, und wir haben die Minuten. In dieser nächsten Zeile verwenden wir die serielle Funktion mit dem Jahr geliefert, die 20-20 ist. Und wir haben im Monat geliefert, der Juli ist. Und wir haben auch am Deich geliefert
, der 21. ist. Wenn ich also, wenn ich an dem Rasen vorbei bin und hier drüben schweben, sollten
wir sehen, dass genau das ist. Der 21. Juli 2020. Ebenso für dieses Datum Zeitstempel im Moment ist 12. Bin ich. Aber wir haben die Zeit serielle Funktion war es neun als die Stunden und schickte es 24 Stunden und Minuten und saß bei 0 ist die Sekunden. Und wie wir sehen können, haben wir 924 Ich bin. Und keine Sekunden, was großartig ist. Also, jetzt kann ich einfach diese beiden zusammen hinzufügen, was hier tun wird. Wir können sehen, ob wir über schweben, sagen
wir den 21. Juli, 20-20 um 924 Uhr. Und dann werden wir das wieder der Funktionsvariablen zuweisen, so dass wir das in das unmittelbare Fenster
zurückgeben können , drücken Sie die Exit-Funktion. Und wir werden sehen, dass es uns das richtige Datum und die richtige Uhrzeit zur Verfügung gestellt hat. Ok. Also lösche ich einfach alles im unmittelbaren Fenster und wir versuchen das andere Datum. Also werde ich das hier kopieren und das Fragezeichen drücken und es tippe ich ein. Ja. Und ich habe die Klammer, die eine Schnur hier und in den Quarz und ich werde einfach einfügen. Und drücken wir die Eingabetaste. Okay, jetzt sind wir wieder in Funktion. Das erste, was tun wird, ist die beiden Gewürze zu ersetzen. Wie wir sagen können, ist wir schweben, wir bekommen durch Gewürze zwischen dem heißen und dem Zeittopf. Jetzt haben wir also nicht nur ein Leerzeichen, weil wir zwei Zeichen durch eins ersetzt haben. Jetzt erwarten wir, dass der Code in diesen Teil
der Anweisung, weil wir in der Zeichenfolge AM oder PM haben. Das ist großartig. Ja, wir werden uns von Spice trennen und Alpha sprang in das Watch-Fenster. Es sollte immer noch diese Uhren enthalten. Wir haben das SPL-Gewürzarray hinzugefügt, das drei Zeilen enthält, was großartig ist. Wir haben das Datum, wir haben die Zeit, und wir haben PM, und sie sind alle als Strings gespeichert. Als nächstes, Backup im Code-Fenster, werde
ich den ersten Pot durch umgekehrten Schrägstrich teilen. Kann sagen, dass wir diese Zeichenfolge durch umgekehrten Schrägstrich geteilt haben. Also haben wir Tag, Monat und Jahr raus. Ausgezeichnet. Jetzt werde ich das einer Datumsvariable mit serial zuweisen. Wir haben es im Jahr geschickt, wir haben es in Monat geschickt. Wir haben an diesem Tag geschickt. Und doch erst im Juli 2020. Und diese Linie hier ist die riskanteste Linie in unserer gesamten Routine. Und das liegt daran, dass wir uns auf Excel-Berechnung verlassen, um diese Zeichenfolge in diese Datumsvariable zu konvertieren. Aber weil wir nur über eine Zeit auf Konfidenzniveau sprechen, ist extrem hoch, weil wir keine seltsamen Datumsformate haben, um die wir uns Sorgen machen müssen. Also werde ich das jetzt tun, wenn Höhe und wir sollten das sehen. Ja, 7058 Uhr. Großartig. Es hat das tatsächlich in eine Zeit verwandelt. Also, jetzt fügen wir einfach diese beiden zusammen, wie wir es tun. Und ich gebe das zurück zur Funktionsvariablen und verlasse die Funktion. Und wir sollten sehen, dass im unmittelbaren Fenster erscheinen. Du gehst. Das ist also nur ein kurzes Beispiel dafür, wie ich mit diesem Problem umgegangen bin. Der erste Schritt war also, meine Daten zu analysieren. Und ich bemerkte, dass ich eines von zwei Datumsformaten hatte. Und dann habe ich diese Funktion gebaut, die ein derjenige dieser Formate handelte. Okay Leute, das schließt diese Lektion ab. In dieser Lektion haben wir darüber gesprochen, wie Excel Daten speichert und wie VB ay Daten speichert. Wir sprachen über die zahlreichen Probleme, die Sie mit
Diäten aufgrund der Dydt-Berechnung von Excel begegnen könnten . Und ich habe Sie durchgemacht, wie ich diese Probleme verhindere oder minimiere. Ich habe Ihnen auch einige neue UVB I Funktionen und Funktionen vorgestellt. Die erste ist die Ersetzen-Funktion, die im Wesentlichen genau das gleiche ist wie fond and replace in Microsoft Word. Und ich habe Sie auch in string oder eine STR eingeführt, die nach einer bestimmten Zeichenfolge in einer anderen Zeichenfolge suchen wird. Und wenn es existiert, wird
es eine Zahl zurückgeben, die darstellt , welche Zeichennummer die Zeichenfolge, nach der Sie suchen, innerhalb der eines Strings existiert. Und wenn es nicht existiert, wird es 0 zurückgeben. Und schließlich betrachteten wir auch Datum und Uhrzeit Getreide. Und das erlaubt uns zu spezifizieren, was der Tag ist und
wie der Monat, im Gegensatz zur Verwendung von Excels Standardberechnungsmethode? Ein Kerl, Leute, mein Name ist Andrew. Danke fürs Ansehen und ich sehe dich im nächsten Video.
8. 08 – VBA Lektion 15 – Benutzerformulare und Benutzererfahrung: Willkommen zu Lektion 15, Benutzerformularen und Einführung in die Benutzererfahrung. In dieser Lektion möchte ich Ihnen nur das
Erstellen von Benutzerformularen vorstellen und Ihnen ein paarTipps zur Erstellen von Benutzerformularen vorstellen und Ihnen ein paar Benutzererfahrung geben, die Ihnen helfen,
die Verwendung Ihrer Formulare zu einem attraktiveren Erlebnis zu machen . Beginnen wir wieder in der IDE. Das erste, was wir tun wollen, ist, dass wir ein Benutzerformular hinzufügen möchten. Also werde ich hier im Projektfenster mit der rechten Maustaste klicken. Und ich werde einfügen auswählen und ich werde USA-Formular auswählen, die Sie sehen können, hat die Verwendung von Formulardesign Fenster angezeigt. Und das ist im Grunde, was Sie sehen, ist, was Sie Editor bekommen. So entwerfen Sie Ihre Formulare in dieser Ansicht hier. Und Sie werden feststellen, dass es hier auch eine kleine Toolbox angezeigt wird, die alle Steuerelemente oder zumindest
einige der Steuerelemente enthält , die wir verwenden möchten. Nachdem ich mein Formular hinzugefügt habe, werde ich ihm zum ersten Mal einen Namen geben. Und um das zu tun, werde ich nur das Eigenschaftenfenster hier oben aufrufen, und ich werde diese f RAM-Unterstrich-Namen-Adresse nennen. Das ist also der Name des Objekts. Das ist, was wir auf dieses Formular beziehen, wie im Code, wenn RM Unterstrich Name, Adresse. Und ich werde ihm auch eine Beschriftung geben, was oben links im Fenster angezeigt wird. Und so wird die Beschriftung Eigenschaft hier, es wird das ändern. Und wie Sie sehen können, hat es den Text geändert, der in der Beschriftung dieser Uniform steht. Also, was versuchen wir mit diesem Formular zu tun? Was wir tun möchten, ist Benutzereingaben zu erfassen und diese dann auf eine Tabellenkalkulation zu setzen. Und in einer vorherigen Lektion werde
ich nur Excel aufrufen. Wir hatten das Kostendatenblatt. Ich werde nur den Grund dafür bringen, so dass wir können, so können wir sagen, dass die Kosten Datenblatt und das hat den Vornamen, Nachnamen, Stadt und Land. Und ignorieren Sie den Satz, denn das ist die Formel, die wir gebaut haben, die nur Satz bekommt. Aber was ich tun möchte, ist, dass ich ein Formular erstellen möchte, das
Vorname, Nachname, Stadt und Landerfasst Vorname, Nachname, Stadt und Land und das dann in einer neuen Zeile in diesem Blatt füllt. also darüber nachdenken, was
wir brauchen, werden wir für Textboxen brauchen. Und sie werden den Vornamen, den Nachnamen,
die Stadt und das Land enthalten . Wir werden auch vier Etiketten benötigen, um jedes Lehrbuch zu beschriften. Und das, damit der Benutzer weiß, was ein Alter der Textfelder eingeben soll. Schließlich brauchen wir einen Speicher-Button. Und der Cite Button wird dann einen Code ausführen, der das, was sie in
die Tabellenkalkulation eingegeben haben, füllen wird. Also werde ich das nur minimieren und wir gehen hierher zurück. Also, wo ist meine Werkzeugkiste hier? Ja, also zuerst, ich werde ein paar Textfelder hinzufügen. Also, wie ich das machen soll, ist aus der Toolbox, klicken Sie
einfach darauf und ziehen Sie es dann über das Formular selbst. Und ich werde nur zum Kreuz ziehen. Sie sind im Moment nicht ausgerichtet oder irgendetwas, das ist in Ordnung. Gerade für jetzt, passen Sie auch die Größe mit einem Trackpad in diesem Video, so dass die Masse Agilität ist ziemlich niedrig. Und auch möchten wir ein paar Etiketten hinzufügen. Also lasst uns die hier rüber bringen. Und ich werde ein paar Etiketten hinzufügen. Und ich werde nur ein kleines Trackpad ist ärgerlich. Ich eigentlich nur die Größe und dann kopiere und füge Tage ein. So kopieren und einfügen sieht genau das gleiche, nur Control-C, Control-V. Das erste was ich tun will, nachdem wir Tage hinzugefügt haben, ist, dass ich ihnen eine Namenskonvention geben werde. Also bin ich ganz über Namenskonventionen. Und wenn wir auf den Code kommen, zeige
ich Ihnen, warum es sehr nützlich ist, eine Namenskonvention zu verwenden. So werden wir mit einem Textfeld beginnen. Ich werde sie t, x t nennen und der erste war Vorname. Ich bin der Name der Schule. Ich könnte uns sogar ein Etikett geben. Lbl, Vorname, und ich gebe dem eine Beschriftung. Ja, ja. Und das ist so, und ich gebe diese Beschriftung, was wir sonst noch haben? Wir hatten Vorname, Nachname, Stadt und Land. Großartig. Also geh zurück zu hier, TXT Stadt, und es wird LCD sein und geben, dass auch eine Beschriftung. Und TXT Land, geben Sie dem ein Etikett. Später im Video werde
ich mehr über die Benutzererfahrung erklären, aber ich möchte nur, dass Sie darüber nachdenken, richtig? Wenn Sie also Ihre Formulare entwerfen, denken Sie über die Reise der Maus und die Reise der Verwendungsaugen. In der realen Welt müssen Sie auf jeden Fall ein Label links von einem Textfeld sehen. Aber wenn Sie darüber nachdenken, wie Sie es verwenden, diese Informationen verdauen, müssen
sie zuerst auf das Etikett schauen und dann in das Textfeld selbst übergehen. Wenn man das bedenkt, ist
es eigentlich viel besser. Ich werde diese einfach nach unten verschieben, um das Etikett direkt über das Textfeld selbst zu setzen. Und das macht es einfacher zu bedienen. Es ist verdaulich, weil sie einfach nach unten schauen können, im Gegensatz zu und dann links und dann rechts und dann links und dann rechts und dann links und dann rechts. Also werde ich das einfach für all diese tun. Bringen Sie das noch ein bisschen hoch. Ich kann auch
die Größe jedes dieser Textfelder im Moment etwas klein erweitern , also könnte ich einfach ein bisschen größer werden. Und jetzt kann ich die Form kleiner machen. Und jetzt fügen wir eine Befehlsschaltfläche hinzu und das ist, um
den Code auszulösen , der ausgeführt wird, der nimmt, was im Formular ist und auf dem Blatt ausgefüllt wird. Legen wir das da hin. Wieder. Ich rufe das einfach C und B an und gehe einfach retten. Und ich gebe ihm auch eine Beschriftung. Sicher. Ich könnte das einfach auch die Breite von l Textfeldern machen. Bringen Sie das wieder hoch. Also, jetzt haben wir unsere grundlegende Formularentwurfsbeschwerde, und wir haben auch Namenskonventionen für unsere Steuerelemente. Und das ist sehr nützlich, wie ich es Ihnen jetzt zeigen werde. Also werde ich dieses Eigenschaftenfenster ein wenig herunterbringen. Also, jetzt werde ich in das Code-Modul dieses Objekts gehen, das das Formularobjekt ist. Es hat also ein eigenes privates Codemodul darin. Also, wenn ich einfach Code anzeigen gehe, und das ist das Code-Modul in diesem Formular. Die nächste Sache ist, wie weisen wir dem Ereignis Code zu, das der Klick auf den Cite Button ist. Es gibt also ein paar Möglichkeiten, dies zu tun. Der erste Weg, ich werde Ihnen zeigen, dass die ACS Weg. Gehen Sie also zurück zum Formulardesign. Doppelklicken Sie einfach darauf. Und wenn ich dies auswähle und auf das Objekt doppelklicke, wird automatisch ein Sub generiert, ein privater Sub, der das Ereignis
des Klicks abfängt , so dass wir Code auf dem Klick ausführen können. Wie Sie sehen können, hat es den Namen der Befehlsschaltfläche und dann hat
es auch das Ereignis danach. Die andere Möglichkeit besteht also darin, diese Dropdown-Felder oben zu verwenden. Wie Sie sehen können, haben
wir die Steuerelemente, die sich auf diesem Formular befinden, das sich innerhalb des einheitlichen Objekts befindet. Und wenn ich CMB speichern auf der linken Seite, es erstellt automatisch klicken. Aber es gibt auch auf der rechten Seite
eine Reihe von anderen Ereignissen, die wir auch fangen können. Also, wenn ich darauf doppelklicke, wenn sie ziehen über, et cetera, et cetera, lassen Sie es einfach mit Click. Also das erste, was wir tun wollen, ist eines der validieren, was der Benutzer eingegeben hat. Ich möchte keine leeren Zeilen in unser Arbeitsblatt eingeben. Das ist eigentlich sehr wichtig, wenn Sie Code basierend
auf vom Benutzer eingegebenen Informationen erstellen , die Sie überprüfen, was der Benutzer eingegeben hat. Also werde ich das tun, ist, dass ich zuerst
die Textfelder betrachten werde und ich werde die Länge des Wertes messen, was der Benutzer eingegeben hat,
und sicherstellen, dass sie tatsächlich Text in allen Feldern eingegeben haben. Also in diesem Fall sind alle Felder auf diesem ehemaligen obligatorisch. Lassen Sie mich Ihnen zeigen, wie ich das machen werde. Also werde ich zuerst ein leeres Objekt erstellen. Und dieser Typ ist nur ein Objekt, das ein generischer Objekttyp ist. So können Sie es so ziemlich jedes Objekt zuweisen. Und ich werde dieses Objekt in einer for-Schleife verwenden. Und wir haben diese Arten von Folaten schon mal benutzt. Aber zur Erklärung, was wir tun, ist, dass wir alle Steuerelemente auf dem Formular und jede Iteration der Schleife
durchlaufen, es wird das aktuelle Steuerelement diesem Objekt zuweisen, so dass wir dieses Objekt abfragen können und dann Führen Sie eine Logik darauf aus. Also lassen Sie uns aufhören, dass for-Schleife. Die Steuerelemente Methode des Formularobjekts ist also eine Sammlung von Steuerelementen. Das Angeben von Steuerelementen wird also eine Sammlung von Steuerelementen sein. Sie können aber auch ein individuelles Steuerelement angeben, indem Sie es in Index oder Name angeben. Aber in diesem Fall möchte ich nur die Sammlung von Steuerelementen. Und wir werden durch jedes Objekt in dieser Sammlung von Steuerelementen Zyklus. Nun, innerhalb dieser Sammlung von Steuerelementen, enthält
es jedes Steuerelement auf diesem Formular. Es enthält also die Beschriftungen, es enthält die Textfelder, es enthält die Schaltfläche und jedes andere Steuerelement, das Sie dem Formular hinzugefügt haben. Und das ist, wenn Namenskonventionen sehr nützlich sind. Also, es, weil wir alles über Textfelder,
TXT auf der Schule benannt haben , und dann den Namen des Steuerelements. Wir wissen, dass, wenn der Name des Steuerelements mit TXT beginnt, Es ist ein Textfeld. Also füge ich einfach das nächste hinzu. Das ist also unsere Schleife. Also, jetzt werde ich die ersten drei Zeichen von jedem der Steuerelemente zu verhören. Ich benutze links als die ersten drei Zeichen. So kann ich jetzt die Länge des Wertes IA abfragen, was der Benutzer in dieses Feld eingegeben hat. Also, wenn sie nichts eingegeben haben, also wenn die Länge dessen, was sie in das Feld eingegeben haben, 0 ist. Und ich will auch die Sabah verlassen, will nicht weitermachen, wenn wir diesen Punkt der Validierung erreicht haben. Und das es ist ein Textfeld, das keine Informationen enthält , da alle Felder obligatorisch sind. Also werde ich nur einen kurzen Kommentar machen. Sie sind wahr. Also validiere ich alle Felder. So können wir jetzt mit dem Lösungsprozess beginnen. also darüber nachdenken, was machen wird,
benötigen Sie definitiv die Arbeitsmappe und das Arbeitsblattobjekt. Also deklariere ich die einfach. Und ich setze sie ein. Und ich werde sie erst nach
der Validierung setzen , weil ich nicht nur Ressourcen verschwenden will. Und das Blatt, nach dem wir suchen, sind Kostendaten. Also jetzt möchte ich die Informationen in das Arbeitsblatt eingeben. Also werde ich mich auf die verwendete Bereichszeilenzählungsmethode des Arbeitsblatts selbst verlassen. Aber ich werde das einer Variablen oder einer Zahl zuweisen. Also benutze ich hier ein langes Oberteil. Es ist also eine ganze Zahl ohne Dezimalzahl, aber es könnte potenziell größer als 32,5 Tausend sein. Und das liegt daran, dass
wir in diesem Fall im Laufe der Zeit marschieren, einen Benutzer in mehr als 32,5 Tausend Zeilen
haben. Und ich will es nicht auf 32,5 Tausend beschränken. Also in diesem Fall werde ich eine lange verwenden und ich werde
das mit der verwendeten Bereichszeilenzählungsmethode zuweisen . Und so diese Methode, sie verwendet Bereichsmethode, Punkt ROS Punktanzahl wird uns
die aktuelle Zeile zurückgeben , die das letzte Stück Information enthält. In diesem Fall wird es uns eine Sechs zurückgeben weil sechs die letzte Zeilenanzahl des verwendeten Bereichs ist. Aber weil wir die Werte in die nächste hart nach unten hinzufügen möchten, werde
ich nur eins hinzufügen, wenn eine Auffüllung von Informationen auf das Arbeitsblatt. Also lasst uns das jetzt machen. haben wir schon mehrmals gemacht. Also x plus eins. Das ist also die Zeilennummer und die Spalte ist eins. Und ich werde eigentlich nur dieses sichere Thema kopieren und einfügen und mich ein paar Male getroffen. Aber ich werde nur die Spaltennummern anpassen. Und ich werde auch die eigentlichen Kontrollen selbst anpassen. Nachname. Ct. Nachdem wir diese Zeilen ausgeführt haben, haben
wir diesen Datensatz im Arbeitsblatt gespeichert. Und jetzt möchte ich auch das Formular zurücksetzen. Also werde ich eigentlich nur diese Methode verwenden, die eine Vollschleife ist. Und ich werde nur durch jedes der Steuerelemente gehen, die mit TXT
beginnen, und wir werden die Werte auf nichts setzen. Also werde ich das loswerden. Also lasst uns das jetzt testen. Also habe ich nur ein Fenster eingerichtet, das wir das Arbeitsblatt
darunter sehen können , so dass wir es hinzufügen können, während wir gehen. Und ich bringe das hier runter. Und ich werde wieder auf das Formular springen. Nahaufnahme für jetzt. Spielen. Okay, also zuerst, lasst uns die Validierungen testen. Wenn ich auf Speichern klicke, sollte ich ein Meldungsfeld sehen. Es sagt, bitte geben Sie alte Textfelder oder Wert in alle Textfelder ein. Und es hat, wir gehen, ich habe richtig geschrieben Wertschätzung. Und geben wir einfach eins nach dem anderen ein. John. Ja, ja. Und jetzt sollten wir diese bevölkerte neue Zeile sehen. Boom, da geht's. Das ist eine neue Zeile in diesem Arbeitsblatt aufgefüllt. Und es hat auch alle Werte gelöscht. Und das ist so, dass, wenn wir speichern mehrmals hintereinander, es nicht in mehrere Zeilen desselben Datensatzes. Okay, schließen Sie das. Nun, bringen Sie das wieder hoch, springen Sie zurück zum Code. Erklären wir es noch einmal. Also in einem Validierungsschritt, was wir tun, ist, dass wir zuerst die vollständige Liste der Steuerelemente auf dem Formular greifen. Und in jeder Iteration dieser for-Schleife weisen
wir diesem leeren Objekt das aktuelle Steuerelement zu. Und dann befragen wir dieses Objekt, um zu sehen, ob links vom Namen dieses Objekts oder die ersten drei Zeichen des Objektnamens TXT ist. Und wenn dies der Fall ist, testen
wir dann den Wert, aber wir testen die Länge des Wertes. Und wenn dieser Wert 0 ist, also wenn die Länge dessen, was in diesem Textfeld eingegeben wird, 0 ist, dann werden wir den Benutzer mit einem Meldungsfeld präsentieren und das wird sagen, geben
Sie bitte eine val lie ein. Dadurch wird dieser Wert in allen Textfeldern geändert. Und so dann, sobald wir die Schritte der Validierung mit sitzen die Arbeitsmappe und das Arbeitsblatt-Objekt abgeschlossen haben. Way Grabbing der verwendeten Bereich Zeilenanzahl, die sein wird, das war sechs Note sieben. Und dann füllen wir das auf das Blatt selbst. Und dann verwenden wir die gleiche foreach-Schleifenmethode hier unten, um die Werte dieses Textfelds zu löschen , um das Formular zu aktualisieren und dem Benutzer zu erlauben, etwas anderes einzugeben. Jetzt, da wir die Grundlagen unter Kontrolle haben, beginnen
wir über einige Tipps zur Benutzererfahrung zu sprechen. Tipp Nummer eins, halten Sie die Dinge einfach und Cape Dinge schlau. Beseitigen Sie unnötige Felder im Formular. Verwenden Sie bedingte Logik. Wenn Sie also ein Feld benötigen, dieses Feld aber nur unter bestimmten Bedingungen benötigen,
legen Sie den Standardstatus auf ausgeblendet und zeigen Sie sie programmgesteuert an. Es ist viel besser für uns, Code zu schreiben, um die Komplexität zu handhaben , um
die Dinge für den Benutzer einfach zu halten. Tipp Nummer zwei, ähnlich wie Tipp 1, verwenden Sie bedingte Logik so weit wie möglich, um die Dinge intelligent zu halten. Nutzen Sie die vielen Veranstaltungen, die Ihnen zur Verfügung stehen. Fangen Sie das Ereignis ein, dass ein Benutzer etwas eingibt und tun Sie dann etwas basierend auf dem, was er eingegeben hat. Ein gutes Beispiel dafür, dass Sie gesehen haben, dass in der realen Welt auf einigen Adresserfassungsformularen, die staatlichen Kombinationsfelder automatisch basierend auf dem Land gefüllt, das ausgewählt ist. Also zum Beispiel, wenn ich feststelle, dass ich in Australien auf dem Formular ist nicht gehen, um mir US-Bundesstaaten in der staatlichen Kombinationsbox zu zeigen. Tipp Nummer drei. Es ist besser, Ihre Datenerfassung über mehrere Formulare zu multiplizieren und
dann eine riesige Form zu erstellen,
die den Benutzer mit der Menge an Daten überwältigt , die er eingeben muss. Während VBA für dieses moderne Konzept entwickelt
wird, ist es ziemlich einfach, dies nahtlos zu implementieren. Zum Beispiel können Sie zahlreiche Bildschirme über
mehrere Formulare erstellen und dann programmgesteuert zwischen den Bildschirmen wechseln, wodurch die Illusion einer einzigen Form entsteht. Um dies effektiv zu tun, müssen
Sie eine Übergangsroutine erstellen, die Dinge wie Bildschirmposition berücksichtigt. Was ich damit meine, ist, die x- und
y-Koordinaten zu nehmen , die angibt, wo das Formular auf dem Bildschirm angezeigt wird. Und dann weisen Sie das zu, um zwei zu bilden, so dass das nächste Formular genau an der gleichen Stelle wie das zuvor erscheint. Es gibt nur die Illusion, dass mehrere Formen tatsächlich eine Form sind, die sich dynamisch ändert. Tipp Nummer vier, wie im praktischen Beispiel angegeben, setzt Sie ein Feld Beschriftungen über dem Feld nicht nach links oder rechts ausgerichtet. Was dies tut, ist es vereinfacht das Verwendungsverständnis der Form. Es bietet auch weniger Fixierpunkte, i, j, die Orte, die der Benutzer auf dem Formular suchen muss. Tipp Nummer fünf, gruppieren verwandte Felder in logische Gruppen. Wenn Sie mehr als sechs Felder verwenden, gruppieren Sie die Eingabefelder in logische Abschnitte. Darüber hinaus deuten Untersuchungen darauf hin, dass logische Gruppen in Spalten ausgerichtet sein sollten. Tipp Nummer sechs, Größe Sie werden Felder entsprechend. Es gibt nichts Schlimmeres, als Text in ein Feld einzugeben, das
zu klein ist , um anzuzeigen, was in einer Zeile eingegeben wird. Umgekehrt sieht es wirklich seltsam aus,
eine kleine Menge Text in ein enormes Lehrbuch einzugeben . Tipp Nummer sieben, stellen Sie sicher, dass der Tab-Index für alle Steuerelemente im Formular korrekt ist. Auf diese Weise können die Benutzer einfach mit der Tabulatortaste durch das Formular navigieren. Sie können den Registerkartenindex im Eigenschaftenfenster jedes Steuerelements anzeigen und festlegen. Tipp Nummer acht. Obwohl Excel und VBA dies nicht besonders einfach machen, kann
die Verwendung von Bildern oder Symbolen Sie eine viel attraktiver, gebrandmarkt und professionell machen. Aber Sie müssen hier wirklich vorsichtig sein. Aufgrund der VBA-Formularplattform kann die
Verwendung von Bildern als Ersatz für andere Steuerelemente zu unerwünschten Ergebnissen führen. Und das liegt daran, dass die Bildsteuerelemente buchstäblich
nur statische Objekte sind und sich nicht wie andere Steuerelemente verhalten. In einer erweiterten Lektion zeige
ich Ihnen, wie Sie Bilder richtig als Steuerelemente verwenden. Zum Beispiel, wie Sie einen Mauszeiger über Effekt erhalten
und wie Sie ein Bild wie ein Schaltflächen-Steuerelement und andere Steueranimationen drücken. Also, das fasst diese Lektion und die erste Zwischenreihe von VBA Anfänger Ninja zusammen. Ich möchte Ihnen danken, dass Sie meine Lektionen beobachtet haben. Wenn Sie etwas Bestimmtes sehen möchten, hinterlassen
Sie bitte einen Kommentar. Auch, wenn es etwas gibt, das Sie Probleme mit
Eva mit dem Kurs oder Ihrem eigenen persönlichen VBA-Projekt haben, zögern
Sie nicht, mich zu kontaktieren. Ich bin immer glücklich, Ihnen zu helfen. Die nächste Reihe von Videos wird auch Zwischeninhalte sein. Wir werden uns jedoch mit
mehr szenario-basierten Problemen auseinandersetzen , denen Sie zweifellos in der realen Welt begegnen werden. Mein Name ist Andrew. Ich hoffe, Sie haben diesen Kurs genossen und ich werde Sie in
der nächsten Serie von VBA sehen , Anfänger bis Ninja.