Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 08.10.2008, 22:32   #1
Scolopendra
Пользователь
 
Аватар для Scolopendra
 
Регистрация: 04.10.2008
Сообщений: 16
По умолчанию Удаление строк в зависимости от заливки

В работе использую следующий порядок:
1. Мне присылают остатки на складе базы, которые видимо импортируют из 1С;
2. Я выбираю из них нужный товар, подсвечивая заливкой нужные строки и изменяя столбец с количеством;
3. Удаляю все неподсвеченные строки (ну, кроме заголовка, хотя его тоже можно выделить)
4. Сформированный т.о. заказ отправляю обратно на склад
Теперь вопрос:
Можно ли удалять ненужные строки через макрос, или хотя бы перенести подкрашенные в чистый лист (а старый удалить). Если у кого-то есть подобный макрос, то большая просьба закомментировать все действия, потому что иначе мои три класса приходской школы не позволят подогнать его под себя.
P.S. Желательно, чтобы сохранялись ячейки определённого цвета (напр. красного), т.к. в файле обычно бывает своя подсветка (жёлтый, зелёный и т.п.).
Заранее спасибо!
Scolopendra вне форума
Старый 09.10.2008, 06:48   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Следующий код удалит все красные строки.
Работает так: объявляем переменную. Запрещаем обновление экрана (чтобы не мигал). Организуем цикл от последней заполненной строки активного листа до первой ячейки (снизу вверх) с шагом -1. Проверяем, если код цвета фона строки равен 3 (красный), то удаляем эту строку. Все.
Код:
Sub DeleteRedRows()

    Dim i As Long
    Application.ScreenUpdating = False
    For i = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
        If Rows(i).Interior.ColorIndex = 3 Then Rows(i).Delete
    Next
 
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 10.10.2008, 16:39   #3
Scolopendra
Пользователь
 
Аватар для Scolopendra
 
Регистрация: 04.10.2008
Сообщений: 16
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Проверяем, если код цвета фона строки равен 3 (красный), то удаляем эту строку.
Спасибо за помощь, но вопрос был, как удалить всё, кроме красной строки.
Если не трудно, поправьте код. Сам не смогу, а в работе очень пригодилось бы.
Scolopendra вне форума
Старый 10.10.2008, 18:17   #4
maxic
Пользователь
 
Аватар для maxic
 
Регистрация: 10.09.2008
Сообщений: 37
По умолчанию

2 Scolopendra
Чтобы удалить все строки, заливка которых отлична от красного цвета, в коде надо проставить знак неравенства "<>" :

If Rows(i).Interior.ColorIndex <> 3 Then Rows(i).Delete

2 SAS888
На авторские права не претендую (если помешала, извините)
+ большое спасибо за ScreenUpdating - никак не могла вспомнить
maxic вне форума
Старый 10.10.2008, 19:33   #5
Scolopendra
Пользователь
 
Аватар для Scolopendra
 
Регистрация: 04.10.2008
Сообщений: 16
По умолчанию

Так просто! Спасибо, вы мне сэкономили кучу времени. А я за деревьями леса не увидел.

А можно до кучи, без открытия новой темы, спросить?
Всё по тем же заказам...
Записал макрос подсветки строки с выделенной ячейкой: Shift + Пробел, Заливка, всё .
Повторяю процесс по F4 (Повтор). Ну удобно мне так.
Но когда выполняю макрос, а затем перехожу на новую строку и нажимаю F4 иногда подсвечивает не всю строку, а только выделенную ячейку. В чём может быть проблема? Пользуюсь Excel 2003.
Scolopendra вне форума
Старый 11.10.2008, 08:30   #6
maxic
Пользователь
 
Аватар для maxic
 
Регистрация: 10.09.2008
Сообщений: 37
По умолчанию

Могу ошибаться, но все же...
Мне кажется, по вашему описанию, что макрос у вас записан на заливку выделенной области, т.о. по F4 вы закрашиваете то, что выделили. Когда-то выделяется строка, а когда-то только ячейка...

Можете выложить то, что записано в вашем макросе?

Для примера:

Sub Макрос1()
With Selection.Interior
.ColorIndex = 43
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub
maxic вне форума
Старый 19.10.2008, 20:11   #7
Scolopendra
Пользователь
 
Аватар для Scolopendra
 
Регистрация: 04.10.2008
Сообщений: 16
По умолчанию

maxic спасибо за участие.
Макрос я слегка корректировал методом проб и ошибок и на данный момент он у меня выглядит следующим образом:
Цитата:
Sub Макрос2()
iSelectionRow = ActiveWindow.RangeSelection.Row
Rows(iSelectionRow).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End Sub
По F4 повторяется нормально, так что кто из нас глючил я видимо уже не узнаю...
Думаю тему можно закрыть. Всем спасибо.
Scolopendra вне форума
Старый 24.10.2008, 00:16   #8
Scolopendra
Пользователь
 
Аватар для Scolopendra
 
Регистрация: 04.10.2008
Сообщений: 16
По умолчанию

С закрытием темы я поторопился. Возник ещё один вопрос.
При выполнении макроса с оператором If Rows(i).Interior.ColorIndex <> 3 сохраняются все цвета, не только красный. Видимо нужен другой оператор.
А насчёт, второго вопроса (повтор по F4) — вот код:
Код:
Sub FindActiveCell()
'
' ПодсветкаСтроки Макрос
' Макрос записан 23.07.2007 (Oleg Tulsky)
'
ActiveCell.Rows("1:1").EntireRow.Select
    ActiveCell.Activate
    With Selection.Interior
        .ColorIndex = 3
        .Pattern = xlSolid
    End With
End Sub
При выполнении макроса выделяет строку, при повторе по F4 выделяет ячейку, в которой стоит курсор.
Scolopendra вне форума
Старый 24.10.2008, 06:54   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А что в конце концов нужно-то?
Посмотрите вложение.
При нажатии Shift+пробел - выделяется строка на которой находится курсор и автоматом окрашивается в красный цвет. При повторном нажатии - обесцвечивается.
После выделения необходимых строк - нажать F2, или запустить макрос "DeleteRows". Будут удалены все строки, кроме красных.
Вложения
Тип файла: rar 1.rar (7.3 Кб, 90 просмотров)
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 24.10.2008 в 06:56.
SAS888 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление строк alexk Microsoft Office Excel 24 15.02.2011 08:34
Удаление строк Dr.Badnezz Общие вопросы Delphi 1 07.10.2008 15:22
удаление строк Dime_x Microsoft Office Excel 2 07.10.2008 13:38
Запрет на удаление строк и столбцов Shavminator Microsoft Office Excel 2 12.01.2008 13:36
Удаление строк массива по условию Lexakazanskij Паскаль, Turbo Pascal, PascalABC.NET 9 12.09.2007 20:32