Создание таблицы с черезстрочной заливкой

Программирование на Visual Basic for Applications
anatol83
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 27.10.2008 (Пн) 0:45

Создание таблицы с черезстрочной заливкой

Сообщение anatol83 » 27.10.2008 (Пн) 0:56

Есть вот такая задача: создается в Excel таблица, в которой хочется предусмотреть заливку строк через одну (одная без заливки, другая с заливкой и т.д.; делается для удобства работы с таблицей). Также данную таблицу можно фильтровать, сортировать по разным полям (более 10-ти штук), удалять из нее записи. В результате данных манипуляций необходимо, чтобы заливка оставалась правильной (черезстрочной). Пример: 1 строка - не залита, 2 строка - залита, 3 строка - не залита. Пользователь в результате фильтра оставляет видимыми только 1-ю и 3-ю строки, которые изначально залиты, а необходимо, чтобы таблица была залита черезстрочно!! Аналогично и с фильтрацией, и с удалением.
Предполагаю, что необходимо создать событие Сортировка и Фильтрация и соответствующие обработчики данных событий. Но как создать это самое событие - вопрос.

shovkoplyas
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 15.07.2007 (Вс) 10:21
Откуда: г.Северодонецк Украина

Re: Создание таблицы с черезстрочной заливкой

Сообщение shovkoplyas » 27.10.2008 (Пн) 12:02

Я использую вот так, можно конечно упростить код и унифицировать (последняя строка определяется по столбцу B)

Код: Выделить всё
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Dim i As Long
Dim b As Boolean

If Sh.name = "Сумки" Then
    b = False
    With Sheets("Сумки")
        For i = 5 To 65535
            If .Cells(i, 2) = "" Then Exit For
            If .Rows(i).EntireRow.Hidden = False Then
                If b = True Then
                        b = False
                        Range(.Cells(i, 2), .Cells(i, 13)).Interior.ColorIndex = 34
                    Else
                        b = True
                        Range(.Cells(i, 2), .Cells(i, 13)).Interior.ColorIndex = xlNone
                End If
            End If
        Next
    End With
End If
End Sub

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Re: Создание таблицы с черезстрочной заливкой

Сообщение KL » 27.10.2008 (Пн) 14:45

Интересно, а что черезстрочная заливка настолько приоритетна, что допускает след. побочные эффекты макросов?
1) стирание возможности отменить или восстановить последние изменения на листе
2) затраты времени на перелопачивание строк с пом. цикла
3) повтор предыдущего пункта по каждому удобному и неудобному поводу
Привет,
KL

shovkoplyas
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 15.07.2007 (Вс) 10:21
Откуда: г.Северодонецк Украина

Re: Создание таблицы с черезстрочной заливкой

Сообщение shovkoplyas » 27.10.2008 (Пн) 15:33

Всё верно. Я ответил так, как поставлен был вопрос. Я использую чересстрочную заливку в другом событии:

Код: Выделить всё
Workbook_SheetActivate(ByVal Sh As Object)

anatol83
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 27.10.2008 (Пн) 0:45

Re: Создание таблицы с черезстрочной заливкой

Сообщение anatol83 » 27.10.2008 (Пн) 23:42

Спасибо за соучастие и помощь. Однако:
1. событие Workbook_SheetActivate(ByVal Sh As Object) не реагирует на использование фильтра, сортировки;
2. остается открытым вопрос как (если других более очевидных способов решения поставленной задачи не существует) отловить событие использование автофильтра (сортировка, фильтрация и проч.); есть предположение, что необходимо создавать собственный класс и определять в нем необходимое событие.
Ваши мнения?! Где можно почитать (обыскался уже) про реализацию подобных или похожих задач (интересует создание события, не предусмотренного изначально в VBA).

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Re: Создание таблицы с черезстрочной заливкой

Сообщение KL » 28.10.2008 (Вт) 8:12

аввтофильтр выстреливает событие Calculate
Привет,
KL


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 105

    TopList