Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Задача с оглавление для прайс листа на основе гиперссылок - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Задача с оглавление для прайс листа на основе гиперссылок (Макросы/Sub)
Задача с оглавление для прайс листа на основе гиперссылок
dredder_gun Дата: Вторник, 03.05.2016, 08:13 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Такая задача. Есть прайст лист, в котором много тысяч строчек. Нужно сделать оглавление для него на основе заголовков категории товаров, которые выставлены в столбике С (прикрепил файл с таблицей, там всё видно).

Я решил делать так. Я собрал все заголовки категорий из столбика C, вынес их в отдельный лист и написал макрос, который вставляет ссылки на ячейки этих заголовков.

Макрос выполняет такой алгоритм:
1. Берёт текст каждой ячейки из листа "Содержание
2. Ищет этот текст в столбике С (в котором содержатся заголовки категорий) листа "Прайс лист"
3. В тех ячейках, в которых текст совпал, программа вставляет ссылку. Т.е. в ячейку из "Содержания" вставляется ссылка на подошедшую ячейку из прайс-листа

Вот такой код я состряпал:
[vba]
Код

Sub Find_n_PastLink()

    Dim rangContent As Range, rangPrice As Range, oWbk As Excel.Workbook, cell As Range, RecRow

    Set PriceSheet = ActiveSheet
    Set ContentSheet = oWbk.Worksheets.Item("Содержание") ' На самом деле лист по-другому называется, тут для наглядности поставил
    Set rangContent = ContentSheet.Range([A2], Range("A" & Rows.Count).End(xlUp))    
    Set rangPrice = PriceSheet.Range([C11], Range("C" & Rows.Count).End(xlUp))

    For CRow = 1 To 360 ' нужно пройтись циклом до конца столбца, не знаю как это сделать, поэтому поставил цифру побольше
       RecRow = rangContent.Cells(A, CRow)
       For PRow = 1 To 17000
          If rangContent.Cells(A, CRow).Text Like rangPrice.Cells(C, PRow).Text

          rangContent.Cells(A, CRow).Formula = _
           "=HYPERLINK(""[price 1.1.xls]""&ADDRESS(rangPrice.Cells(C, PRow)), rangPrice.Cells(C, PRow))"

          End If

       Next PRow
   Next CRow

End Sub
[/vba]

Проблема в том, что в VBA я вообще не шарю, в коде наделал ошибок.
Пожалуйста, помогите мне исправить код, чтобы всё работало
[moder]Вам замечание за кросс без уведомления.
Это нарушение правил форума.[/moder]
К сообщению приложен файл: price.xls.zip(84Kb)


Сообщение отредактировал SLAVICK - Вторник, 03.05.2016, 10:41
 
Ответить
СообщениеТакая задача. Есть прайст лист, в котором много тысяч строчек. Нужно сделать оглавление для него на основе заголовков категории товаров, которые выставлены в столбике С (прикрепил файл с таблицей, там всё видно).

Я решил делать так. Я собрал все заголовки категорий из столбика C, вынес их в отдельный лист и написал макрос, который вставляет ссылки на ячейки этих заголовков.

Макрос выполняет такой алгоритм:
1. Берёт текст каждой ячейки из листа "Содержание
2. Ищет этот текст в столбике С (в котором содержатся заголовки категорий) листа "Прайс лист"
3. В тех ячейках, в которых текст совпал, программа вставляет ссылку. Т.е. в ячейку из "Содержания" вставляется ссылка на подошедшую ячейку из прайс-листа

Вот такой код я состряпал:
[vba]
Код

