{"id":55000061,"date":"2002-04-01T00:00:00","date_gmt":"2020-05-06T15:17:11","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=61"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Tipps_und_Tricks_zu_VBA","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/","title":{"rendered":"Tipps und Tricks zu VBA"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/7f98128214584eb081ffc1248f23a5c9\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Autor: Christoph Spielmann, D&uuml;sseldorf<\/p>\n<p><\/b><\/p>\n<p><b>Auf den folgenden Seiten versorgen wir Sie mit einigen Tipps und Tricks rund um VBA, die Sie sofort in Betrieb nehmen k&ouml;nnen. Hier finden Sie beispielsweise eine M&ouml;glichkeit, Zeichenketten innerhalb von Zeichenketten zu deklarieren, und lernen, die Dateiendung einer Datei zu ermitteln. Wenn Sie schon einmal mit dem Vergleich von Datumswerten zu k&auml;mpfen hatten, finden Sie hier ebenfalls eine L&ouml;sung. Diese und weitere nachfolgend beschriebene Tipps und Tricks f&uuml;r allt&auml;glich auftretende Probleme legen Sie am besten griffbereit in Reichweite des PCs &#8211; Sie werden sie gut gebrauchen k&ouml;nnen.<\/b><\/p>\n<p>Die Verwendung des doppelten Anf&uuml;hrungszeichens &#8220; (Ascii-Zeichencode 34) im Code bereitet ein paar kleine Schwierigkeiten. String-Literale (Klartext-Strings) m&uuml;ssen selbst bereits in Anf&uuml;hrungszeichen eingeschlossen werden.<\/p>\n<pre>Public Function AddQuotes(Text As String, Optional _  ByVal AddQuotesMode As AddQuotesModeConstants) _  As String\r\n  Dim nLeftQuotes, nRightQuotes, nQuotes As Long\r\n  Select Case AddQuotesMode\r\n    Case aqForce: AddQuotes = vbQuote & Text & vbQuote\r\n    Case aqToPairs\r\n      nLeftQuotes = zGetLeftQuotes(Text)\r\n      nRightQuotes = zGetRightQuotes(Text)\r\n      If nLeftQuotes Or nRightQuotes Then\r\n        nQuotes = nLeftQuotes - nRightQuotes\r\n        Select Case Sgn(nQuotes)\r\n          Case -1: AddQuotes = _            String(Abs(nQuotes), 34) & Text\r\n          Case 0: AddQuotes = Text\r\n          Case 1: AddQuotes = Text & String(nQuotes, 34)\r\n        End Select<\/pre>\n<p>Daher kann das Anf&uuml;hrungszeichen nicht so einfach innerhalb eines String-Literals verwendet werden. Es ist zu verdoppeln:<\/p>\n<pre>Text = \"Hallo \"\"Welt\"\"!\"<\/pre>\n<p>Wenn Sie ein einzelnes Anf&uuml;hrungszeichen einer Variablen zuweisen oder es als Parameter &uuml;bergeben wollen, sieht das in dieser Schreibweise etwas verwirrend aus:<\/p>\n<pre>Anf&uuml;hrungszeichen = \"\"\"\"<\/pre>\n<p>Sie k&ouml;nnen nat&uuml;rlich in solchen F&auml;llen auch die Chr$-Funktion verwenden, um das Anf&uuml;hrungszeichen anhand des Ascii-Codes zu erhalten, wie folgendes Beispiel zeigt:<\/p>\n<pre>Anf&uuml;hrungszeichen = Chr$(34)\r\n      Else\r\n        AddQuotes = vbQuote & Text & vbQuote\r\n      End If\r\n    Case aqEnsureSinglePair\r\n      nLeftQuotes = zGetLeftQuotes(Text)\r\n      nRightQuotes = zGetRightQuotes(Text)\r\n      Select Case nLeftQuotes\r\n        Case 0:\r\n          Select Case nRightQuotes\r\n            Case 0: AddQuotes = vbQuote & Text & vbQuote\r\n            Case 1: AddQuotes = vbQuote & Text\r\n            Case Else: AddQuotes = vbQuote & _              Left$(Text, Len(Text) - nRightQuotes + 1)\r\n          End Select\r\n        Case 1\r\n          Select Case nRightQuotes:\r\n            Case 0: AddQuotes = Text & vbQuote\r\n            Case 1: AddQuotes = Text\r\n            Case Else: AddQuotes = _              Left$(Text, Len(Text) - nRightQuotes + 1)\r\n          End Select\r\n      Case Else\r\n        Select Case nRightQuotes\r\n          Case 0: AddQuotes = _            Mid$(Text, nLeftQuotes) & vbQuote\r\n          Case 1: AddQuotes = Mid$(Text, nLeftQuotes)\r\n          Case Else: AddQuotes = Mid$(Text, _            nLeftQuotes, Len(Text) - nRightQuotes)\r\n        End Select\r\n      End Select\r\n  End Select\r\nEnd Function\r\nPublic Function StripQuotes(Text As String, _\r\n  Optional ByVal StripQuotesMode As _  StripQuotesModeConstants) As String\r\n  Dim nLeftQuotes, nRightQuotes, nQuotes As Long\r\n  Select Case StripQuotesMode\r\n    Case sqAll\r\n      nLeftQuotes = zGetLeftQuotes(Text)\r\n      nRightQuotes = zGetRightQuotes(Text)\r\n      StripQuotes = Mid$(Text, nLeftQuotes + 1, _        Len(Text) - nLeftQuotes - nRightQuotes)\r\n    Case sqAllPairs\r\n      nLeftQuotes = zGetLeftQuotes(Text)\r\n      nRightQuotes = zGetRightQuotes(Text)<\/pre>\n<p><b>Quellcode 2 (Teil 1)<\/b><\/p>\n<p>Diese Schreibweise ist jedoch eher umst&auml;ndlich. Eine Konstante im &uuml;blichen Stil der Visual Basic-Konstanten ist erheblich einfacher und auch leichter lesbar.<\/p>\n<p>Allerdings k&ouml;nnen Sie Konstanten nicht per Funktion erzeugen &#8211; folgende Konstanten-Deklaration w&uuml;rde vom Kompiler nicht akzeptiert:<\/p>\n<pre>Public Const vbQuote = _    Chr$(34)<\/pre>\n<p>Wenn Sie eine Anf&uuml;hrungszeichenkonstante wie folgt in einem Standardmodul deklarieren, ben&ouml;tigen Sie die verwirrende Schreibweise mit den vier aufeinanderfolgenden Anf&uuml;hrungszeichen nur ein einziges Mal:<\/p>\n<pre>Public Const vbQuote = _    \"\"\"\"<\/pre>\n<p>Da Anf&uuml;hrungszeichen zumeist paarweise verwendet werden, ist es recht praktisch, das Hinzuf&uuml;gen oder Entfernen von Anf&uuml;hrungszeichen-Paaren in Hilfsfunktionen zu packen.<\/p>\n<p>Die Funktion AddQuotes (s. Quellcode 1) f&uuml;gt Anf&uuml;hrungszeichen zu einem gegebenen String hinzu.<\/p>\n<p>Im optionalen Parameter AddQuotesMode k&ouml;nnen Sie festlegen, ob ein Anf&uuml;hrungszeichen-Paar in jedem Fall hinzugef&uuml;gt werden soll (aqForce, Voreinstellung) oder ob eine ungleiche Anzahl von Anf&uuml;hrungszeichen am Anfang und am Ende des betreffenden Strings zu Paaren aufgef&uuml;llt werden soll (aqToPairs).<\/p>\n<pre>      Select Case nLeftQuotes\r\n        Case Is &gt;= nRightQuotes\r\n          nQuotes = nRightQuotes\r\n        Case Else\r\n          nQuotes = nLeftQuotes\r\n      End Select\r\n      StripQuotes = Mid$(Text, nQuotes + 1, _        Len(Text) - 2 * nQuotes)\r\n    Case sqSinglePair\r\n      If Left$(Text, 1) = vbQuote And _        Right$(Text, 1) = vbQuote Then\r\n        StripQuotes = Mid$(Text, 2, Len(Text) - 2)\r\n      End If\r\n  End Select\r\nEnd Function<\/pre>\n<p><b>Quellcode 2 (Teil 2)<\/b><\/p>\n<pre>Private Function zGetLeftQuotes(Text As String) As Long\r\n  Dim nLeftQuotes, nPos, nStart As Long\r\n  nStart = 1\r\n  Do\r\n    nPos = InStr(nStart, Text, vbQuote)\r\n    If nPos = nStart Then\r\n      nLeftQuotes = nLeftQuotes + 1\r\n      nStart = nStart + 1\r\n    Else\r\n      zGetLeftQuotes = nLeftQuotes\r\n      Exit Function\r\n    End If\r\n  Loop\r\nEnd Function<\/pre>\n<p><b>Quellcode 3<\/b><\/p>\n<pre>Private Function zGetRightQuotes(Text As String) As Long\r\n  Dim nRightQuotes, nPos, nStart As Long\r\n  nStart = Len(Text)\r\n  Do\r\n    nPos = InStrRev(Text, vbQuote, nStart)\r\n    If nPos = nStart Then\r\n      nRightQuotes = nRightQuotes + 1\r\n      nStart = nStart - 1\r\n    Else\r\n      zGetRightQuotes = nRightQuotes\r\n      Exit Function\r\n    End If\r\n  Loop\r\nEnd Function<\/pre>\n<p><b>Quellcode 4<\/b><\/p>\n<p>Den dritten Parameter verwenden Sie, wenn sichergestellt werden soll, dass der im String enthaltene Text von genau einem Anf&uuml;hrungszeichen-Paar eingeschlossen wird.<\/p>\n<p>Dazu legen Sie zun&auml;chst einmal die m&ouml;glichen Parameter fest, mit denen der Benutzer die Funktion aufrufen kann:<\/p>\n<p>Public Enum _  AddQuotesModeConstants<\/p>\n<p>  aqForce<\/p>\n<p>  aqToPairs<\/p>\n<p>  aqEnsureSinglePair<\/p>\n<p>End Enum<\/p>\n<p>Die Hilfs-Funktion StripQuotes (s. Quellcode 2) bietet Ihnen ebenfalls mehrere M&ouml;glichkeiten. Hier geben Sie im optionalen Parameter StripQuotesMode an, ob alle einschlie&szlig;enden Anf&uuml;hrungszeichen entfernt werden sollen, ob alle Paare entfernt werden sollen oder ob genau ein Paar entfernt werden soll.<\/p>\n<p>Auch f&uuml;r den Betrieb dieser Funktion definieren Sie zun&auml;chst einen Satz von Konstanten, die als Parameter neben dem zu bearbeitenden String &uuml;bergeben werden sollen:<\/p>\n<pre>Public Enum _  StripQuotesModeConstants\r\n  sqAll\r\n  sqAllPairs\r\n  sqSinglePair\r\nEnd Enum<\/pre>\n<p>Beide Funktionen ermitteln in den meisten F&auml;llen erst einmal die vorhandene Anzahl der links- und rechtsseitigen Anf&uuml;hrungszeichen &uuml;ber die privaten Hilfs-Funktionen zGetLeftQuotes (s. Quellcode 3) und zGetRightQuotes (s. Quellcode 4). Dies reduziert deutlich die Anzahl der anfallenden einzelnen String-Operationen, die relativ langsam w&auml;ren.<\/p>\n<pre>Private Function GetFileExtension(Path As String) _    As String\r\n    Dim nPosDot As Long\r\n    nPosDot = InStrRev(Path, \".\")\r\n    If nPosDot Then\r\n        If InStrRev(Path, \"\\\") &lt; nPosDot Then\r\n            GetFileExtension = Mid$(Path, nPosDot + 1)\r\n        End If\r\n    End If\r\nEnd Function<\/pre>\n<p><!--30percent--><\/p>\n<p><b>Quellcode 5<\/b><\/p>\n<pre>Private Function GetFileExtension5(Path As String) _\r\n    As String\r\n    Dim I, nPosDot, nPosBS, nStart As Integer\r\n    Do\r\n        nPosDot = InStr(nStart + 1, Path, \".\")\r\n        If nPosDot Then\r\n            nStart = nPosDot\r\n        Else\r\n            nPosDot = nStart\r\n            Exit Do\r\n        End If\r\n    Loop\r\n    nStart = 0\r\n    Do\r\n        nPosBS = InStr(nStart + 1, Path, \"\\\")\r\n        If nPosBS Then\r\n            nStart = nPosBS\r\n        Else\r\n            nPosBS = nStart\r\n            Exit Do\r\n        End If\r\n    Loop\r\n    If nPosDot Then\r\n        If nPosBS &lt; nPosDot Then\r\n            GetFileExtension5 = Mid$(Path, nPosDot + 1)\r\n        End If\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 6<\/b><\/p>\n<p>Das Extrahieren der Dateierweiterung (Extension) einer Datei sollte an sich recht einfach sein: Sie beginnt hinter dem letzten Punkt im Dateinamen. Enth&auml;lt der Dateiname keinen Punkt, hat die Datei auch keine Erweiterung. Solange es sich um einen Dateinamen ohne Pfadteile handelt, k&ouml;nnen Sie diesen letzten Punkt problemlos vom Ende einer Datei her ausfindig machen und aus dem Antreffen eines Punkts auf das Vorhandensein einer Dateierweiterung schlie&szlig;en.<\/p>\n<p>Sobald Sie es jedoch mit einem ganzen Pfad zu tun haben, funktioniert dies nicht mehr zuverl&auml;ssig. Denn falls einer der &uuml;bergeordneten Pfadbestandteile selbst eine Erweiterung hat und die Datei am Ende bzw. der letzte Pfad nicht erweitert ist, w&uuml;rde so der gesamte Teil ab dem gefundenen letzten Punkt als Dateierweiterung betrachtet, bestehend aus der Erweiterung dieses Pfadbestandteils und aus allen nachfolgenden Pfadbestandteilen. Zum Beispiel erg&auml;be der Pfad:<\/p>\n<pre>c:\\abc.def\\ghi\\jkl<\/pre>\n<p>als Dateierweiterung:<\/p>\n<pre>def\\ghi\\jkl<\/pre>\n<p>Zu einem korrekten Ergebnis gelangen Sie, wenn Sie zun&auml;chst sowohl die Position des letzten Punktes als auch die des letzten Backslashs ermitteln. Dann pr&uuml;fen Sie, falls &uuml;berhaupt ein Punkt gefunden wurde, ob die Position des letzten Backslash kleiner als die des letzten Punktes ist &#8211; nur dann markiert der Punkt den Beginn der Dateierweiterung des letzten Pfadbestandteils.<\/p>\n<pre>Public Function IsSameMonth (ByVal Date1 As Date, _    ByVal Date2 As Date) As Boolean\r\n    IsSameMonth = Not CBool(DateDiff(\"m\", Date1, Date2))\r\nEnd Function<\/pre>\n<p><b>Quellcode 7<\/b><\/p>\n<pre>Public Function IsSameQuarter (ByVal Date1 As Date, _    ByVal Date2 As Date) As Boolean\r\n    IsSameQuarter = _        Not CBool(DateDiff(\"q\", Date1, Date2))\r\nEnd Function\r\nPublic Function IsSameWeek (ByVal Date1 As Date, _    ByVal Date2 As Date) As Boolean\r\n    IsSameWeek = Not CBool(DateDiff(\"w\", Date1, Date2))\r\nEnd Function\r\nPublic Function IsSameDay (ByVal Date1 As Date, _    ByVal Date2 As Date) As Boolean\r\n    IsSameDay = Not CBool(DateDiff(\"d\", Date1, Date2))\r\nEnd Function\r\nPublic Function IsSameHour (ByVal Date1 As Date, _    ByVal Date2 As Date) As Boolean\r\n    IsSameHour = Not CBool(DateDiff(\"h\", Date1, Date2))\r\nEnd Function\r\nPublic Function IsSameMinute (ByVal Date1 As Date, _    ByVal Date2 As Date) As Boolean\r\n    IsSameMinute = Not CBool(DateDiff(\"n\", Date1, _        Date2))\r\nEnd Function\r\nPublic Function IsSameSecond (ByVal Date1 As Date, _    ByVal Date2 As Date) As Boolean\r\n    IsSameSecond = Not CBool(DateDiff(\"s\", Date1, _        Date2))\r\nEnd Function<\/pre>\n<p><b>Quellcode 8<\/b><\/p>\n<p>Ab VBA6 (Access 2000) k&ouml;nnen Sie zur Ermittlung der jeweils letzten Positionen die Funktion InStrRev verwenden, wie die Funktion aus Quellcode 5 zeigt.<\/p>\n<p>In fr&uuml;heren VBA-Versionen steht die Funktion InStrRev noch nicht zur Verf&uuml;gung &#8211; Sie k&ouml;nnen stattdessen eine eigene Implementierung der Erweiterungssuche mit einer schnellen, von vorne beginnenden Suche auf der Basis der InStr-Funktion verwenden. Sie finden diese Funktion in Quellcode 6.<\/p>\n<p>Ob es sich bei zwei Datumsangaben um den gleichen Monat handelt, scheint auf den ersten Blick klar zu sein:<\/p>\n<pre>If Month(Date1) = _    Month(Date2) Then...<\/pre>\n<p>Doch sollten die Datumsangaben aus verschiedenen Jahren sein, ist dieser Vergleich sicher nicht zutreffend.<\/p>\n<p>Nun k&ouml;nnten Sie zwar auch noch das Jahr pr&uuml;fen, aber es geht einfacher: Mit der VBA-Funktion DateDiff ermitteln Sie stattdessen die tats&auml;chliche Differenz zwischen den Monaten (s. Quellcode 7).<\/p>\n<p>Nur wenn die Differenz gleich 0 ist, handelt es sich um exakt denselben Monat.<\/p>\n<p>Nach dem gleichen Prinzip k&ouml;nnen Sie auch  alle anderen Datumsbestandteile direkt vergleichen &#8211; Quartale, Wochen, Tage, Stunden, Minuten und sogar Sekunden (s. Quellcode 8).<\/p>\n<p>Dass das Datumstrennzeichen ein Punkt und das Dezimal-Trennzeichen ein Komma ist, ist in Deutschland selbstverst&auml;ndlich.<\/p>\n<p>Doch &auml;rgern Sie sich bestimmt auch immer wieder &uuml;ber Software aus anderen L&auml;ndern, die jeweils von den dortigen Gepflogenheiten ausgeht, ohne unsere L&auml;ndereinstellungen zu ber&uuml;cksichtigen.<\/p>\n<p>Damit man sich in anderen L&auml;ndern nicht genauso &uuml;ber Ihre Software-Produkte &auml;rgert, sollten Sie daf&uuml;r sorgen, dass diese in internationaler Hinsicht fit sind.<\/p>\n<pre>Private Declare Function GetLocaleInfo Lib \"kernel32\" _\r\n    Alias \"GetLocaleInfoA\" (ByVal Locale As Long, _    ByVal LCType As Long, ByVal lpLCData As String, _    ByVal cchData As Long) As Long\r\nPrivate Declare Function GetUserDefaultLCID _    Lib \"kernel32\" () As Long\r\nPublic Enum LocaleStringConstants\r\n  locCurrency = &H14\r\n  locCurSymbol = &H15\r\n  locDate = &H1D\r\n  locDecimal = &HE\r\n  locList = &HC\r\n  locMoneyDecimal = &H16\r\n  locMoneyThousands = &H17\r\n  locNegative = &H51\r\n  locPositive = &H50\r\n  locThousands = &HF\r\n  locTime = &H1E\r\nEnd Enum<\/pre>\n<p><b>Quellcode 9<\/b><\/p>\n<pre>Public Property Get LocaleString(Info As _    LocaleStringConstants) As String\r\n    Dim nLocale As String\r\n    Dim nLen As Long\r\n    nLocale = Space$(10)\r\n    nLen = GetLocaleInfo(GetUserDefaultLCID(), Info, _        nLocale, 10)\r\n    LocaleString = Left$(nLocale, nLen - 1)\r\nEnd Property<\/pre>\n<p><b>Quellcode 10<\/b><\/p>\n<p>Zur lokal korrekten Darstellung von Zahlen und Datumswerten verhelfen Ihnen die vielen M&ouml;glichkeiten der Format-Funktion.<\/p>\n<p>Doch wenn Sie den W&auml;hrungsbezeichner oder eines der Trennzeichen einmal solo ben&ouml;tigen sollten, hilft Ihnen die Format-Funktion nur wenig weiter. So k&ouml;nnten Sie das Dezimal-Trennzeichen mit der Format-Funktion etwa auf folgende Weise ermitteln:<\/p>\n<pre>DecimalSeparator = _    Mid$(Format$(1.1, _    \"0.0\"), 2, 1)<\/pre>\n<p>Aber das ist nicht sonderlich elegant &#8211; und sp&auml;testens beim W&auml;hrungsbezeichner sind Sie damit am Ende. Und au&szlig;erdem kommen Sie nicht an solche Feinheiten heran, die Windows durchaus auch kennt, n&auml;mlich an m&ouml;glicherweise unterschiedliche Dezimal-Trenn-zeichen f&uuml;r &#8222;normale&#8220; Zahlen und f&uuml;r W&auml;hrungsbetr&auml;ge.<\/p>\n<p>Die korrekten Zeichen und Strings k&ouml;nnen Sie mit der API-Funktion GetLocaleInfo ermitteln (s. Quellcode 9).<\/p>\n<p>Die wichtigsten davon liefert Ihnen die Hilfsfunktion LocaleString (s. Quellcode 10, als Eigenschaft in einem Standard-Modul implementiert), die den etwas umst&auml;ndlichen Aufruf von GetLocaleInfo enth&auml;lt und automatisch auf die lokalen Einstellungen des aktuellen Users zur&uuml;ckgreift (GetUserDefaultLCID).<\/p>\n<pre>Public Function GetDecimals(ByVal Number As Double) _    As Double\r\n    GetDecimals = Number - Fix(Number)\r\nEnd Function\r\nPublic Function GetDecimalsS(ByVal Number As Single) _    As Single\r\n    GetDecimalsS = Number - Fix(Number)\r\nEnd Function\r\nPublic Function GetDecimalsC(ByVal Number As Currency) _    As Currency\r\n    GetDecimalsC = Number - Fix(Number)\r\nEnd Function<\/pre>\n<p><b>Quellcode 11<\/b><\/p>\n<pre>Public Function PathPlusBS(Path As String) As String\r\n    Select Case Right$(Path, 1)\r\n        Case \"\\\"\r\n            PathPlusBS = Path\r\n        Case Else\r\n            PathPlusBS = Path & \"\\\"\r\n    End Select\r\nEnd Function\r\nPublic Function PathNoBS(Path As String) As String\r\n    Select Case Right$(Path, 1)\r\n        Case \"\\\"\r\n            PathNoBS = Left$(Path, Len(Path) - 1)\r\n        Case Else\r\n            PathNoBS = Path\r\n    End Select\r\nEnd Function<\/pre>\n<p><b>Quellcode 12<\/b><\/p>\n<p>Da es keine Funktion gibt, die den Nachkomma-Anteil einer Zahl zur&uuml;ckgibt, k&ouml;nnen Sie diesen auf einem kleinen Umweg erhalten. Sie subtrahieren einfach den ganzzahligen Anteil von der Zahl.<\/p>\n<p>Den ganzzahligen Anteil erhalten Sie &uuml;ber die relativ unbekannte VBA-Funktion Fix. Die Funktion Fix schneidet tats&auml;chlich nur den Nachkomma-Anteil ab, im Gegensatz zu Funktionen wie Int, CInt oder CLng, die statt dessen automatisch runden:<\/p>\n<pre>Decimals = Number - Fix(Number)<\/pre>\n<p>Oder Sie verwenden die praktischen datentypspezifischen Hilfsfunktionen (Double als Standard-Ausf&uuml;hrung), die Sie in Quellcode 11 finden.<\/p>\n<p>Je nach dem, wozu Sie eine Pfadangabe ben&ouml;tigen, muss sie mit einem Backslash abgeschlossen werden oder nicht. Wenn Sie etwa einen Dateinamen anh&auml;ngen m&ouml;chten, ist es praktisch, von vornherein sicherzustellen, dass der Pfad bereits mit dem zur Trennung notwenigen Backslash endet.<\/p>\n<p>Statt jedes Mal den gleichen Code einzugeben, gen&uuml;gt allerdings ein Funktionsaufruf: PathPlusBS (s. Quellcode 12) erg&auml;nzt einen &uuml;bergebenen Pfadnamen mit einem Backslash, falls dieser fehlen sollte, und PathNoBS macht das Gegenteil &#8211; entfernt den st&ouml;renden Backslash, falls dieser vorhanden ist. <\/p>\n<pre>Public Function PathPlusS(Path As String) As String\r\n    Select Case Right$(Path, 1)\r\n        Case \"\/\"\r\n            PathPlusS = Path\r\n        Case Else\r\n            PathPlusS = Path & \"\/\"\r\n    End Select\r\nEnd Function<\/pre>\n<p><b>Quellcode 13<\/b><\/p>\n<pre>Public Function PathNoS(Path As String) As String\r\n    Select Case Right$(Path, 1)\r\n        Case \"\/\"\r\n            PathNoS = Left$(Path, Len(Path) - 1)\r\n        Case Else\r\n            PathNoS = Path\r\n    End Select\r\nEnd Function<\/pre>\n<p><b>Quellcode 14<\/b><\/p>\n<pre>Public Function RndNum(ByVal LBnd As Long, _    ByVal UBnd As Long, _\r\n    Optional ByVal DoRandomize As Boolean) As Long\r\n    If DoRandomize Then\r\n        Randomize Timer\r\n    End If\r\n    RndNum = Int((UBnd - LBnd + 1) * Rnd + LBnd)\r\nEnd Function<\/pre>\n<p><b>Quellcode 15<\/b><\/p>\n<p>Eine Pr&uuml;fung, ob der Pfad tats&auml;chlich existiert, wird nicht vorgenommen &#8211; das m&uuml;ssen Sie gegebenenfalls selbst erledigen.<\/p>\n<h3>Hinweis<\/h3>\n<p>Da Internet-Pfade aus der Unix-Welt stammen, dient bei diesen dagegen der normale Schr&auml;gstrich als Pfad-Trennzeichen. <\/p>\n<p>Genauso bequem wie bei Dateipfaden geht es mit den beiden entsprechenden Funktionen PathPlusS (s. Quellcode 13) und PathNoS (s. Quellcode 14).<\/p>\n<p>Den internen Zufallszahlengenerator in Visual Basic, der &uuml;ber die Funktion Rnd Zufallszahlen liefern soll,  sollte man nicht &uuml;bersch&auml;tzen. Er geht bei der Generierung von Zufallszahlen immer vom gleichen Ursprung aus und liefert folglich jeweils die gleiche Zahlenfolge.<\/p>\n<p>Zufall kommt erst dann ins Spiel, wenn Sie mindestens vor dem ersten Aufruf der Rnd-Funktion zus&auml;tzlich noch die Funktion Randomize aufrufen. Ihr k&ouml;nnen Sie einen beliebigen Initialisierungswert als Parameter &uuml;bergeben.<\/p>\n<p>Um dem Zufall auf die Spr&uuml;nge zu helfen, sollte dieser Wert auch einigerma&szlig;en zuf&auml;llig sein, etwa der aktuelle Wert, den die Timer-Funktion zur&uuml;ckgibt (Anzahl der seit Mitternacht vergangenen Sekunden).<\/p>\n<p>Eine ganzzahlige Zufallszahl innerhalb eines gegebenen Zahlenbereichs erhalten Sie &uuml;ber die Rnd-Funktion nach folgender Formel:<\/p>\n<pre>Zahl = Int((Obergrenze - _    Untergrenze + 1) * _    Rnd + Untergrenze)<\/pre>\n<p>Die Funktion RndNum aus Quellcode 15 liefert nach dieser Formel und optionaler Initialisierung der Zufalls-Basis eine ganze Zahl innerhalb der Grenzen von LBnd und Ubnd. <\/p>\n<pre>Public Function RndSet(ByVal Count As Long, ByVal _    LBnd As Long, ByVal UBnd As Long, Optional ByVal _    DoRandomize As Boolean = True, Optional ByVal _    AsArray As Boolean) As Variant\r\n    Dim nNumbers As Collection\r\n    Dim nRnd , nRndTest As Long, nRndSetArray() As Long\r\n    Dim l As Long\r\n    If DoRandomize Then Randomize Timer\r\n    Set nNumbers = New Collection\r\n    With nNumbers\r\n        On Error Resume Next\r\n        Do\r\n            nRnd = RndNum(LBnd, UBnd)\r\n            nRndTest = nNumbers(CStr(nRnd))\r\n            If Err.Number Then\r\n                Err.Clear\r\n                .Add nRnd, CStr(nRnd)\r\n            End If\r\n        Loop Until .Count = Count\r\n    End With\r\n    If AsArray Then\r\n        ReDim nRndSetArray(1 To Count)\r\n        For l = 1 To Count\r\n            nRndSetArray(l) = nNumbers(l)\r\n        Next\r\n        RndSet = nRndSetArray\r\n    Else\r\n        Set RndSet = nNumbers\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 16<\/b><\/p>\n<pre>Public Enum WinVersionConstants\r\n    wvWin9x\r\n    wvWinNT\r\n    wvWin2000\r\nEnd Enum\r\nPublic Function WindowsVersion() As WinVersionConstants\r\n    Select Case True\r\n        Case Len(Environ$(\"OS\")) = 0\r\n            WindowsVersion = wvWin9x\r\n        Case Len(Environ$(\"PROGRAMFILES\")) = 0\r\n            WindowsVersion = wvWinNT\r\n        Case Else\r\n            WindowsVersion = wvWin2000\r\n    End Select\r\nEnd Function<\/pre>\n<p><b>Quellcode 17<\/b><\/p>\n<p>Falls Sie gleich mehrere Zufallszahlen aus einem Zahlenbereich ben&ouml;tigen, k&ouml;nnen Sie die Funktion RndSet verwenden (s. Quellcode 16). Sie geben die gew&uuml;nschte Anzahl an und bekommen die Zahlen wahlweise in einer Collection (Voreinstellung) oder als Array geliefert.<\/p>\n<p>Zahlengruppen nach dem Muster 6 aus 49 f&uuml;r Ihren Lottoschein ermitteln Sie beispielsweise folgenderma&szlig;en:<\/p>\n<pre>Dim nLotto As Collection\r\nDim i As Integer\r\nSet nLotto = _    RndSet(6, 1, 49)\r\nFor i = 1 To 6\r\n  Debug.Print nLotto(i)\r\nNext <\/pre>\n<p>In den Umgebungsvariablen ist eine einfache M&ouml;glichkeit verborgen, die aktuelle Windows-Version zu ermitteln.<\/p>\n<p>Unter Windows NT und Windows 2000 enth&auml;lt die Umgebungsvariable &#8222;OS&#8220;  die Kennung &#8222;Windows_NT&#8220;, w&auml;hrend diese Umgebungsvariable unter Windows 9x unbekannt ist.<\/p>\n<p>Zur weiteren Unterscheidung zwischen Windows NT und Windows 2000 k&ouml;nnen Sie die Umgebungsvariable &#8222;PRO-GRAMFILES&#8220; heranziehen, die wiederum unter Windows NT unbekannt ist, w&auml;hrend sie unter Windows 2000 den Pfad des Programmordners liefert (s. Quellcode 17).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In dieser Zusammenstellung von Tipps und Tricks finden Sie die folgenden Themen:<br \/>\n&#8211; Zeichenketten in Zeichenketten in Zeichenketten<br \/>\n&#8211; Ende ohne Schrecken<br \/>\n&#8211; Gleich oder nicht gleich<br \/>\n&#8211; Punkt, Komma, Strich, fertig ist der &Auml;rger<br \/>\n&#8211; Nachz&uuml;gler getrennt<br \/>\n&#8211; Der Pfad zur Gl&uuml;ckseligkeit<br \/>\n&#8211; Dem Zufall sei Dank<br \/>\n&#8211; Blick &uuml;ber den Tellerrand<\/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":[66022002,662002,44000004],"tags":[],"class_list":["post-55000061","post","type-post","status-publish","format-standard","hentry","category-66022002","category-662002","category-Tipps_und_Tricks"],"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>Tipps und Tricks zu VBA - 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\/Tipps_und_Tricks_zu_VBA\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tipps und Tricks zu VBA\" \/>\n<meta property=\"og:description\" content=\"In dieser Zusammenstellung von Tipps und Tricks finden Sie die folgenden Themen: - Zeichenketten in Zeichenketten in Zeichenketten  - Ende ohne Schrecken  - Gleich oder nicht gleich  - Punkt, Komma, Strich, fertig ist der &Auml;rger  - Nachz&uuml;gler getrennt  - Der Pfad zur Gl&uuml;ckseligkeit  - Dem Zufall sei Dank  - Blick &uuml;ber den Tellerrand\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-06T15:17:11+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/7f98128214584eb081ffc1248f23a5c9\" \/>\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=\"14\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tipps_und_Tricks_zu_VBA\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tipps_und_Tricks_zu_VBA\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Tipps und Tricks zu VBA\",\"datePublished\":\"2020-05-06T15:17:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tipps_und_Tricks_zu_VBA\\\/\"},\"wordCount\":1733,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tipps_und_Tricks_zu_VBA\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/7f98128214584eb081ffc1248f23a5c9\",\"articleSection\":[\"2\\\/2002\",\"2002\",\"Tipps und Tricks\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Tipps_und_Tricks_zu_VBA\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tipps_und_Tricks_zu_VBA\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tipps_und_Tricks_zu_VBA\\\/\",\"name\":\"Tipps und Tricks zu VBA - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tipps_und_Tricks_zu_VBA\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tipps_und_Tricks_zu_VBA\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/7f98128214584eb081ffc1248f23a5c9\",\"datePublished\":\"2020-05-06T15:17:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tipps_und_Tricks_zu_VBA\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Tipps_und_Tricks_zu_VBA\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tipps_und_Tricks_zu_VBA\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/7f98128214584eb081ffc1248f23a5c9\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/7f98128214584eb081ffc1248f23a5c9\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tipps_und_Tricks_zu_VBA\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tipps und Tricks zu VBA\"}]},{\"@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":"Tipps und Tricks zu VBA - 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\/Tipps_und_Tricks_zu_VBA\/","og_locale":"de_DE","og_type":"article","og_title":"Tipps und Tricks zu VBA","og_description":"In dieser Zusammenstellung von Tipps und Tricks finden Sie die folgenden Themen: - Zeichenketten in Zeichenketten in Zeichenketten  - Ende ohne Schrecken  - Gleich oder nicht gleich  - Punkt, Komma, Strich, fertig ist der &Auml;rger  - Nachz&uuml;gler getrennt  - Der Pfad zur Gl&uuml;ckseligkeit  - Dem Zufall sei Dank  - Blick &uuml;ber den Tellerrand","og_url":"https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-06T15:17:11+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/7f98128214584eb081ffc1248f23a5c9","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Tipps und Tricks zu VBA","datePublished":"2020-05-06T15:17:11+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/"},"wordCount":1733,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/7f98128214584eb081ffc1248f23a5c9","articleSection":["2\/2002","2002","Tipps und Tricks"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/","url":"https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/","name":"Tipps und Tricks zu VBA - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/7f98128214584eb081ffc1248f23a5c9","datePublished":"2020-05-06T15:17:11+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/7f98128214584eb081ffc1248f23a5c9","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/7f98128214584eb081ffc1248f23a5c9"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Tipps_und_Tricks_zu_VBA\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Tipps und Tricks zu VBA"}]},{"@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\/55000061","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=55000061"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000061\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000061"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000061"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000061"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}