VBA, MS Access MS Access в примерах

Очистка строки от "мусора" по списку, переданному через список значений (для запроса на изменение)

По материалам: 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
Назад ToTop
L.E. 04.04.2024
Рейтинг@Mail.ru