Quad.Wiki
Замена текста в загружаемом прайсе
Для замены какого-то текста в загружаемых полях прайса можно использовать макросы замены. Пример, когда может понадобиться замена:
1. названия бренда или нескольких брендов в прайсе поставщика отличается от вашего названия, а у вас настроено автоматическое добавление товаров с брендом, который берется из прайса
2. нужно привести названия групп товаров в прайсе к какому-то виду
3. нужно вместо текстового обозначения наличия задать какие-то фиксированные числа, например вместо “**” указать “10”
4. нужно очистить колонку с ценой в прайсе от лишних символов, например, поставщик цену пишет текстом, цифры разделяет пробелом, добавляет обозначение валюты в конце числа, использует точку в качестве разделителя дробной части и т.п.
5. обозначение валюты, чтобы оно соответствовало коду валюты в программе (для мультивалютных прайсов из которых помимо цены загружается еще и валюта)
смотреть какой реально текст находится в колонке нужно в ячейке прайса, потому что в большинстве случаев, например, валюта в цене указывается с помощью форматирования, а не ручного ввода текста в каждой ячейке (см. скриншет ниже, если в строке формул вверху присутствует текст, значит его нужно заменять на “пусто”)
Рассмотрим пример: поставщик в ячейке цены пишет не просто число, а текст “2 345.10р.”
Чтобы загрузилась такая цена нужно ее очистить от пробела, буквы р и точек.
В настройках прайса в карточке прайса перейдите во вкладке “Макрос” и нажмите кнопку “Замена”. Если при открытии окна у вас там уже есть макрос, то нужно перед нажатием кнопки поставить курсор в конец текста с новой строки.
Добавится следующий текст:
SHEET_INDEX = 1 'номер листа на котором замена
REPL_COLUMNS = "A:Z" 'колонки в которых заменить
REPL_TYPE = 1 'полное совпадение значения ячейки (2 - частичное)
sheets(SHEET_INDEX).Columns(REPL_COLUMNS).Select
Selection.Replace What:="Руб.", Replacement:="RUB", LookAt:=REPL_TYPE, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
в полученном тексте вам нужно указать:
SHEET_INDEX = 1
- номер листа, на котором нужно делать замену. Если это будет несколько листов, то нужно будет делать копию всего текста замен для нескольких листов (сначала укажите все замены для одного листа, потом скопируйте полученный текст целиком, только SHEET_INDEX
укажите уже следующего листа.
REPL_COLUMNS = "A:Z"
- интервал колонок, в которых необходимо сделать замены. Если у вас одна колонка, указывайте, например "A:A"
REPL_TYPE = 1
- тип замены, если стоит 1, то искомый текст должен полностью совпадать с тем, что в ячейке, если 2 - то вхождение текста.
Selection.Replace What:="Руб.", Replacement:="RUB"
- здесь указывается что заменить (Руб.) и на что заменить (RUB)
Для примера “2 345.10р.” макрос будет иметь следующий вид (предположим что этот текст во второй колонке B):
SHEET_INDEX = 1
REPL_COLUMNS = "B:B"
REPL_TYPE = 2
sheets(SHEET_INDEX).Columns(REPL_COLUMNS).Select
Selection.Replace What:=" ", Replacement:="", LookAt:=REPL_TYPE, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="р.", Replacement:="", LookAt:=REPL_TYPE, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:=".", Replacement:=",", LookAt:=REPL_TYPE, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Обратите внимание, если нужно делать несколько замен, то нужно копировать блок текста
Selection.Replace What:=".", Replacement:=",", LookAt:=REPL_TYPE, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
В примере делается 3 замены:
1. Пробел меняется на пусто Selection.Replace What:=" ", Replacement:=""
2. Обозначение валюты заменяется на пусто Selection.Replace What:="р.", Replacement:=""
- обратите внимание, что валюта заменяется вместе с точкой, чтобы потом не заменить эту точку на запятую, следующим действием
3. Точка (разделитель дробной части) заменяется на запятую Selection.Replace What:=".", Replacement:=","