Sub Find_n_PastLink()

    Dim rangContent As Range, rangPrice As Range, oWbk As Excel.Workbook, cell As Range, RecRow

    Set PriceSheet = ActiveSheet
    Set ContentSheet = oWbk.Worksheets.Item("Содержание") ' На самом деле лист по-другому называется, тут для наглядности поставил
    Set rangContent = ContentSheet.Range([A2], Range("A" & Rows.Count).End(xlUp))    
    Set rangPrice = PriceSheet.Range([C11], Range("C" & Rows.Count).End(xlUp))

    For CRow = 1 To 360 ' нужно пройтись циклом до конца столбца, не знаю как это сделать, поэтому поставил цифру побольше
       RecRow = rangContent.Cells(A, CRow)
       For PRow = 1 To 17000
          If rangContent.Cells(A, CRow).Text Like rangPrice.Cells(C, PRow).Text

          rangContent.Cells(A, CRow).Formula = _
           "=HYPERLINK(""[price 1.1.xls]""&ADDRESS(rangPrice.Cells(C, PRow)), rangPrice.Cells(C, PRow))"

          End If

       Next PRow
   Next CRow

End Sub
[/vba]

Проблема в том, что в VBA я вообще не шарю, в коде наделал ошибок.
Пожалуйста, помогите мне исправить код, чтобы всё работало
[moder]Вам замечание за кросс без уведомления.
Это нарушение правил форума.[/moder]

Автор - dredder_gun
Дата добавления - 03.05.2016 в 08:13
vikttur Дата: Вторник, 03.05.2016, 10:07 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2029
Репутация: 355 ±
Замечаний: 0% ±

 
Ответить
СообщениеЕсть ответы:
http://www.planetaexcel.ru/forum....s-lista
http://www.excel-vba.ru/forum/index.php?topic=4519.new#new

Автор - vikttur
Дата добавления - 03.05.2016 в 10:07
SLAVICK Дата: Вторник, 03.05.2016, 10:32 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 1834
Репутация: 613 ±
Замечаний: 0% ±

2007,2010,2013,2016
Ну поскольку уже сделал то вот:
Я видел такого плана прайсы - так вот там содержание не на отдельном листе - а строки сгруппированы - так удобнее смотреть.
[vba]
Код
Sub d()
Dim i&, n&, j%
    With ActiveSheet
    n = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 11 To n
            j = .Cells(i, 2).Font.Size
            If j = 12 Then .Cells(i, 2).EntireRow.OutlineLevel = 2
            If j = 8 Then .Cells(i, 2).EntireRow.OutlineLevel = 3
        Next
    .Outline.ShowLevels RowLevels:=2: .Outline.ShowLevels RowLevels:=1
    .Outline.SummaryRow = xlAbove
    End With
End Sub
[/vba]
См пример.
К сообщению приложен файл: price.zip(92Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеНу поскольку уже сделал то вот:
Я видел такого плана прайсы - так вот там содержание не на отдельном листе - а строки сгруппированы - так удобнее смотреть.
[vba]
Код
Sub d()
Dim i&, n&, j%
    With ActiveSheet
    n = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 11 To n
            j = .Cells(i, 2).Font.Size
            If j = 12 Then .Cells(i, 2).EntireRow.OutlineLevel = 2
            If j = 8 Then .Cells(i, 2).EntireRow.OutlineLevel = 3
        Next
    .Outline.ShowLevels RowLevels:=2: .Outline.ShowLevels RowLevels:=1
    .Outline.SummaryRow = xlAbove
    End With
End Sub
[/vba]
См пример.

Автор - SLAVICK
Дата добавления - 03.05.2016 в 10:32
dredder_gun Дата: Вторник, 03.05.2016, 22:32 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Огромная благодарность Славику за ответ! Мега-решение, гораздо лучше и удобней, чем я планировал. Всё работает, буду пользоваться вашим макросом

Прошу прощения за кросс. Просто мне так нужен был ответ, что решил раструбить везде, дабы гарантированно получить помощь.
 
Ответить
СообщениеОгромная благодарность Славику за ответ! Мега-решение, гораздо лучше и удобней, чем я планировал. Всё работает, буду пользоваться вашим макросом

Прошу прощения за кросс. Просто мне так нужен был ответ, что решил раструбить везде, дабы гарантированно получить помощь.

Автор - dredder_gun
Дата добавления - 03.05.2016 в 22:32
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Задача с оглавление для прайс листа на основе гиперссылок (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!