{"id":55001378,"date":"2022-10-01T00:00:00","date_gmt":"2022-10-03T14:37:03","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1378"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"EPCQRCode_per_COMDLL_erstellen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/EPCQRCode_per_COMDLL_erstellen\/","title":{"rendered":"EPC-QR-Code per COM-DLL erstellen"},"content":{"rendered":"<p><b>Sp&auml;testens seit sich das Onlinebanking immer mehr auf das Smartphone verschiebt, wird das Eingeben von Rechnungsdaten wie langen IBANs oder Verwendungszwecken zu einer undankbaren Aufgabe. Und auch wenn die Papierrechnungen weniger werden und sich die Daten von PDF-Rechnungen leicht per Copy und Paste &uuml;bertragen lassen, so ist doch der EPC-QR-Code eine tolle Erleichterung: Dieser QR-Code enth&auml;lt alle f&uuml;r eine &Uuml;berweisung ben&ouml;tigten Daten und viele Onlinebanking-Apps bieten mittlerweile die M&ouml;glichkeit, solche Codes mithilfe der Smartphone-Kamera einzulesen. Um dieses Feature in Access-Berichten bereitzustellen, ben&ouml;tigen wir erst einmal eines: Ein Tool, mit dem wir solche QR-Codes erstellen k&ouml;nnen. Dieser Beitrag zeigt, wie wir eine .NET-DLL programmieren, die uns diese Aufgabe abnimmt.<\/b><\/p>\n<p>F&uuml;r viele Anwendungsbereiche bietet .NET Bibliotheken und Tools, die dem VBA-Entwickler auf direktem Wege nicht zug&auml;nglich sind. Zum Gl&uuml;ck wird es immer einfacher, diese Helferlein in Form beispielsweise von COM-DLLs auf der Basis von .NET zu programmieren und diese mit einer Schnittstelle auszustatten, auf die wir auch von Access aus leicht zugreifen k&ouml;nnen.<\/p>\n<p>F&uuml;r die Aufgabe, die wir uns in diesem Beitrag vornehmen, ben&ouml;tigen wir die folgenden Dinge:<\/p>\n<ul>\n<li>eine Definition, wie die Informationen zusammengestellt werden, die f&uuml;r das Einlesen in eine &Uuml;berweisung n&ouml;tig sind,<\/li>\n<li>eine Bibliothek, die das Erstellen von QR-Codes erlaubt und<\/li>\n<li>ein VB.NET-Projekt, das die ersten beiden zusammenf&uuml;hrt und in Form einer COM-DLL f&uuml;r den Zugriff von VBA aus verf&uuml;gbar macht.<\/li>\n<\/ul>\n<p>Schlie&szlig;lich ben&ouml;tigen wir noch eine Datenbank, welche die damit zu erstellenden Bilddateien mit QR-Codes nutzt und in Rechnungsberichte einbettet, sodass diese vom Rechnungsempf&auml;nger per Smartphone-Kamera erfasst und f&uuml;r das schnelle Eintragen der Rechnungsdaten in das &Uuml;berweisungsformular genutzt werden kann. Diese beschreiben wir in einem weiteren Beitrag namens <b>Rechnungsbericht mit EPC-QR-Code <\/b>(<b>www.access-im-unternehmen.de\/****<\/b>).<\/p>\n<h2>Wie sieht der Inhalt des EPC-QR-Codes aus?<\/h2>\n<p>Als Erstes schauen wir uns an, welchen Aufbau der Text hat, der als Grundlage f&uuml;r das Erstellen des EPC-QR-Codes genutzt wird. EPC steht &uuml;brigens f&uuml;r European Payment Code.<\/p>\n<p>Ein Beispiel f&uuml;r den Inhalt finden wir auf Wikipedia, die praktischerweise direkt die Bezahldaten f&uuml;r eine Spende an Wikipedia selbst im Beispielcode untergebracht haben. Der Inhalt sieht wie folgt aus:<\/p>\n<pre>BCD\r\n001\r\n1\r\nSCT\r\nBFSWDE33BER\r\nWikimedia Foerdergesellschaft\r\nDE33100205000001194700\r\nEUR123.45\r\nSpende fuer Wikipedia<\/pre>\n<p>In diesem Beispiel sehen Sie einige Leerzeilen, und auch die letzte Zeile k&ouml;nnte noch mit Inhalt gef&uuml;llt sein. Daher hier die Zeilen mit der Beschreibung der Inhalte:<\/p>\n<ul>\n<li>Zeile 1 (Beispiel: <b>BCD<\/b>): Service Tag (fester Wert)<\/li>\n<li>Zeile 2 (Beispielwert: <b>002<\/b>): Version (<b>001 <\/b>oder <b>002<\/b>)<\/li>\n<li>Zeile 3 (Beispielwert: <b>2<\/b>): Zeichencodierung (1=UTF-8, 2=ISO 8859-1, 3=ISO 8859-2, 4=ISO 8859-4, 5=ISO 8859-5, 6=ISO 8859-7, 7=ISO 8859-10, 8=ISO 8859-15)<\/li>\n<li>Zeile 4 (Beispielwert: <b>SCT<\/b>): Identifikation, dreistelliger Code &#8211; derzeit nur <b>SCT<\/b> (<b>SEPA Credit Transfer<\/b>)<\/li>\n<li>Zeile 5 (Beispielwert: <b>BFSWDE33BER<\/b>): BIC der Empf&auml;ngerbank (in Version <b>001 <\/b>erforderlich; in Version <b>002 <\/b>innerhalb des EWR optional)<\/li>\n<li>Zeile 6 (Beispielwert: <b>Wikimedia Foerdergesellschaft<\/b>): Name des Zahlungsempf&auml;ngers (maximal 70 Zeichen Text)<\/li>\n<li>Zeile 7 (Beispielwert: <b>DE33100205000001194700<\/b>): Internationale Bankkontonummer (IBAN) des Zahlungsempf&auml;ngers<\/li>\n<li>Zeile 8 (Beispielwert: <b>EUR123.45<\/b>): Zahlungsbetrag (Format <b>EUR#.##<\/b>, zwischen 0.01 und 999999999.99, optional)<\/li>\n<li>Zeile 9 (Beispielwert: <b>CHAR<\/b>): Zweck (max. vierstelliger Code analog dem Textschl&uuml;ssel nach DTA-Verfahren, optional)<\/li>\n<li>Zeile 10 (Beispielwert <b>RF18 5390 0754 7034<\/b>): Referenz (strukturierter 35-Zeichen-Code gem. ISO 116 RF Creditor Reference, optional)<\/li>\n<li>Zeile 11 (Beispielwert: <b>Spende fuer Wikipedia<\/b>): Verwendungszweck (unstrukturierter maximal 140 Zeichen langer Text, optional)<\/li>\n<li>Zeile 12 (Beispielwert: .\/.): Hinweis an den Nutzer (maximal 70 Zeichen, optional)<\/li>\n<\/ul>\n<p>Wir wollen in diesem Beispielprojekt lediglich die wichtigsten Daten unterbringen. Wie Sie oben gesehen haben, legt man in der zweiten Zeile die Version des EPC-QR-Codes fest, der eigentlich nur einen Unterschied bewirkt: Die erste Version verlangt nach einem BIC, die zweite tut das nicht. Um das Beispiel einfach zu halten, nutzen wir hier die Version 2 und geben den BIC nicht an. Die ersten vier Zeilen enthalten Standardwerte, einige Zeilen bleiben leer, so m&uuml;ssen wir nur die folgenden Daten mit der zu erstellenden COM-DLL entgegennehmen:<\/p>\n<ul>\n<li>Zahlungsempf&auml;nger<\/li>\n<li>IBAN<\/li>\n<li>Zahlungsbetrag<\/li>\n<li>Zweck<\/li>\n<\/ul>\n<h2>.NET-Projekt f&uuml;r die COM-DLL erstellen<\/h2>\n<p>Damit k&ouml;nnen wir direkt mit der Erstellung der COM-DLL in Visual Studio beginnen. Visual Studio ist in der Community-Edition schon seit einer ganzen Weile kostenlos. Scheuen Sie sich also nicht, es auszuprobieren &#8211; es macht Spa&szlig;, mal mit einer alternativen Entwicklungsumgebung zu arbeiten!<\/p>\n<p>Nachdem Visual Studio gestartet ist, hier in der Version 2019, legen Sie ein neues Projekt an. Dazu verwenden wir die Vorlage <b>Klassenbibliothek (.NET-Framework)<\/b>, die Sie wie in Bild 1 ausw&auml;hlen und mit einem Klick auf die <b>Weiter<\/b>-Schaltfl&auml;che best&auml;tigen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_05\/pic_1378_001.png\" alt=\"Auswahl des geeigneten Projekttyps\" width=\"649,559\" height=\"454,6912\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Auswahl des geeigneten Projekttyps<\/span><\/b><\/p>\n<p>Mit dem folgenden Dialog ist das Erstellen des Projekts bereits abgeschlossen: Hier geben sie noch den Namen f&uuml;r das Projekt ein und legen den Zielordner fest. Sie m&uuml;ssen keinen neuen Ordner anlegen, Visual Studio legt einen Ordner mit dem zuvor festgelegten Namen des Projekts an (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_05\/pic_1378_002.png\" alt=\"Eingabe von Zielordner und Projektname\" width=\"649,559\" height=\"454,6912\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Eingabe von Zielordner und Projektname<\/span><\/b><\/p>\n<h2>Klassennamen &auml;ndern<\/h2>\n<p>Wenn Sie den Projektmappen-Explorer einsehen, finden Sie hier eine einzige Klasse namens <b>Class1.vb<\/b>. Den Namen dieser Klasse &auml;ndern wir auf <b>EPCQRCodeGenerator.vb<\/b> (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_05\/pic_1378_003.png\" alt=\"&Auml;ndern des Namens der einzigen Klasse\" width=\"499,5589\" height=\"194,0594\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: &Auml;ndern des Namens der einzigen Klasse<\/span><\/b><\/p>\n<p>Die anschlie&szlig;ende Meldung, ob auch alle Verweise darauf ge&auml;ndert werden sollen, akzeptieren wir mit <b>Ja<\/b>. Damit &auml;ndert sich auch gleich der Name der Klassenbezeichnung im Modul selbst auf <b>EPCQRCodeGenerator<\/b>.<\/p>\n<h2>NuGet-Paket mit QR-Code-Bibliothek importieren<\/h2>\n<p>Bevor wir uns an das Programmieren begeben, f&uuml;gen wir die f&uuml;r das eigentliche Erstellen des QR-Codes notwendige Bibliothek zum Projekt hinzu. Dazu rufen Sie mit dem Men&uuml;befehl <b>Projekt|NuGet-Pakete verwalten &#8230; <\/b>den NuGet-Manager auf. Hier klicken Sie auf den Bereich <b>Durchsuchen <\/b>und geben im Suchen-Feld den Text <b>QRCode <\/b>ein.<\/p>\n<p>Daraufhin erscheint das Paket <b>QrCode.Net<\/b>, das wir anklicken und mit einem Klick auf die nun erscheinende Schaltfl&auml;che <b>Installieren <\/b>zum Projekt hinzuf&uuml;gen (siehe Bild 4). Dies legt ein paar Elemente im Projekt an, um die wir uns aber nicht weiter k&uuml;mmern m&uuml;ssen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_05\/pic_1378_004.png\" alt=\"Hinzuf&uuml;gen des NuGet-Pakets QrCode.Net\" width=\"700\" height=\"248,6636\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Hinzuf&uuml;gen des NuGet-Pakets QrCode.Net<\/span><\/b><\/p>\n<h2>Namespaces importieren<\/h2>\n<p>Um in der Datei <b>EPCQRCodeGenerator.vb <\/b>auf die Elemente des hinzugef&uuml;gten NuGet-Pakets und auf einige andere Elemente zugreifen zu k&ouml;nnen, machen wir diese mit einigen <b>Imports<\/b>-Anweisungen verf&uuml;gbar.<\/p>\n<p>Diese landen direkt ganz oben in der Datei, also noch &uuml;ber der <b>Public Class<\/b>-Anweisung, und sehen wir folgt aus:<\/p>\n<pre>Imports System.Runtime.InteropServices\r\nImports Gma.QrCodeNet.Encoding\r\nImports Gma.QrCodeNet.Encoding.Windows.Render\r\nImports System.Drawing<\/pre>\n<p>F&uuml;r den Import des Namespaces <b>System.Drawing <\/b>m&uuml;ssen wir &uuml;berdies noch einen entsprechenden Verweis auf die gleichnamige Bibliothek hinzuf&uuml;gen. Dazu &ouml;ffnen Sie mit dem Men&uuml;befehl <b>Projekt|Verweis hinzuf&uuml;gen&#8230; <\/b>den Dialog <b>Verweis-Manager <\/b>und suchen dort unter Assemblys nach dem Suchbegriff <b>System.Drawing<\/b>. Den gefundenen Eintrag f&uuml;gen Sie durch Setzen eines Hakens zum Projekt hinzu (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_05\/pic_1378_005.png\" alt=\"Hinzuf&uuml;gen von Verweisen zum Projekt\" width=\"649,559\" height=\"324,7794\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Hinzuf&uuml;gen von Verweisen zum Projekt<\/span><\/b><\/p>\n<h2>Klasse zum Aufnehmen der &Uuml;berweisungseigenschaften<\/h2>\n<p>Normalerweise w&uuml;rden wir nun einfach eine Klasse erstellen, welche einige &ouml;ffentlich deklarierte Eigenschaften enth&auml;lt, &uuml;ber die Sie vom VBA-Editor aus die f&uuml;r die &Uuml;berweisung notwendigen Informationen an die DLL &uuml;bergeben k&ouml;nnen. Diese Klasse w&uuml;rde jedoch auch einige Standardmember von .NET-Klassen bereitstellen wie <b>GetType <\/b>oder <b>ToString<\/b>.<\/p>\n<p>Diese ben&ouml;tigen wir aber unter VBA nicht, also gehen wir einen kleinen Umweg. Dazu definieren wir eine &ouml;ffentliche Schnittstelle, die wir dann implementieren.<\/p>\n<p>Die Schnittstelle wird als solche mit dem Schl&uuml;sselwort <b>Public Interface <\/b>definiert, erh&auml;lt eine spezielle Auszeichnung, damit sie &uuml;ber die COM-Schnittstelle f&uuml;r den Zugriff von au&szlig;en bereitgestellt wird und sieht wie folgt aus:<\/p>\n<pre>&lt;InterfaceType(ComInterfaceType.InterfaceIsDual)&gt;\r\n<span style=\"color:blue;\">Public <\/span>Interface IEPCQRCode\r\n     Property Verwendungszweck<span style=\"color:blue;\"> As String<\/span>\r\n     Property IBAN<span style=\"color:blue;\"> As String<\/span>\r\n     Property Betrag<span style=\"color:blue;\"> As <\/span>&lt;Runtime.InteropServices. MarshalAs(Runtime.InteropServices. UnmanagedType.Currency)&gt; Decimal\r\n     Property Empfaenger<span style=\"color:blue;\"> As String<\/span>\r\n     Function Generate(strPfad<span style=\"color:blue;\"> As String<\/span>,  ByRef strErgebnis<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span>\r\nEnd Interface<\/pre>\n<p><!--30percent--><\/p>\n<p>Wir stellen also genau die gefragten Eigenschaften bereit plus eine Funktion namens <b>Generate<\/b>, mit der wir den QR-Code generieren und unter dem angegebenen Pfad speichern k&ouml;nnen.<\/p>\n<h2>Implementierung der Schnittstelle<\/h2>\n<p>Die Schnittstelle implementieren wir unter VB.NET genauso, wie Sie es auch von VBA kennen. Sie erstellen eine Klasse und zeigen hier mit dem Schl&uuml;sselwort <b>Implements <\/b>und Angabe der Schnittstellenbezeichnung an, dass diese Klasse die Schnittstelle implementiert. Sollte dieses Thema noch neu f&uuml;r Sie sein: Die Implementierung einer Schnittstelle muss alle in der Schnittstellendefinition vorgegebenen Member umsetzen, also beispielsweise wie hier die <b>Property<\/b>-Eigenschaften und die Funktion <b>Generate<\/b>.<\/p>\n<p>Den ersten Teil dieser Schnittstelle finden Sie in Listing 1. Wenn Sie schon einmal <b>Property<\/b>-Eigenschaften in Klassenmodulen mit VBA abgebildet haben, vermissen Sie m&ouml;glicherweise die einzelnen <b>Property Get&#8230;<\/b>&#8211; und <b>Property Set\/Let&#8230;<\/b>-Prozeduren. <\/p>\n<pre>&lt;ClassInterface(ClassInterfaceType.None)&gt;\r\n<span style=\"color:blue;\">Public Class<\/span> EPCQRCodeGenerator\r\n         Implements IEPCQRCode\r\n     <span style=\"color:blue;\">Public <\/span>Property Verwendungszweck<span style=\"color:blue;\"> As String<\/span> Implements IEPCQRCode.Verwendungszweck\r\n     <span style=\"color:blue;\">Public <\/span>Property BIC<span style=\"color:blue;\"> As String<\/span> Implements IEPCQRCode.BIC\r\n     <span style=\"color:blue;\">Public <\/span>Property IBAN<span style=\"color:blue;\"> As String<\/span> Implements IEPCQRCode.IBAN\r\n     <span style=\"color:blue;\">Public <\/span>Property Betrag<span style=\"color:blue;\"> As Decimal<\/span> Implements IEPCQRCode.Betrag\r\n     <span style=\"color:blue;\">Public <\/span>Property Empfaenger<span style=\"color:blue;\"> As String<\/span> Implements IEPCQRCode.Empfaenger\r\n     ...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Erster Teil der Schnittstellen-Implementation<\/span><\/b><\/p>\n<p>Unter VB.NET k&ouml;nnte man eine solche Eigenschaft auch wie folgt definieren:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>_Verwendungszweck<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">Public Property <\/span>Verwendungszweck<span style=\"color:blue;\"> As String<\/span> _\r\n         Implements IEPCQRCode.Verwendungszweck\r\n     Get\r\n         Return _Verwendungszweck\r\n     End Get\r\n     Set(value<span style=\"color:blue;\"> As String<\/span>)\r\n         _Verwendungszweck = value\r\n     End <span style=\"color:blue;\">Set<\/span>\r\n<span style=\"color:blue;\">End Property<\/span><\/pre>\n<p>Sie w&uuml;rden also auch hier eine privat deklarierte Member-Variable wie <b>_Verwendungszweck <\/b>deklarieren und dazu eine einzige <b>Property<\/b>-Prozedur, die dann die <b>Get<\/b>&#8211; und die <b>Set<\/b>-Prozedur untergeordnet darstellt und <b>_Verwendungzweck <\/b>zur&uuml;ckgibt oder setzt.<\/p>\n<p>Wenn diese <b>Property <\/b>aber keinen weiteren Code enth&auml;lt wie beispielsweise eine Validierung, dann k&ouml;nnen Sie auch wie hier die folgende verk&uuml;rzte Schreibweise nutzen:<\/p>\n<pre><span style=\"color:blue;\">Public Property <\/span>Verwendungszweck<span style=\"color:blue;\"> As String<\/span> _\r\n     Implements IEPCQRCode.Verwendungszweck<\/pre>\n<p>Obwohl diese nicht explizit deklariert ist, steht aber dennoch eine Variable namens <b>_Verwendungszweck <\/b>zur Verf&uuml;gung, um in anderen Methoden der Klasse auf den daf&uuml;r &uuml;bergebenen Wert zuzugreifen.<\/p>\n<h2>Die Funktion Generate<\/h2>\n<p>Damit kommen wir zum Kernst&uuml;ck der Klasse, der Funktion <b>Generate<\/b> (siehe Listing 2). Diese hat zwei Parameter:<\/p>\n<pre>     <span style=\"color:blue;\">Public <\/span>Function Generate(strPfad<span style=\"color:blue;\"> As String<\/span>, ByRef strErgebnis<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Boolean<\/span> Implements IEPCQRCode.Generate\r\n         <span style=\"color:blue;\">Dim <\/span>objQREncoder<span style=\"color:blue;\"> As <\/span>QrEncoder\r\n         <span style=\"color:blue;\">Dim <\/span>objQRCode<span style=\"color:blue;\"> As <\/span>QrCode\r\n         <span style=\"color:blue;\">Dim <\/span>objFixedModuleSize<span style=\"color:blue;\"> As <\/span>FixedModuleSize\r\n         <span style=\"color:blue;\">Dim <\/span>objGraphics<span style=\"color:blue;\"> As <\/span>Graphics\r\n         <span style=\"color:blue;\">Dim <\/span>strText<span style=\"color:blue;\"> As String<\/span>\r\n         <span style=\"color:blue;\">Dim <\/span>objGraphicsRenderer<span style=\"color:blue;\"> As <\/span>GraphicsRenderer\r\n         <span style=\"color:blue;\">Dim <\/span>objBMP<span style=\"color:blue;\"> As <\/span>Bitmap\r\n         <span style=\"color:blue;\">If <\/span>_BIC.Length &gt; 11<span style=\"color:blue;\"> Then<\/span>\r\n             strErgebnis = \"BIC fehlt oder ist zu lang.\"\r\n             Return <span style=\"color:blue;\">False<\/span>\r\n         <span style=\"color:blue;\">Else<\/span>If _IBAN Is Nothing OrElse _IBAN.Length &gt; 34 Then\r\n             strErgebnis = \"IBAN fehlt oder ist zu lang.\"\r\n             Return <span style=\"color:blue;\">False<\/span>\r\n         <span style=\"color:blue;\">Else<\/span>If _Betrag = 0 Then\r\n             strErgebnis = \"Betrag fehlt.\"\r\n             Return <span style=\"color:blue;\">False<\/span>\r\n         <span style=\"color:blue;\">Else<\/span>If _Verwendungszweck.Length &gt; 140 Then\r\n             strErgebnis = \"Verwendungszweck ist zu lang.\"\r\n             Return <span style=\"color:blue;\">False<\/span>\r\n         <span style=\"color:blue;\">Else<\/span>If _Empfaenger Is Nothing OrElse _Empfaenger.Length &gt; 70 Then\r\n             strErgebnis = \"Empf&auml;nger fehlt\"\r\n             Return <span style=\"color:blue;\">False<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         strText = \"BCD\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strText += \"001\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strText += \"1\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strText += \"SCT\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strText += <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strText += _Empfaenger & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strText += _IBAN & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strText += \"EUR\" & String.Format(\"{0:0.00}\", CDec(_Betrag)).<span style=\"color:blue;\">Replace<\/span>(\",\", \".\") & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strText += \"\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strText += \"\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         strText += _Verwendungszweck & <span style=\"color:blue;\">vbCrLf<\/span>\r\n         objFixedModuleSize = <span style=\"color:blue;\">New<\/span> FixedModuleSize(2, QuietZoneModules.Two)\r\n         objGraphicsRenderer = <span style=\"color:blue;\">New<\/span> GraphicsRenderer(objFixedModuleSize, Brushes.Black, Brushes.White)\r\n         objQREncoder = <span style=\"color:blue;\">New<\/span> QrEncoder(ErrorCorrectionLevel.M)\r\n         objQRCode = objQREncoder.Encode(strText)\r\n         objBMP = <span style=\"color:blue;\">New<\/span> Bitmap(objQRCode.Matrix.Width * 2 + 8, objQRCode.Matrix.Height * 2 + 8)\r\n         objGraphics = Graphics.FromImage(objBMP)\r\n         objGraphicsRenderer.Draw(objGraphics, objQRCode.Matrix)\r\n         objBMP.Save(strPfad)\r\n         Return <span style=\"color:blue;\">True<\/span>\r\n     End Function\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Zweiter Teil der Schnittstellen-Implementation<\/span><\/b><\/p>\n<ul>\n<li><b>strPfad<\/b>: Erwartet den Pfad der zu erstellenden Bilddatei mit dem QR-Code.<\/li>\n<li><b>strErgebnis<\/b>: R&uuml;ckgabeparameter, der gegebenenfalls eine Fehlermeldung zur&uuml;ckgibt.<\/li>\n<\/ul>\n<p>Die Funktion deklariert zun&auml;chst einige Elemente, die f&uuml;r das Erstellen des QR-Codes verwendet werden. Andere dienen der Erstellung der Grafik auf Basis des QR-Codes.<\/p>\n<p>Im ersten Teil erfolgen einige Pr&uuml;fungen, ob die &uuml;bergebenen Daten vorhanden und nicht zu lang sind beziehungsweise ob der Betrag nicht <b>0 <\/b>ist. Hier finden Sie als VBA-Entwickler wieder ein unbekanntes Element, n&auml;mlich die <b>OrElse<\/b>-Verkn&uuml;pfung. Diese arbeitet grunds&auml;tzlich wie die <b>Or<\/b>-Verkn&uuml;pfung, aber mit einem Unterschied: Wenn der erste der beiden verkn&uuml;pften Ausdr&uuml;cke bereits wahr ist, wird der folgende gar nicht mehr ausgewertet, weil der gesamte Ausdruck somit ohnehin wahr ist.<\/p>\n<p>Beim <b>BIC <\/b>pr&uuml;fen wir, ob dieser l&auml;nger als 11 Zeichen ist. Wenn er leer ist, ist das kein Problem, denn wir haben, wie weiter oben beschrieben, die Version <b>002 <\/b>des EPC-QR-Codes gew&auml;hlt, wo BIC nur ein optionaler Parameter ist.<\/p>\n<p>Die IBAN muss vorhanden sein und darf nicht l&auml;nger als 34 Zeichen sein. Der Betrag darf nicht <b>0 <\/b>sein. Der Verwendungszweck darf leer sein, aber nicht l&auml;nger als 140 Zeichen. Schlie&szlig;lich darf der Empf&auml;nger auch nicht leer sein und darf maximal 70 Zeichen haben. Immer wenn eine der Bedingungen nicht erf&uuml;llt ist, wird der R&uuml;ckgabeparameter <b>strErgebnis <\/b>mit einem entsprechenden Text gef&uuml;llt und die Funktion mit <b>Return False <\/b>verlassen. Auch das ist anders als unter VBA, wo man den R&uuml;ckgabewert explizit festlegen und die Funktion mit <b>Exit Function <\/b>verlassen m&uuml;sste.<\/p>\n<p>In den folgenden Zeilen fasst die Funktion in der Variablen <b>strText <\/b>den Text f&uuml;r den EPC-QR-Code zusammen. Hier nutzen wir nicht wie unter VBA Anweisungen wie <b>strText = strText &#038; &#8222;&#8230;&#8220;<\/b>, um einer Variablen einen weiteren Text anzuh&auml;ngen, sondern einfach den Operator <b>+=<\/b>. Hinter jedem Element f&uuml;gen wir mit <b>vbCrLf <\/b>einen Zeilenumbruch an.<\/p>\n<p>Dann folgt der eigentlich interessante Teil. Wir legen mit einem neuen Objekt auf Basis der Klasse <b>FixedModuleSize <\/b>die Gr&ouml;&szlig;e der &#8222;Module&#8220; des QR-Codes fest. Ein Modul ist eines der schwarzen oder wei&szlig;en Elemente in der QR-Code-Matrix. Mit dem Wert 2 als ersten Parameter geben wir an, dass jedes &#8222;Modul&#8220; mit 2&#215;2 Pixeln dargestellt werden soll. Die folgende Anweisung erzeugt ein neues Objekt des Typs <b>GraphicsRenderer <\/b>und &uuml;bergibt das soeben erstellte Objekt sowie die Farben f&uuml;r die verschiedenen &#8222;Module&#8220;. Einen QR-Code k&ouml;nnen Sie mit verschiedenen Farben gestalten &#8211; wichtig ist nur, dass es etwas Kontrast zwischen den Farben gibt. Das neue Objekt auf Basis der Klasse <b>QrEncoder <\/b>nimmt den Fehlerkorrekturlevel entgegen. F&uuml;r EPC-QR-Codes muss dieser <b>M <\/b>lauten. Mit der Methode <b>Encode <\/b>kodiert das Objekt <b>objQREncoder <\/b>dann den mit <b>strText <\/b>&uuml;bergebenen Text.<\/p>\n<p>Danach kommen noch die Grafik-Objekte zum Zuge. Zun&auml;chst erstellt die Funktion ein neues <b>Bitmap<\/b>-Objekt mit der entsprechenden Gr&ouml;&szlig;e, wobei die H&ouml;he und die Breite den Eigenschaften <b>Matrix.Width <\/b>und <b>Matrix.Height <\/b>des Objekts <b>objQRCode <\/b>entnommen werden.<\/p>\n<p>Auf dessen Basis erstellt die Funktion ein <b>Graphics<\/b>-Objekt und die <b>Draw<\/b>-Methode des <b>GraphicsRenderer<\/b>-Objekts zeichnet die Matrix des QR-Codes hinein. Schlie&szlig;lich speichert die <b>Save<\/b>-Methode das neu erstellte und mit dem QR-Code gef&uuml;llte <b>Bitmap<\/b>-Objekt. Die Funktion liefert schlie&szlig;lich den Wert <b>True <\/b>zur&uuml;ck.<\/p>\n<h2>Letzte Einstellungen f&uuml;r die COM-DLL<\/h2>\n<p>Nun m&uuml;ssen wir noch zwei Eigenschaften des Projekts anpassen, damit die COM-DLL funktioniert. Dazu &ouml;ffnen Sie mit einem Rechtsklick auf den Projekt-Eintrag im Projektmappen-Explorer das Kontextmen&uuml; und w&auml;hlen dort den Befehl <b>Eigenschaften <\/b>aus. Im nun erscheinenden Eigenschaften-Fenster wird normalerweise direkt der Bereich <b>Anwendung <\/b>angezeigt. Hier finden Sie eine Schaltfl&auml;che namens <b>Assemblyinformationen&#8230;<\/b>, mit der Sie den Dialog <b>Assemblyinformationen <\/b>&ouml;ffnen. Hier aktivieren Sie die Option <b>Assembly COM-sichtbar machen <\/b>(siehe Bild 6). Danach schlie&szlig;en Sie dieses Fenster wieder.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_05\/pic_1378_006.png\" alt=\"Aktivieren der Option Assembly COM-sichtbar machen\" width=\"649,559\" height=\"760,8306\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Aktivieren der Option Assembly COM-sichtbar machen<\/span><\/b><\/p>\n<p>Wir bleiben noch bei den Eigenschaften und wechseln dort zum Bereich <b>Kompilieren<\/b>. Hier finden wir im unteren Bereich die Eigenschaft <b>F&uuml;r COM-Interop registrieren<\/b>, die wir ebenfalls aktivieren (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_05\/pic_1378_007.png\" alt=\"Aktivieren der Option F&uuml;r COM-Interop registrieren\" width=\"524,559\" height=\"705,208\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Aktivieren der Option F&uuml;r COM-Interop registrieren<\/span><\/b><\/p>\n<h2>COM-DLL erstellen<\/h2>\n<p>Danach sind wir fast bereit f&uuml;r das Erstellen der COM-DLL.  Sie m&uuml;ssen nur noch rekapitulieren, ob Sie Visual Studio im Administrator-Modus gestartet haben oder nicht. Falls nicht, klicken Sie mit der rechten Maustaste auf das Programm <b>Visual Studio 2019 <\/b>(oder die bei Ihnen installierte Version) und w&auml;hlen Sie aus dem Kontextmen&uuml; den Eintrag <b>Als Administrator ausf&uuml;hren<\/b>. Nach dem erneuten Laden des Projekts bet&auml;tigen Sie den Men&uuml;befehl <b>Erstellen|Projektmappe erstellen<\/b>. Dies sorgt f&uuml;r verschiedene Aktionen, unter anderem die Folgenden:<\/p>\n<ul>\n<li>Im Ordner <b>bin\\debug <\/b>im Projektordner werden einige Dateien erstellt wie <b>aiuEPCQRCode.dll <\/b>oder <b>aiuEPCQRCode.tlb<\/b>.<\/li>\n<li>Au&szlig;erdem hat dies einige Registryeintr&auml;ge vorgenommen, die nun daf&uuml;r sorgen, dass die COM-DLL beim n&auml;chsten Start von Access im VBA-Editor im <b>Verweise<\/b>-Dialog referenziert werden kann.<\/li>\n<\/ul>\n<h2>Mit der COM-DLL arbeiten<\/h2>\n<p>Und genau das probieren wir nun aus. Wenn das Erstellen erfolgreich war und auch der Ordner <b>bin\\debug <\/b>die genannten Dateien mit aktuellem Datum enth&auml;lt, stehen die Chancen gut, dass Sie die COM-DLL nun unter Access verwenden k&ouml;nnen.<\/p>\n<p>Dazu starten Sie Access und &ouml;ffnen eine beliebige Datenbank. Dann wechseln Sie mit <b>Alt + F11 <\/b>in den VBA-Editor.<\/p>\n<p>Hier w&auml;hlen Sie den Men&uuml;eintrag <b>Extras|Verweise <\/b>aus und &ouml;ffnen so den <b>Verweise<\/b>-Dialog. Hier navigieren Sie zum Eintrag <b>aiuEPCQRCode<\/b> und aktivieren diesen (siehe Bild 8). Anschlie&szlig;end schlie&szlig;en Sie den Dialog wieder.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_05\/pic_1378_008.png\" alt=\"Hinzuf&uuml;gen eines Verweises auf die neue COM-DLL\" width=\"499,5589\" height=\"393,8207\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Hinzuf&uuml;gen eines Verweises auf die neue COM-DLL<\/span><\/b><\/p>\n<p>&Ouml;ffnen Sie nun den Objektkatalog und w&auml;hlen Sie im oberen Auswahlfeld den Eintrag <b>aiuEPCQRCode <\/b>aus. Unten finden Sie dann die Klasse <b>EPCQRCodeGenerator<\/b> vor (siehe Bild 9).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_05\/pic_1378_009.png\" alt=\"Die COM-DLL im Objektkatalog\" width=\"424,5589\" height=\"317,1898\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Die COM-DLL im Objektkatalog<\/span><\/b><\/p>\n<h2>EPC-QR-Code generieren<\/h2>\n<p>Damit bleibt noch, die Generierung eines EPC-QR-Codes zu testen. Dazu legen wir in einem neuen Modul eine Prozedur wie in Listing 3 an. Diese erstellt ein neues Objekt auf Basis der Klasse <b>EPCQRCodeGenerator<\/b> und referenziert dieses mit der zuvor deklarierten Variablen <b>objEPCQRCodeGenerator<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>EPCQRCodeErstellen()\r\n     <span style=\"color:blue;\">Dim <\/span>objEPCQRCodeGenerator<span style=\"color:blue;\"> As <\/span>aiuEPCQRCode.EPCQRCodeGenerator\r\n     <span style=\"color:blue;\">Dim <\/span>strPfad<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strErgebnis<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objEPCQRCodeGenerator = <span style=\"color:blue;\">New<\/span> aiuEPCQRCode.EPCQRCodeGenerator\r\n     <span style=\"color:blue;\">With<\/span> objEPCQRCodeGenerator\r\n         .IBAN = \"DE33100205000001194700\"\r\n         .BIC = \"BFSWDE33BER\"\r\n         .Empfaenger = \"Wikimedia Foerdergesellschaft\"\r\n         .Betrag = 10\r\n         .Verwendungszweck = \"Spende fuer Wikipedia\"\r\n         strPfad = CurrentProject.Path & \"\\QRCode.png\"\r\n         <span style=\"color:blue;\">If <\/span>.Generate(strPfad, strErgebnis) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">Debug.Print<\/span> \"Erfolgreich erstellt.\"\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             <span style=\"color:blue;\">Debug.Print<\/span> \"Nicht erfolgreich.\" & <span style=\"color:blue;\">vbCrLf<\/span> & strErgebnis\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Erstellen eines EPC-QR-Codes per VBA und COM-DLL<\/span><\/b><\/p>\n<p>F&uuml;r dieses stellt sie die Werte der Eigenschaften <b>IBAN<\/b>, <b>BIC<\/b>, <b>Empfaenger<\/b>, <b>Betrag <\/b>und <b>Verwendungszweck <\/b>ein. Anschlie&szlig;end definiert sie den Speicherpfad f&uuml;r die zu erstellende Bilddatei mit dem QR-Code in der Variablen <b>strPfad<\/b>.<\/p>\n<p>Beim Aufruf der Funktion &uuml;bergeben wir diese Variable sowie eine weitere Variable namens <b>strErgebnis <\/b>als Parameter. Ist der Aufruf erfolgreich, k&ouml;nnen wir uns anschlie&szlig;end wie in Bild 10 den neuen QR-Code in einem Bild-Editor anschauen. Anderenfalls liefert die Funktion mit <b>strErgebnis <\/b>eine Fehlermeldung zur&uuml;ck.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_05\/pic_1378_010.png\" alt=\"Ein neu erstellter EPC-QR-Code\" width=\"324,5589\" height=\"352,5235\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Ein neu erstellter EPC-QR-Code<\/span><\/b><\/p>\n<p>Den neu erstellten QR-Code k&ouml;nnen Sie mit einer einfachen QR-Code-App auslesen und seinen Inhalt anzeigen. Oder Sie verwenden gleich die Banking-App Ihrer Wahl und pr&uuml;fen, ob das Einlesen des QR-Codes in eine neue, leere &Uuml;berweisung die gew&uuml;nschten Werte liefert.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Im Beitrag <b>Rechnungsbericht mit EPC-QR-Code <\/b>(<b>www.access-im-unternehmen.de\/****<\/b>) zeigen wir, wie Sie den so ermitteln QR-Code in einen Access-Rechnungsbericht einbetten und diesen so dem Kunden zur Verf&uuml;gung stellen k&ouml;nnen.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>aiuEPCQRCode.zip<\/p>\n<p>aiuEPCQRCode_Test.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/BA85B8B3-7188-4270-BC13-20B04622DD72\/aiu_1378.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sp&auml;testens seit sich das Onlinebanking immer mehr auf das Smartphone verschiebt, wird das Eingeben von Rechnungsdaten wie langen IBANs oder Verwendungszwecken zu einer undankbaren Aufgabe. Und auch wenn die Papierrechnungen weniger werden und sich die Daten von PDF-Rechnungen leicht per Copy und Paste &uuml;bertragen lassen, so ist doch der EPC-QR-Code eine tolle Erleichterung: Dieser QR-Code enth&auml;lt alle f&uuml;r eine &Uuml;berweisung ben&ouml;tigten Daten und viele Onlinebanking-Apps bieten mittlerweile die M&ouml;glichkeit, solche Codes mithilfe der Smartphone-Kamera einzulesen. Um dieses Feature in Access-Berichten bereitzustellen, ben&ouml;tigen wir erst einmal eines: Ein Tool, mit dem wir solche QR-Codes erstellen k&ouml;nnen. Dieser Beitrag zeigt, wie wir eine .NET-DLL programmieren, die uns diese Aufgabe abnimmt.<\/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,66052022,44000027],"tags":[],"class_list":["post-55001378","post","type-post","status-publish","format-standard","hentry","category-662022","category-66052022","category-Loesungen"],"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>EPC-QR-Code per COM-DLL erstellen - 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\/EPCQRCode_per_COMDLL_erstellen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"EPC-QR-Code per COM-DLL erstellen\" \/>\n<meta property=\"og:description\" content=\"Sp&auml;testens seit sich das Onlinebanking immer mehr auf das Smartphone verschiebt, wird das Eingeben von Rechnungsdaten wie langen IBANs oder Verwendungszwecken zu einer undankbaren Aufgabe. Und auch wenn die Papierrechnungen weniger werden und sich die Daten von PDF-Rechnungen leicht per Copy und Paste &uuml;bertragen lassen, so ist doch der EPC-QR-Code eine tolle Erleichterung: Dieser QR-Code enth&auml;lt alle f&uuml;r eine &Uuml;berweisung ben&ouml;tigten Daten und viele Onlinebanking-Apps bieten mittlerweile die M&ouml;glichkeit, solche Codes mithilfe der Smartphone-Kamera einzulesen. Um dieses Feature in Access-Berichten bereitzustellen, ben&ouml;tigen wir erst einmal eines: Ein Tool, mit dem wir solche QR-Codes erstellen k&ouml;nnen. Dieser Beitrag zeigt, wie wir eine .NET-DLL programmieren, die uns diese Aufgabe abnimmt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/EPCQRCode_per_COMDLL_erstellen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-03T14:37:03+00:00\" \/>\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=\"16\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/EPCQRCode_per_COMDLL_erstellen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/EPCQRCode_per_COMDLL_erstellen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"EPC-QR-Code per COM-DLL erstellen\",\"datePublished\":\"2022-10-03T14:37:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/EPCQRCode_per_COMDLL_erstellen\\\/\"},\"wordCount\":2783,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"articleSection\":[\"2022\",\"5\\\/2022\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/EPCQRCode_per_COMDLL_erstellen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/EPCQRCode_per_COMDLL_erstellen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/EPCQRCode_per_COMDLL_erstellen\\\/\",\"name\":\"EPC-QR-Code per COM-DLL erstellen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"datePublished\":\"2022-10-03T14:37:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/EPCQRCode_per_COMDLL_erstellen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/EPCQRCode_per_COMDLL_erstellen\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/EPCQRCode_per_COMDLL_erstellen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"EPC-QR-Code per COM-DLL erstellen\"}]},{\"@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":"EPC-QR-Code per COM-DLL erstellen - 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\/EPCQRCode_per_COMDLL_erstellen\/","og_locale":"de_DE","og_type":"article","og_title":"EPC-QR-Code per COM-DLL erstellen","og_description":"Sp&auml;testens seit sich das Onlinebanking immer mehr auf das Smartphone verschiebt, wird das Eingeben von Rechnungsdaten wie langen IBANs oder Verwendungszwecken zu einer undankbaren Aufgabe. Und auch wenn die Papierrechnungen weniger werden und sich die Daten von PDF-Rechnungen leicht per Copy und Paste &uuml;bertragen lassen, so ist doch der EPC-QR-Code eine tolle Erleichterung: Dieser QR-Code enth&auml;lt alle f&uuml;r eine &Uuml;berweisung ben&ouml;tigten Daten und viele Onlinebanking-Apps bieten mittlerweile die M&ouml;glichkeit, solche Codes mithilfe der Smartphone-Kamera einzulesen. Um dieses Feature in Access-Berichten bereitzustellen, ben&ouml;tigen wir erst einmal eines: Ein Tool, mit dem wir solche QR-Codes erstellen k&ouml;nnen. Dieser Beitrag zeigt, wie wir eine .NET-DLL programmieren, die uns diese Aufgabe abnimmt.","og_url":"https:\/\/access-im-unternehmen.de\/EPCQRCode_per_COMDLL_erstellen\/","og_site_name":"Access im Unternehmen","article_published_time":"2022-10-03T14:37:03+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"16\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/EPCQRCode_per_COMDLL_erstellen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/EPCQRCode_per_COMDLL_erstellen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"EPC-QR-Code per COM-DLL erstellen","datePublished":"2022-10-03T14:37:03+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/EPCQRCode_per_COMDLL_erstellen\/"},"wordCount":2783,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"articleSection":["2022","5\/2022","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/EPCQRCode_per_COMDLL_erstellen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/EPCQRCode_per_COMDLL_erstellen\/","url":"https:\/\/access-im-unternehmen.de\/EPCQRCode_per_COMDLL_erstellen\/","name":"EPC-QR-Code per COM-DLL erstellen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"datePublished":"2022-10-03T14:37:03+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/EPCQRCode_per_COMDLL_erstellen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/EPCQRCode_per_COMDLL_erstellen\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/EPCQRCode_per_COMDLL_erstellen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"EPC-QR-Code per COM-DLL erstellen"}]},{"@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\/55001378","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=55001378"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001378\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001378"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}