Attribute VB_Name = "udf_trims" '------------------------------------------------------------------------------- 'File : udf_trims.bas ' Copyright mpl by ERB software ' All rights reserved ' http://wiki.yaslaw.info/dokuwiki/doku.php/vba/ 'Environment : VBA 2007 + 'Version : 1.1.1 'Name : trims 'Author : Stefan Erb (ERS) 'History : 22.07.2014 - ERS - Creation ' 31.10.2014 - ERS - Cache durch Static ersetzt ' 04.11.2014 - ERS - \u0000 als Whitespace hinzugefügt ' 11.07.2018 - ERS - Pattern angepasst, damit aein String de nur aus Leerzeicen besteht auf ein Leerstring getrimmt wird '------------------------------------------------------------------------------- Option Explicit ' Entfernt alle Spaces vor und nach dem Text mittels RegExp. ' Das s am Ende des Namens steht dann auch für \s. Also alle Spaces ' Die RegExp werden während ded ganzen Session gehalten um. Das beschleunigt die Funktion beim EInsatz in SQL Public Enum trDirection [_FIRST] = 1 trLeft = [_FIRST] 'LTRIM() trRight = 2 'RTRIM() trBoth = 3 'TRIM() (trLeft + trRight) [_LAST] = trBoth End Enum Private Const C_PATTERN = "^[\s\u0000]*([\S\s]*\b)?[\s\u0000]*$" Private Const C_L_PATTERN = "^[\s\u0000]*([\S\s\u0000]*)?$" Private Const C_R_PATTERN = "^([\S\s\u0000]*\b)?[\s\u0000]*$" '/** ' * trim \s: Entfernt im Gegensatz zu trim() auch Zeilenumbrüche, Tabulatoren etc. Alles was regexp \s ist ' * ' * string = trims(string [,direction][,clearCache]) ' * ' * @param String ' * @param trDirection Angabe, auf welcher Seite getrimmt werden soll ' * @return String ' */ Public Function trimS( _ ByVal iString As String, _ Optional ByVal iDirection As trDirection = trBoth _ ) As String trimS = rxTrim(iDirection).replace(iString, "$1") End Function Public Function rTrimS(ByVal iString As String) As String rTrimS = rxTrim(trRight).replace(iString, "$1") End Function Private Property Get rxTrim(Optional ByVal iDirection As trDirection = trBoth) As Object Static cacheRxTrim(trDirection.[_FIRST] To trDirection.[_LAST]) As Object If cacheRxTrim(iDirection) Is Nothing Then Set cacheRxTrim(iDirection) = CreateObject("VBScript.RegExp") cacheRxTrim(iDirection).pattern = Choose(iDirection, C_L_PATTERN, C_R_PATTERN, C_PATTERN) End If Set rxTrim = cacheRxTrim(iDirection) End Property