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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2009, 16:33   #11
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
Восклицание

Большое спасибо за подробное обьяснение. Очень доступно. Отдельно Ваш макрос работает, а вот в совокупности с тем, что у меня было написано до этого, наотрез отказывается. Я пытался менять их очередность-безрезультатно.
Код:
Option Compare Text
Sub FormatSelection()
    Dim ra As Range: Set ra = Selection: Application.ScreenUpdating = False
    If ra.Columns.Count = 1 Or ra.Rows.Count < 3 Then MsgBox "Не выделен диапазон", vbExclamation: Exit Sub
    SetRangeBorders ra, xlContinuous, xlThick
    ra.Columns(1).Interior.ColorIndex = 41: ra.Columns(1).Font.Name = "Calibri"
    With ra.Rows(1)
        .Interior.ColorIndex = 49
        .Font.Name = "Calibri": .Font.Bold = True: .Font.Size = 11: .Font.FontStyle = "курсив"
        .Font.ThemeColor = xlThemeColorDark1:    .Font.ThemeFont = xlThemeFontMinor
        .HorizontalAlignment = xlCenter: .VerticalAlignment = xlCenter
        .WrapText = True
    End With
    With ra.Rows(ra.Rows.Count)
        .Font.Name = "Calibri": .Font.Bold = True: .Font.Size = 11
        .Interior.ColorIndex = 48:
    End With
    ra.EntireColumn.AutoFit
End Sub
Sub SetRangeBorders(ByRef ra As Range, ByVal BordersLineStyle As XlLineStyle, ByVal BordersWeight As XlBorderWeight)
    ra.Borders.LineStyle = BordersLineStyle: ra.Borders.Weight = BordersWeight
    ra.Borders(xlDiagonalDown).LineStyle = xlNone: ra.Borders(xlDiagonalUp).LineStyle = xlNone
    ra.Borders(xlInsideVertical).LineStyle = xlContinuous:    ra.Borders(xlInsideVertical).Weight = xlThin
    ra.Borders(xlInsideHorizontal).LineStyle = xlContinuous:    ra.Borders(xlInsideHorizontal).Weight = xlThin
    ra.Rows(1).Borders(xlEdgeBottom).LineStyle = xlContinuous:    ra.Rows(1).Borders(xlEdgeBottom).Weight = xlMedium
    ra.Columns(1).Borders(xlEdgeRight).LineStyle = xlContinuous:    ra.Columns(1).Borders(xlEdgeRight).Weight = xlMedium
    ra.Rows(ra.Rows.Count).Borders(xlEdgeTop).LineStyle = xlContinuous:    ra.Rows(ra.Rows.Count).Borders(xlEdgeTop).Weight = xlMedium
End Sub
Sub Indention()
    txt = "total"  
    Dim cell As Range, ra As Range: Application.ScreenUpdating = False
    Set ra = Intersect(Selection.EntireRow, ActiveSheet.UsedRange)
    For Each cell In ra.Cells
        If cell Like "*" & txt & "*" Then cell.Interior.Color = vbGreen
    Next cell
End Sub
Ну почему он не работает??? У меня голова взрывается.
А вот можно извлечь номер строки в которой найдена ячейка со словом для того, чтобы закрасить все ячейки этой строки???
mephist вне форума Ответить с цитированием
Старый 09.07.2009, 16:41   #12
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Не знаю, у меня всё работает:



Не забывайте, что перед запуском макроса надо выделить ячейки в тех строках, в которых надо обработать ячейки.

Цитата:
А вот можно извлечь номер строки в которой найдена ячейка со словом для того, чтобы закрасить все ячейки этой строки???
Да всё можно...
А чем Вас не устраивает условное форматирование?
Оно ведь для таких целей и предназначено...

Последний раз редактировалось EducatedFool; 09.07.2009 в 16:44.
EducatedFool вне форума Ответить с цитированием
Старый 09.07.2009, 17:12   #13
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
По умолчанию

Я не хочу использовать условное форматирование потому, что тогда каждый раз придется прописывать условия. А здесь у меня все раз и навсегда.
А как можно закрасить те СТРОКИ, в которых нашлась ячейка с текстом?
А можно просто для себя узнать: вот SetRangeBorders и Indention можно рассматривать как процедуры, к которым я обращаюсь из тела программы? Верно я понимаю?
Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Не забывайте, что перед запуском макроса надо выделить ячейки в тех строках, в которых надо обработать ячейки.
Я же выделил ячейки перед запуском первого макроса...
Может быть просто я их не передаю в Indention???
mephist вне форума Ответить с цитированием
Старый 09.07.2009, 17:21   #14
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
А как можно закрасить те СТРОКИ, в которых нашлась ячейка с текстом?
Красить строки надо полностью (с первой ячейки, и до последней), или же только определённую часть строки (например, с 1 до 20 столбца)?

Если полностью, то замените строку
Код:
If cell Like "*" & txt & "*" Then cell.Interior.Color = vbGreen
на строку
Код:
If cell Like "*" & txt & "*" Then cell.EntireRow.Interior.Color = vbGreen
Цитата:
SetRangeBorders и Indention можно рассматривать как процедуры, к которым я обращаюсь из тела программы?
Смотря что Вы понимаете под процедурой.
SetRangeBorders - процедура, вызываемая из другого макроса.
Indention - самостоятельный макрос.

Если требуется более подробное объяснение - звоните через Скайп.

Цитата:
Я же выделил ячейки перед запуском первого макроса...
Может быть просто я их не передаю в Indention???
Ничего не надо передавать.
Макрос Indention сам получает информацию о выделенных ячейках на момент его запуска:
Код:
Set ra = Intersect(Selection.EntireRow, ActiveSheet.UsedRange)
EducatedFool вне форума Ответить с цитированием
Старый 09.07.2009, 17:58   #15
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
По умолчанию

Спасибо. Вот теперь я начинаю что-то доганять. Я ведь думал, что это единый целый макрос. А можно их обьединить?
Мне кажется логичным тогда вставить
Код:
txt = "total"
    Dim cell As Range
    For Each cell In ra.Cells
        If cell Like "*" & txt & "*" Then cell.Interior.Color = vbGreen
    Next cell
в макрос FormatSelection сразу после строки
Код:
ra.EntireColumn.AutoFit
. Но теперь перестал работать SetRangeBorders.
Проверь, пожалуйста?
Кстати строки нужно закрасить только частично, только в тех ячейках, который входили в выделенный диапазон.
Можешь помочь довести макрос до ума?
mephist вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос постоянно обрабатывает события. При открытии другой книги макрос обрывается. Ples Microsoft Office Excel 8 17.12.2016 18:15
Макрос Markizka Microsoft Office Excel 1 31.05.2009 20:53
Макрос терпкая_весна Microsoft Office Excel 2 18.05.2009 12:53
макрос Demonmov Microsoft Office Excel 19 29.01.2009 16:19
Макрос Мингиян Microsoft Office Access 1 24.01.2008 21:54