{"id":55000341,"date":"2022-12-01T00:00:00","date_gmt":"2023-03-02T16:58:25","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=341"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Dateien_und_Ordner_auswaehlen_per_FileDialog","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Dateien_und_Ordner_auswaehlen_per_FileDialog\/","title":{"rendered":"Dateien und Ordner ausw&auml;hlen per FileDialog"},"content":{"rendered":"<p><b>Wenn Du mit VBA programmierst, wirst Du immer wieder mit Dateien arbeiten. Eine der Hauptaufgaben dabei ist, zu &ouml;ffnende Dateien auszuw&auml;hlen, Verzeichnisse zu selektieren oder einen Namen f&uuml;r eine zu speichernde Datei festzulegen. Alles drei l&auml;sst sich mit verschiedenen Methoden erledigen, aber es gibt eine Klasse, die alles gleichzeitig anbietet &#8211; und zwar die FileDialog-Klasse der Office-Bibliothek. In diesem Artikel schauen wir uns an, wie Du Dateidialoge f&uuml;r die verschiedenen Anwendungszwecke &ouml;ffnen und auswerten kannst.<\/b><\/p>\n<h2>Beispielumgebung<\/h2>\n<p>Wie immer ben&ouml;tigen wir eine Office-Anwendung oder Entwicklungsumgebung, um mit den Objekten, Eigenschaften und Methoden der Klasse <b>FileDialog<\/b> zu experimentieren. In diesem Fall wollen wir einmal ein Excel-Workbook nutzen, das wir logischerweise als <b>.xlsm<\/b>-Datei speichern. Das Worksheet dieser Exceldatei nutzen wir zur Ausgabe der mit der <b>FileDialog<\/b>-Klasse ermittelten Dateien und dort bringen wir auch die zum Aufruf notwendigen Schaltfl&auml;chen unter.<\/p>\n<h2>Die FileDialog-Klasse verf&uuml;gbar machen<\/h2>\n<p>Um auf die <b>FileDialog<\/b>-Klasse und ihre Methoden und Eigenschaften zugreifen zu k&ouml;nnen, ben&ouml;tigen wir entweder einen Verweis auf die Bibliothek <b>Microsoft Office x.0 Object Library <\/b>oder wir referenzieren diese per Late Binding. Da wir die Vorz&uuml;ge von IntelliSense zu sch&auml;tzen wissen, nutzen wir hier die Bibliothek, die wir im VBA-Editor einbinden k&ouml;nnen.<\/p>\n<p>Von der Excel-Benutzeroberfl&auml;che wechseln wir dazu mit der Tastenkombination <b>Alt + F11 <\/b>zum VBA-Editor. Hier w&auml;hlen wir den Men&uuml;eintrag <b>Extras|Verweise <\/b>aus. Im nun erscheinenden <b>Verweise<\/b>-Dialog finden wir gegebenenfalls bereits den markierten Eintrag aus Bild 1 vor. Anderenfalls suchen Sie diesen in der alphabetisch sortieren Liste und f&uuml;gen ihn durch Setzen eines Hakens in das entsprechende K&auml;stchen hinzu.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_06\/pic_341_001.png\" alt=\"Verweis auf die Objektbibliothek Microsoft Office 16.0 Object Li-brary\" width=\"499,6267\" height=\"393,8742\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Verweis auf die Objektbibliothek Microsoft Office 16.0 Object Li-brary<\/span><\/b><\/p>\n<h2>Einen Dateidialog anzeigen<\/h2>\n<p>Grunds&auml;tzlich zeigt man einen <b>FileDialog <\/b>wie folgt an:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objFiledialog<span style=\"color:blue;\"> As <\/span>Office.FileDialog\r\n<span style=\"color:blue;\">Set<\/span> objFiledialog = _\r\n     Application.FileDialog(msoFileDialogFilePicker)\r\nobjFiledialog.Show<\/pre>\n<p>Wir ben&ouml;tigen also eine Objektvariable, die den Typ <b>Office.FileDialog <\/b>aufweist und f&uuml;llen diese mit einem Verweis auf die <b>FileDialog<\/b>-Klasse unter Angabe des Typs, den wir ben&ouml;tigen &#8211; in diesem Fall <b>msoFileDialogPicker<\/b>.<\/p>\n<p>Dann zeigen wir den Dialog mit der Methode <b>Show <\/b>an. Das Ergebnis dieses einfachen Aufrufs finden wir in Bild 2.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_06\/pic_341_002.png\" alt=\"Ein erster Dateidialog zur Auswahl einer Datei\" width=\"649,627\" height=\"361,4175\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Ein erster Dateidialog zur Auswahl einer Datei<\/span><\/b><\/p>\n<h2>Auswahl im Dateidialog auswerten<\/h2>\n<p>Nun k&ouml;nnen wir  nach der Auswahl wie im oben angegebenen Beispiel mit dem Ergebnis noch nichts anfangen. Das erledigen wir, indem wir das Ergebnis des Aufrufs pr&uuml;fen und dann die selektierten Daten auswerten. Die ersten beiden Zeilen bleiben gleich:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objFiledialog<span style=\"color:blue;\"> As <\/span>Office.FileDialog\r\n<span style=\"color:blue;\">Set<\/span> objFiledialog = _\r\n     Application.FileDialog(msoFileDialogFilePicker)<\/pre>\n<p>Danach rufen wir die <b>Show<\/b>-Methode jedoch als Teil einer <b>If&#8230;Then<\/b>-Bedingung auf und pr&uuml;fen in dieser das Ergebnis.<\/p>\n<p>Dieses kann <b>True <\/b>oder <b>False <\/b>lauten. Es lautet <b>True<\/b>, wenn der Benutzer die Eingabe mit der <b>OK<\/b>-Schaltfl&auml;che abgeschlossen hat, und <b>False<\/b>, wenn er die <b>Abbrechen<\/b>-Schaltfl&auml;che w&auml;hlt. Die <b>OK<\/b>-Schaltfl&auml;che kann der Benutzer &uuml;brigens erst bet&auml;tigen, wenn er eine Datei ausgew&auml;hlt hat.<\/p>\n<p>Im ersten Fall, also wenn der Benutzer eine Datei ausgew&auml;hlt und auf die <b>OK<\/b>-Schaltfl&auml;che gedr&uuml;ckt hat, greifen wir mit <b>objFileDialog.SelectedItems(1) <\/b>auf den ersten ausgew&auml;hlten Eintrag zu und geben diesen im Direktbereich des VBA-Editors aus.<\/p>\n<p>Im zweiten Fall, also wenn der Benutzer die Abbrechen-Schaltfl&auml;che bet&auml;tigt hat, zeigen wir den Text <b>Keine Datei ausgew&auml;hlt <\/b>an:<\/p>\n<pre><span style=\"color:blue;\">If <\/span>objFiledialog.Show = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n     <span style=\"color:blue;\">Debug.Print<\/span> objFiledialog.SelectedItems(1)\r\n<span style=\"color:blue;\">Else<\/span>\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Keine Datei ausgew&auml;hlt\"\r\n<span style=\"color:blue;\">End If<\/span><\/pre>\n<h2>Verschiedene Dialogtypen<\/h2>\n<p>Wir k&ouml;nnen verschiedene Dialogtypen nutzen. Dazu gibst Du unterschiedliche Werte beim Zuweisen des <b>FileDialog<\/b>-Objekts an. Diese lauten:<\/p>\n<ul>\n<li><b>msoFileDialogFilePicker<\/b>: Zeigt einen Dialog zum Ausw&auml;hlen einer oder mehrerer Dateien an.<\/li>\n<li><b>msoFileDialogFolderPicker<\/b>: Zeigt einen Dialog zum Ausw&auml;hlen eines Verzeichnisses an.<\/li>\n<li><b>msoFileDialogOpen<\/b>: Zeigt den gleichen Dialog an wie <b>msoFileDialogFilePicker<\/b>, jedoch mit dem Titel <b>&Ouml;ffnen<\/b>. Ist f&uuml;r Office-Anwendungen wie Word oder Excel geeignet, wo Dokumente so direkt ge&ouml;ffnet werden k&ouml;nnen.<\/li>\n<li><b>msoFileDialogSaveAs<\/b>: Zeigt einen Dialog zum Angeben einer zu speichernden Datei an. Es kann eine vorhandene Datei ausgew&auml;hlt werden oder auch ein neuer Dateiname angegeben werden. Die Schaltfl&auml;che zum Best&auml;tigen der Eingabe ist hier mit <b>Speichern <\/b>beschriftet.<\/li>\n<\/ul>\n<h2>Mehrfachauswahl erlauben<\/h2>\n<p>Mit der Eigenschaft <b>AllowMultiSelect <\/b>k&ouml;nnen Sie festlegen, ob der Benutzer nur einen Eintrag (<b>False<\/b>) oder mehrere Eintr&auml;ge ausw&auml;hlen kann (<b>True<\/b>). Diese Eigenschaft stellen wir nach dem Zuweisen der <b>FileDialog<\/b>-Klasse an die Variable <b>objFileDialog <\/b>ein:<\/p>\n<pre>objFiledialog.AllowMultiSelect = <span style=\"color:blue;\">True<\/span><\/pre>\n<p>Wenn Du so einen <b>msoFileDialogFilePicker<\/b>-Dialog &ouml;ffnest, kannst Du beispielsweise bei gedr&uuml;ckter <b>Strg<\/b>-Taste mehrere Dateien wie in Bild 3 ausw&auml;hlen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_06\/pic_341_003.png\" alt=\"Mehrfachauswahl per FileDialog-Objekt\" width=\"524,6265\" height=\"360,7337\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Mehrfachauswahl per FileDialog-Objekt<\/span><\/b><\/p>\n<p>Danach ist allerdings eine andere Auswertung erforderlich als bei der einfachen Auswahl, denn wir erhalten ja nicht nur einen, sondern gegebenenfalls auch mehrere Eintr&auml;ge zur&uuml;ck. Im Beispiel aus Listing 1 durchlaufen wir in einer Schleife alle Eintr&auml;ge der Auflistung <b>SelectedItems <\/b>und geben diese im Direktbereich aus. Dabei muss die als Laufvariable verwendete Variable den Typ <b>Variant <\/b>aufweisen, auch wenn diese lediglich <b>String<\/b>-Werte zugewiesen bekommt.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Mehrfachauswahl()\r\n     <span style=\"color:blue;\">Dim <\/span>objFiledialog<span style=\"color:blue;\"> As <\/span>Office.FileDialog\r\n     <span style=\"color:blue;\">Dim <\/span>varFilename<span style=\"color:blue;\"> As Variant<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objFiledialog = Application.FileDialog(msoFileDialogFilePicker)\r\n     objFiledialog.AllowMultiSelect = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">If <\/span>objFiledialog.Show = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         For Each varFilename In objFiledialog.SelectedItems\r\n             <span style=\"color:blue;\">Debug.Print<\/span> varFilename\r\n         <span style=\"color:blue;\">Next<\/span> varFilename\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> \"Keine Datei ausgew&auml;hlt\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Anzeigen und Auswerten einer Mehrfachauswahl<\/span><\/b><\/p>\n<h2>Beschriftung der Schaltfl&auml;che zum Ausw&auml;hlen &auml;ndern<\/h2>\n<p>Mit der Eigenschaft <b>ButtonName <\/b>k&ouml;nnen wir die sichtbare Bezeichnung der Schaltfl&auml;che zum Ausw&auml;hlen der gew&auml;hlten Dateien oder Verzeichnisse &auml;ndern. Das gelingt allerdings nicht bei allen <b>FileDialog<\/b>-Typen auf Anhieb, sondern bei manchen erst nach der Auswahl eines Eintrags. Bei den Dialogen der Typen <b>msoFileDialogFolderPicker <\/b>und <b>msoFileDialogSaveAs <\/b>erscheint der gew&uuml;nschte Text sofort. Das sieht beispielsweise wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Schaltflaechenbeschriftung()\r\n     <span style=\"color:blue;\">Dim <\/span>objFiledialog<span style=\"color:blue;\"> As <\/span>Office.FileDialog\r\n     <span style=\"color:blue;\">Set<\/span> objFiledialog = _\r\n         Application.FileDialog(msoFileDialogFolderPicker)\r\n     objFiledialog.ButtonName = \"Ordner ausw&auml;hlen\"\r\n     <span style=\"color:blue;\">If <\/span>objFiledialog.Show = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> objFiledialog.SelectedItems(1)\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">Debug.Print<\/span> \"Keine Datei ausgew&auml;hlt\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis sieht wie in Bild 4 aus. Statt der Beschriftung <b>&Ouml;ffnen <\/b>erscheint hier also nun der Text <b>Ordner ausw&auml;hlen<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_06\/pic_341_004.png\" alt=\"Angepasste Schaltfl&auml;chenbeschriftung beim Ausw&auml;hlen eines Ordners\" width=\"524,6265\" height=\"360,7337\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Angepasste Schaltfl&auml;chenbeschriftung beim Ausw&auml;hlen eines Ordners<\/span><\/b><\/p>\n<p>Bei den anderen Einstellungen wird der gew&uuml;nschte Text erst f&uuml;r den Standardtext angezeigt, wenn der Benutzer mindestens eine Datei ausgew&auml;hlt hat.<\/p>\n<h2>Eigenschaften werden beibehalten<\/h2>\n<p>Wenn wir diese und die nachfolgend beschriebenen Eigenschaften nutzen, werden die Einstellungen beim erneuten &Ouml;ffnen eines <b>FileDialog<\/b>-Fensters aus der gleichen Anwendung heraus beibehalten, wenn wir nicht explizit neue Werte f&uuml;r die Eigenschaften angeben. Um eine Eigenschaft wie beispielsweise die Schaltfl&auml;chenbeschriftung zur&uuml;ckzusetzen, stellen wir diese einmalig auf eine leere Zeichenkette ein:<\/p>\n<pre>...\r\nobjFiledialog.ButtonName = \"\"\r\n...<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000341\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000341?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000341\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"6202865f9c\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn Du mit VBA programmierst, wirst Du immer wieder mit Dateien arbeiten. Eine der Hauptaufgaben dabei ist, zu &ouml;ffnende Dateien auszuw&auml;hlen, Verzeichnisse zu selektieren oder einen Namen f&uuml;r eine zu speichernde Datei festzulegen. Alles drei l&auml;sst sich mit verschiedenen Methoden erledigen, aber es gibt eine Klasse, die alles gleichzeitig anbietet &#8211; und zwar die FileDialog-Klasse der Office-Bibliothek. In diesem Artikel schauen wir uns an, wie Du Dateidialoge f&uuml;r die verschiedenen Anwendungszwecke &ouml;ffnen und auswerten kannst.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662022,66062022,44000025],"tags":[],"yst_prominent_words":[],"class_list":["post-55000341","post","type-post","status-publish","format-standard","hentry","category-662022","category-66062022","category-VBAProgrammierung"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000341","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000341"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000341\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000341"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000341"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000341"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}