...
Часто в прайсах указывают группы, которые не сгруппированы средствами Excel, но текст в каждом уровне имеет разное форматирование (разный шрифт, или цвет шрифта, или цвет ячейки, или разные отступы от начала ячейки). В этом случае группы можно загрузить, но для этого нужно составить макрос.Текст макроса:
Expand |
---|
title | Текст Развернуть текст макроса |
---|
|
Code Block |
---|
language | vb |
---|
firstline | 1 |
---|
title | Макрос |
---|
| ###DECLARE###
Public Type GroupLevel
ColIndex As Integer 'номер колонки, в которой указано название группы
InterColor As Long 'цвет ячейки
IsBold As Integer '1 - жирный 0 - нет
IsItalic As Integer '1 - курсив 0 - нет
FontName As String 'название шрифта
FontColor As Long 'цвет шрифта
FontSize As Long 'размер шрифта
Indent As Integer 'отступ
End Type
###DECLARE###
'Укажите после "To" количество уровней группировки,
'3 (три) означет что у группы есть подгруппы и у подгруппы есть еще вложенные подгруппы
lvlCount = 3
Dim i, j, clmnPriceIndex, clmnOutIndex, rowFirstData, lvlCount As Integer
'Укажите номер колонки, в которой указана цена товара
clmnPriceIndex = 06
'Укажите номер колонки, в которую будет помещен результат
clmnOutIndex = 020
'Укажите номер первой строки с данными
rowFirstData = 1
'Укажите после "To" количество уровней группировки,
'3 (три) означет что у группы есть подгруппы и у подгруппы есть еще вложенные подгруппы
lvlCount = 310
Dim GroupLevels(1 To 3lvlCount) As GroupLevel
'Укажите настройки для каждого уровня
GroupLevels(1).ColIndex = 1
GroupLevels(1).InterColor = 0
GroupLevels(1).IsBold = 0
GroupLevels(1).IsItalic = 0
GroupLevels(1).FontName = ""
GroupLevels(1).FontColor = 0
GroupLevels(1).FontSize = 1
GroupLevels(1).Indent = 0
'GroupLevels(2).ColIndex = 1
'GroupLevels(2).InterColor = 0
'GroupLevels(2).IsBold = 0
'GroupLevels(2).IsItalic = 0
'GroupLevels(2).FontName = ""
'GroupLevels(2).FontColor = 0
'GroupLevels(2).Indent = 0
For i = rowFirstData To ActiveSheet.UsedRange.Rows.Count
If ActiveSheet.Cells(i, clmnPriceIndex).Value = "" Then
For j = 1 To lvlCount
Set cel = ActiveSheet.Cells(i, GroupLevels(j).ColIndex)
If (cel.Interior.Color = GroupLevels(j).InterColor) And _
((-1) * CInt(cel.Font.Bold) = GroupLevels(j).IsBold) And _
((-1) * CInt(cel.Font.Italic) = GroupLevels(j).IsItalic) And _
(cel.Font.Name = GroupLevels(j).FontName) And _
(cel.Font.Color = GroupLevels(j).FontColor) And _
(cel.Font.Size = GroupLevels(j).FontSize) And _
(cel.IndentLevel = GroupLevels(j).Indent) Then
ActiveSheet.Cells(i, clmnOutIndex).Value = j
Exit For
End If
Next j
End If
Next i
|
|
Вам так же понадобится этот файл, для определения форматирования в ячейках, скачайте его себе:
View file |
---|
name | Проверка формата ячейки.xlsm |
---|
height | 250 |
---|
|
Что нужно делать:
1. Скопируйте текст макроса в блокнот, можете использовать для этого программу-блокнот с подсветкой синтаксиса, например Notepad++
Установите в нем синтаксис Visual Basic
Image Added
В макросе укажите:
Количество уровней групп, которые собираетесь загружать из прайса
Image Added
Номер колонки в которой цена товара
Image Added
Номер колонки, в которую будет помещен код уровня группировки:
Image Added
Здесь нужно указать какую-то пустую колонку, после всех колонок прайса. Указывайте с запасом, на случай, если поставщик добавит в прайс колонки, чтобы не переделывать макрос. Обычно указывается 20-ая колонка, если в прайсе колонок меньше.
Укажите номер строки, с которой начинается прайс (первая строка после шапки)
Image Added
Дальше нужно для каждого уровня группировки указать блок, описывающий форматирование этого уровня в прайсе.
Image Added
Блоки эти нужно брать из файла "Проверка формата ячейки"
2. Откройте файл "Проверка формата ячейки"
В этом файле нужно получить код для каждого уровня группировки. Пример прайса, в котором каждый уровень группировки обозначен с помощью различного цвета ячейки:
Image Added
Копируем ячейку с названием первого уровня групп (если в экселе для названия группы объединено несколько ячеек, то их нужно разъединить)
Image Added
после этого скопировать
Image Added
и вставить в файл с макросом проверки, ввести номер уровня группы и нажать "Проверить"
Image Added
в результате получим код, который нужно скопировать в макрос для прайса:
Image Added