{"id":55001168,"date":"2018-12-01T00:00:00","date_gmt":"2020-05-13T21:13:38","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1168"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Kommandozeile_per_DLL","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/","title":{"rendered":"Kommandozeile per DLL"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/bf80d6409a5e4334afb012c12ece5921\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wenn Sie von Access aus Befehle ausf&uuml;hren wollen, die Sie normalerweise &uuml;ber die Kommandozeile beziehungsweise die Eingabeaufforderung eingeben w&uuml;rden, ist das kein Problem &#8211; das erledigen Sie ganz einfach &uuml;ber die Shell-Anweisung. Interessanter wird es, wenn Sie die Ausgabe der Anwendung einlesen und verarbeiten wollen, um beispielsweise auszuwerten, ob der Aufruf erfolgreich war oder welches Ergebnis dieser geliefert hat. Mit VBA beziehungsweise API-Funktionen gelingt dies nicht immer zuverl&auml;ssig. Also schauen wir uns in der .NET-Bibliothek um, ob es dort Alternativen gibt, und machen uns diese &uuml;ber eine DLL unter VBA verf&uuml;gbar.<\/b><\/p>\n<p>Im Beitrag <b>VB.NET-DLL f&uuml;r Access programmieren <\/b>(<b>www.access-im-unternehmen.de\/1167<\/b>) haben wir gezeigt, wie Sie eine VB-DLL programmieren, die Sie vom VBA-Projekt einer Access-Anwendung aus einbinden k&ouml;nnen, um auf ihre Methoden und Eigenschaften zuzugreifen. Auf dieser DLL setzen wir nun auf, um uns die zum Absetzen von Programmaufrufen und zum Erfassen der R&uuml;ckgabewerte erforderlichen Funktionen verf&uuml;gbar zu machen. <\/p>\n<h2>Debugging<\/h2>\n<p>Um das Debugging zu erleichtern, wollen wir w&auml;hrend des Aufrufs von Access aus den Code der COM-DLL debuggen. Dazu sind ein paar kleine Einstellungen n&ouml;tig, die wir in den Projekteigenschaften im Bereich <b>Debuggen <\/b>vornehmen. Hier stellen wir f&uuml;r die Eigenschaft Externes Programm starten den Pfad zur <b>MSAccess.exe <\/b>ein (siehe Bild 1). Dieser Pfad lautet beispielsweise unter Office 365 wie folgt:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1168_001.png\" alt=\"Pfad zur MSAccess.exe festlegen, die beim Debuggen gestartet werden soll\" width=\"649,559\" height=\"367,6323\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Pfad zur MSAccess.exe festlegen, die beim Debuggen gestartet werden soll<\/span><\/b><\/p>\n<pre>C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\MSACCESS.EXE<\/pre>\n<p>Unter Befehlszeilenargument geben Sie den Pfad zu der zu verwendenden Datenbankdatei ein.<\/p>\n<p>Wenn Sie beim Starten nun noch wollen, dass das VBA-Modul mit den Anweisungen zum Testen der DLL aufgerufen wird, f&uuml;gen Sie der Datenbank ein einfaches Formular hinzu, f&uuml;r dessen Ereigniseigenschaft <b>Beim Laden <\/b>Sie die folgende Ereignisprozedur hinterlegen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     DoCmd.OpenModule \"mdlDLL\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Speichern Sie das Formular unter dem Namen <b>frmStart<\/b>. Hinterlegen Sie dieses Formular in den Access-Optionen f&uuml;r die Eigenschaft <b>Formular anzeigen <\/b>(siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1168_002.png\" alt=\"Einstellen des Startformulars unserer Beispielanwendung\" width=\"649,559\" height=\"252,8013\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Einstellen des Startformulars unserer Beispielanwendung<\/span><\/b><\/p>\n<p>Wenn Sie die .NET-DLL nun von Visual Studio aus mit dem Men&uuml;befehl <b>Debugging|Debugging starten<\/b>, wird direkt die angegebene Access-Datenbank ge&ouml;ffnet. Diese zeigt direkt das Formular <b>frmStart <\/b>an, welches wiederum den VBA-Editor mit dem Modul <b>mdlDLL <\/b>anzeigt.<\/p>\n<h2>Test mit PDFTK<\/h2>\n<p>Im Beitrag <b>PDF-Dokumente im Griff mit PDFtk <\/b>(<b>www.access-im-unternehmen.de\/1166<\/b>) zeigen wir, wie Sie mit dem Kommandozeilentool <b>PDFtk <\/b>auf PDF-Dokumente zugreifen, um diese zu kombinieren, zu sch&uuml;tzen und vieles mehr. Dies gelingt allerdings nur &uuml;ber die Eingabeaufforderung. Wir k&ouml;nnen die notwendigen Befehle zwar &uuml;ber die <b>Shell<\/b>-Anweisung absetzen, allerdings k&ouml;nnen wir die R&uuml;ckgabewerte beziehungsweise die Ausgabe von <b>PDFtk<\/b>.exe nicht einlesen oder auswerten.<\/p>\n<p>Das wollen wir nun mit den unter .NET viel flexibleren Bibliotheken erledigen, in diesem Fall mit einige Elementen der Bibliothek <b>System.Diagnostics<\/b>. Um die DLL zun&auml;chst mit einer einfachen Funktion auszustatten, die <b>PDFTK <\/b>hei&szlig;t und einfach nur den Befehl <b>PDFTK <\/b>absetzt und die resultierende Ausgabe abf&auml;ngt und als R&uuml;ckgabewert liefert, f&uuml;llen Sie die Klassendatei des Projekts wie in Listing 1.<\/p>\n<pre>Imports System.Runtime.InteropServices\r\n&lt;InterfaceType(ComInterfaceType.InterfaceIsDual)&gt;\r\n&lt;Guid(\"FE5FEE03-A893-4D02-8081-0F56CF485AAC\")&gt;\r\n<span style=\"color:blue;\">Public <\/span>Interface ICMD\r\n     Function PDFTK()<span style=\"color:blue;\"> As String<\/span>\r\nEnd Interface\r\n&lt;ClassInterface(ClassInterfaceType.None)&gt;\r\n&lt;Guid(\"E8C7BD72-7751-47B0-AE2A-F8E677A0A16C\")&gt;\r\n<span style=\"color:blue;\">Public Class<\/span> CMD\r\n     Implements ICMD\r\n     <span style=\"color:blue;\">Public <\/span>Function PDFTK()<span style=\"color:blue;\"> As String<\/span> Implements ICMD.PDFTK\r\n         <span style=\"color:blue;\">Dim <\/span>pProcess<span style=\"color:blue;\"> As <\/span>System.Diagnostics.Process =  <span style=\"color:blue;\">New<\/span> System.Diagnostics.Process()\r\n         <span style=\"color:blue;\">Dim <\/span>strCommand<span style=\"color:blue;\"> As String<\/span>\r\n         <span style=\"color:blue;\">Dim <\/span>strCommandParameters<span style=\"color:blue;\"> As String<\/span>\r\n         <span style=\"color:blue;\">Dim <\/span>strWorkingDirectory<span style=\"color:blue;\"> As String<\/span>\r\n         strCommand = \"pdftk.exe\"\r\n         strCommandParameters = \"\"\r\n         strWorkingDirectory = \"\"\r\n         pProcess.StartInfo.FileName = strCommand\r\n         pProcess.StartInfo.Arguments = strCommandParameters\r\n         pProcess.StartInfo.UseShellExecute = <span style=\"color:blue;\">False<\/span>\r\n         pProcess.StartInfo.RedirectStandardOutput = <span style=\"color:blue;\">True<\/span>\r\n         pProcess.StartInfo.WorkingDirectory = strWorkingDirectory\r\n         pProcess.Start()\r\n         <span style=\"color:blue;\">Dim <\/span>strOutput<span style=\"color:blue;\"> As String<\/span> = pProcess.StandardOutput.ReadToEnd()\r\n         pProcess.WaitForExit()\r\n         Return strOutput\r\n     End Function\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Die Klasse mit der Schnittstelle und der Funktion PDFTK<\/span><\/b><\/p>\n<p>Der erste Teil ist das Interface, das wir anlegen m&uuml;ssen, damit wir nur unsere eigenen Member in der DLL angezeigt bekommen (siehe auch unter <b>VB.NET-DLL f&uuml;r Access programmieren<\/b>). Die eigentliche Klasse namens <b>CMD <\/b>implementiert die einzige Funktion der Schnittstelle <b>ICMD <\/b>namens <b>PDFTK<\/b>. Diese Funktion soll einen Wert mit dem Datentyp <b>String <\/b>zur&uuml;ckliefern. Sie erstellt ein neues Objekt des Typs <b>Process <\/b>und weist dem Objekt <b>StartInfo <\/b>dieses Objekts verschiedene Daten zu &#8211; zum Beispiel den Namen der aufzurufenden Datei <b>PDFtk.exe <\/b>mit der Eigenschaft <b>FileName<\/b>. Andere Parameter wie <b>Arguments <\/b>oder <b>WorkingDirectory <\/b>verwenden wir in dieser Version noch nicht. Allerdings stellen wir die Eigenschaft <b>RedirectStandardOutput <\/b>auf <b>True <\/b>ein.<\/p>\n<p>Der Start des Aufrufs erfolgt dann mit der <b>Start<\/b>-Methode. Den Output des Prozesses ermitteln wir mit der Methode <b>ReadToEnd <\/b>des Objekts <b>Standardoutput <\/b>des Prozesses und schreiben diesen in die Variable <b>strOutput<\/b>. Nachdem wir das Ende mit der Methode <b>WaitForExit <\/b>abgewartet haben, k&ouml;nnen wir den Inhalt von <b>strOutput <\/b>als R&uuml;ckgabewert zur&uuml;ck an die aufrufende Instanz liefern.<\/p>\n<p>Wenn wir nun das Debuggen dieses Projekts starten, m&uuml;ssen Sie gegebenenfalls noch einen Verweis im VBA-Editor auf die Bibliothek <b>CMDResponse <\/b>hinzuf&uuml;gen (wie in <b>VB.NET-DLL f&uuml;r Access programmieren<\/b> beschrieben).<\/p>\n<p>Anschlie&szlig;end k&ouml;nnen Sie die Methode mit der folgenden Prozedur aufrufen:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>TestDLL()\r\n     <span style=\"color:blue;\">Dim <\/span>objCMD<span style=\"color:blue;\"> As <\/span>CMDResponse.CMD\r\n     <span style=\"color:blue;\">Set<\/span> objCMD = <span style=\"color:blue;\">New<\/span> CMDResponse.CMD\r\n     <span style=\"color:blue;\">Debug.Print<\/span> objCMD.PDFTK\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dies liefert das Ergebnis aus Bild 3 &#8211; die Vorgehensweise funktioniert also.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_06\/pic_1168_003.png\" alt=\"Testaufruf mit Ausgabe von PDFtk per VBA\" width=\"499,6607\" height=\"366,9383\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Testaufruf mit Ausgabe von PDFtk per VBA<\/span><\/b><\/p>\n<p>Nun wollen wir die Methode noch so anpassen, dass wir selbst die gew&uuml;nschten Befehle und Parameter von VBA aus &uuml;bergeben k&ouml;nnen. Dazu &auml;ndern wir zun&auml;chst die einzige Funktion der Schnittstelle wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Function <\/span>PDFTK(strCommand<span style=\"color:blue;\"> As String<\/span>,  strCommandParameters<span style=\"color:blue;\"> As String<\/span>, _\r\n     strWorkingDirectory<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span><\/pre>\n<p>Dann passen wir die Implementierung dieser Funktion entsprechend an &#8211; siehe Listing 2. Da wir einige Variablen als Parameter der Funktion umgestellt haben, hat sich auch die Funktion ein wenig verk&uuml;rzt.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>PDFTK(strCommand<span style=\"color:blue;\"> As String<\/span>, strCommandParameters<span style=\"color:blue;\"> As String<\/span>, _\r\n         strWorkingDirectory<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span> Implements ICMD.PDFTK\r\n     <span style=\"color:blue;\">Dim <\/span>pProcess<span style=\"color:blue;\"> As <\/span>System.Diagnostics.Process = <span style=\"color:blue;\">New<\/span> System.Diagnostics.Process()\r\n     pProcess.StartInfo.FileName = strCommand\r\n     pProcess.StartInfo.Arguments = strCommandParameters\r\n     pProcess.StartInfo.UseShellExecute = <span style=\"color:blue;\">False<\/span>\r\n     pProcess.StartInfo.RedirectStandardOutput = <span style=\"color:blue;\">True<\/span>\r\n     pProcess.StartInfo.WorkingDirectory = strWorkingDirectory\r\n     pProcess.Start()\r\n     <span style=\"color:blue;\">Dim <\/span>strOutput<span style=\"color:blue;\"> As String<\/span> = pProcess.StandardOutput.ReadToEnd()\r\n     pProcess.WaitForExit()\r\n     Return strOutput\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Die Funktion PDFTK mit Parametern<\/span><\/b><\/p>\n<h2>PDF mit Kennwort sch&uuml;tzen<\/h2>\n<p>Nun wollen wir beispielsweise ein PDF-Dokument mit einem Kennwort sch&uuml;tzen, was direkt in der Eingabeaufforderung mit der folgenden Anweisung funktionieren w&uuml;rde:<\/p>\n<pre>pdftk.exe A=\"SuchfunktionPerVBA.pdf\" output \"Kennwort.pdf\" owner_pw \"passwordsecurity\" user_pw \"password\"<\/pre>\n<p>Schauen wir also, was geschieht, wenn wir nun <b>pdftk.exe <\/b>f&uuml;r den Parameter <b>strCommand <\/b>&uuml;bergeben und den Rest, die Parameter des Aufrufs, mit dem Parameter <b>strCommandParameter<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>TestDLL()\r\n     <span style=\"color:blue;\">Dim <\/span>objCMD<span style=\"color:blue;\"> As <\/span>CMDResponse.CMD\r\n     <span style=\"color:blue;\">Set<\/span> objCMD = <span style=\"color:blue;\">New<\/span> CMDResponse.CMD\r\n     <span style=\"color:blue;\">Debug.Print<\/span> objCMD.PDFTK(\"PDFTK.exe\",  \"A=C:\\...\\SuchfunktionPerVBA.pdf output &quot; _          &amp; &quot; C:\\...\\Kennwort.pdf owner_pw passwordsecurity  user_pw password\")\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dieser Aufruf f&uuml;hrt zum Erfolg &#8211; das zeigt die neue Datei, die nun im angegebenen Verzeichnis erscheint. Allerdings gibt es keinen R&uuml;ckgabewert mit einer Erfolgsmeldung. Eine schnelle Pr&uuml;fung dieses Befehls in der Eingabeaufforderung zeigt allerdings, dass es tats&auml;chlich kein Feedback gibt. Die kleine Verz&ouml;gerung beim schrittweisen Ausf&uuml;hren der VBA-Prozedur zeigt jedoch, dass diese solange angehalten wird, bis das neue PDF erzeugt wurde.<\/p>\n<p>Aber k&ouml;nnen wir hier auch ein Feedback bekommen Das geht: Wir m&uuml;ssen einfach nur den Parameter <b>verbose<\/b> hinten an die Parameterliste anh&auml;ngen. Dann erhalten wir auch einen entsprechenden R&uuml;ckgabewert, wenn das PDF erstellt wurde.<\/p>\n<h2>Ausgabe bei Fehlern<\/h2>\n<p>Leider &#8211; wir haben das gepr&uuml;ft &#8211; liefert die Ausgabe keine Hinweise auf Fehler, wenn das Erstellen der PDF-Datei fehlschl&auml;gt. Allerdings k&ouml;nnen Sie die Prozedur wie folgt erweitern und damit zuverl&auml;ssig ermitteln, ob die Erstellung des PDF funktioniert hat:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>PDFErstellen()\r\n     <span style=\"color:blue;\">Dim <\/span>objCMD<span style=\"color:blue;\"> As <\/span>CMDResponse.CMD\r\n     <span style=\"color:blue;\">Dim <\/span>strPDFNeu<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strPDFAlt<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objCMD = <span style=\"color:blue;\">New<\/span> CMDResponse.CMD\r\n     strPDFNeu = CurrentProject.Path & \"\\Kennwort.pdf\"\r\n     strPDFAlt = CurrentProject.Path & \"\\AIU201805.pdf\"\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     Kill strPDFNeu\r\n     <span style=\"color:blue;\">If <\/span>Err.Number = 70<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Fehler: \" & Err.Description & \" (\" _\r\n             & Err.Number & \")\"\r\n         <span style=\"color:blue;\">Exit Sub<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Dir(strPDFNeu)) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Erfolgreich erstellt.\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese Prozedur versucht zuerst, eine eventuell bereits vorhandene Version der zu erstellenden Datei zu l&ouml;schen. Dann erstellt sie diese &uuml;ber die DLL neu. Die Prozedur l&auml;uft erst weiter, wenn dieser Befehl abgeschlossen ist. <\/p>\n<p>Dadurch wissen wir auch, ob der Befehl erfolgreich war, wenn wir nachher das Ergebnis pr&uuml;fen &#8211; n&auml;mlich, ob die Datei nun auch tats&auml;chlich an der gew&uuml;nschten Stelle angelegt wurde. Wenn dies der Fall ist, gibt die Prozedur eine entsprechende Meldung aus. Dies erfolgt &uuml;brigens auch, wenn die Datei bereits vorhanden ist und nicht gel&ouml;scht werden kann, weil diese beispielsweise gerade ge&ouml;ffnet und somit schreibgesch&uuml;tzt ist.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>CMDResponse.zip<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/67B6B473-D9D7-42AF-AFF0-78C0660A1AA0\/aiu_1168.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn Sie von Access aus Befehle ausf&uuml;hren wollen, die Sie normalerweise &uuml;ber die Kommandozeile beziehungsweise die Eingabeaufforderung eingeben w&uuml;rden, ist das kein Problem &#8211; das erledigen Sie ganz einfach &uuml;ber die Shell-Anweisung. Interessanter wird es, wenn Sie die Ausgabe der Anwendung einlesen und verarbeiten wollen, um beispielsweise auszuwerten, ob der Aufruf erfolgreich war oder welches Ergebnis dieser geliefert hat. Mit VBA beziehungsweise API-Funktionen gelingt dies nicht immer zuverl&auml;ssig. Also schauen wir uns in der .NET-Bibliothek um, ob es dort Alternativen gibt, und machen uns diese &uuml;ber eine DLL unter VBA verf&uuml;gbar.<\/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":[662018,66062018,44000025],"tags":[],"class_list":["post-55001168","post","type-post","status-publish","format-standard","hentry","category-662018","category-66062018","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Kommandozeile per DLL - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kommandozeile per DLL\" \/>\n<meta property=\"og:description\" content=\"Wenn Sie von Access aus Befehle ausf&uuml;hren wollen, die Sie normalerweise &uuml;ber die Kommandozeile beziehungsweise die Eingabeaufforderung eingeben w&uuml;rden, ist das kein Problem - das erledigen Sie ganz einfach &uuml;ber die Shell-Anweisung. Interessanter wird es, wenn Sie die Ausgabe der Anwendung einlesen und verarbeiten wollen, um beispielsweise auszuwerten, ob der Aufruf erfolgreich war oder welches Ergebnis dieser geliefert hat. Mit VBA beziehungsweise API-Funktionen gelingt dies nicht immer zuverl&auml;ssig. Also schauen wir uns in der .NET-Bibliothek um, ob es dort Alternativen gibt, und machen uns diese &uuml;ber eine DLL unter VBA verf&uuml;gbar.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T21:13:38+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/bf80d6409a5e4334afb012c12ece5921\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"8\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kommandozeile_per_DLL\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kommandozeile_per_DLL\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Kommandozeile per DLL\",\"datePublished\":\"2020-05-13T21:13:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kommandozeile_per_DLL\\\/\"},\"wordCount\":1200,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kommandozeile_per_DLL\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/bf80d6409a5e4334afb012c12ece5921\",\"articleSection\":[\"2018\",\"6\\\/2018\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Kommandozeile_per_DLL\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kommandozeile_per_DLL\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kommandozeile_per_DLL\\\/\",\"name\":\"Kommandozeile per DLL - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kommandozeile_per_DLL\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kommandozeile_per_DLL\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/bf80d6409a5e4334afb012c12ece5921\",\"datePublished\":\"2020-05-13T21:13:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kommandozeile_per_DLL\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Kommandozeile_per_DLL\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kommandozeile_per_DLL\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/bf80d6409a5e4334afb012c12ece5921\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/bf80d6409a5e4334afb012c12ece5921\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Kommandozeile_per_DLL\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kommandozeile per DLL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kommandozeile per DLL - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/","og_locale":"de_DE","og_type":"article","og_title":"Kommandozeile per DLL","og_description":"Wenn Sie von Access aus Befehle ausf&uuml;hren wollen, die Sie normalerweise &uuml;ber die Kommandozeile beziehungsweise die Eingabeaufforderung eingeben w&uuml;rden, ist das kein Problem - das erledigen Sie ganz einfach &uuml;ber die Shell-Anweisung. Interessanter wird es, wenn Sie die Ausgabe der Anwendung einlesen und verarbeiten wollen, um beispielsweise auszuwerten, ob der Aufruf erfolgreich war oder welches Ergebnis dieser geliefert hat. Mit VBA beziehungsweise API-Funktionen gelingt dies nicht immer zuverl&auml;ssig. Also schauen wir uns in der .NET-Bibliothek um, ob es dort Alternativen gibt, und machen uns diese &uuml;ber eine DLL unter VBA verf&uuml;gbar.","og_url":"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T21:13:38+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/bf80d6409a5e4334afb012c12ece5921","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"8\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Kommandozeile per DLL","datePublished":"2020-05-13T21:13:38+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/"},"wordCount":1200,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/bf80d6409a5e4334afb012c12ece5921","articleSection":["2018","6\/2018","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/","url":"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/","name":"Kommandozeile per DLL - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/bf80d6409a5e4334afb012c12ece5921","datePublished":"2020-05-13T21:13:38+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/bf80d6409a5e4334afb012c12ece5921","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/bf80d6409a5e4334afb012c12ece5921"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Kommandozeile_per_DLL\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Kommandozeile per DLL"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001168","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001168"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001168\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001168"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001168"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}