Очистка строки от "мусора" по списку, переданному через список значений (для запроса на изменение)По материалам: https://www.cyberforum.ru/ms-access/thread3161939.html#post17266981 Public Function CleanByEnumeration(vVal, vEnumeration, Optional sReplace$ = "") As Variant ' es 04.04.2024 v01 ' Чистка строки от "мусора" по списку, переданному через список значений (vEnumeration) ' Возвращает очищенную строку ' -------------------------------------------------------------------------------------------------/ 'Аргументы: ' vVal - Очищаемое значение - строка ' vEnumeration - Список заменяемых значений через точку с запятой ' sReplace - Опциональный - На что это всё меняем (по умолчанию = "") ' -------------------------------------------------------------------------------------------------/ ' - Удобно когда необходимо почистить строчку от нескольких вариантов вхождений Dim iVal%, sSearch$, sReturn$ Dim vArr As Variant 'массив On Error GoTo CleanByEnumeration_Err sReturn = vVal & "" vArr = Split(vEnumeration & "", ";") For iVal = 0 To UBound(vArr) sSearch = Trim(vArr(iVal)) sReturn = Replace(sReturn, sSearch, sReplace, 1, , vbTextCompare) ' замена Next iVal CleanByEnumeration = Trim(sReturn) CleanByEnumeration_Bye: Exit Function CleanByEnumeration_Err: CleanByEnumeration = vVal & "" End Function
UPDATE Спарвочник SET НаименованиеНовое = CleanByEnumeration([Наименование],"Габариты; Замок; Сигнал","<!>"); Изменённое значение лучше сохранить в отдельном поле, а то мало ли ... Private Sub CleanByArray_Test01() Dim sVal$, sRepEnum$ 'Исходаная строка sVal = "(Лев) был (прав) когда забрал СБ" 'Что заменяем: sRepEnum = "(лев);(прав);СБ" 'Очищаем от перечисленного выше с заменой на "<удалено>" sVal = CleanByEnumeration(sVal, sRepEnum, "<удалено>") 'Debug.Print sVal 'Вернёт: <удалено> был <удалено> когда забрал <удалено> End Sub |
|||
L.E. 04.04.2024 |