![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 01.05.2009
Сообщений: 200
|
![]()
Хочу написать макрос, которой бы работал следующим образом:
я выбираю произвольный диапозон, выполняю макрос, он рисует границу таблицы, линии между ячейками, и выделяет разными цветами верхнюю и нижнии строки,и левый столбец. Основная проблема состоит в то, чтобы диапозон был произвольных размеров. Как это сделать??? (я если честно вообще не представляю) примерно мой код выглядит так. (записывал мастером записи) Sub format() ' ' format макрос ' ' Selection.Borders(xlDiagonalDown).L ineStyle = xlNone Selection.Borders(xlDiagonalUp).Lin eStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThick End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent5 .TintAndShade = 0.799981688894314 .PatternTintAndShade = 0 End With ActiveCell.Range("A1:H1").Select With Selection.Font .Name = "Calibri" .FontStyle = "îáû÷íûé" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ThemeColor = xlThemeColorDark1 .TintAndShade = 0 .ThemeFont = xlThemeFontMinor End With Selection.Borders(xlDiagonalDown).L ineStyle = xlNone Selection.Borders(xlDiagonalUp).Lin eStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThick End With ActiveCell.Offset(1, 0).Range("A1:A7").Select Selection.Borders(xlDiagonalDown).L ineStyle = xlNone Selection.Borders(xlDiagonalUp).Lin eStyle = xlNone With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlMedium End With With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorLight2 .TintAndShade = 0.399945066682943 .PatternTintAndShade = 0 End With ActiveCell.Offset(7, 0).Range("A1:H1").Select Selection.Borders(xlDiagonalDown).L ineStyle = xlNone Selection.Borders(xlDiagonalUp).Lin eStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThick End With End Sub |
![]() |
![]() |
![]() |
#2 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Попробуйте такой макрос:
Код:
Цвета можете подобрать здесь: http://www.programmersforum.ru/showp...46&postcount=9 |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 01.05.2009
Сообщений: 200
|
![]()
Все супер! Круто! Работает! СПАСИБО БОЛЬШОЕ!
Честно признаюсь, я совсем не знаю синтаксиса VB, но вот что я написал. Вообще работает, но проверьте, пожалуйста на ошибки, помарки и тупости. Буду рад любым коментам. 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" ra.Rows(1).Interior.ColorIndex = 49: ra.Rows(1).Select With Selection.Font .Name = "Calibri" .FontStyle = "курсив" .Size = 11 .Underline = xlUnderlineStyleNone .ThemeColor = xlThemeColorDark1 .TintAndShade = 0 .ThemeFont = xlThemeFontMinor End With ra.Rows(1).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True End With ra.Rows(ra.Rows.Count).Interior.Col orIndex = 48: ra.Rows(ra.Rows.Count).Select With Selection.Font .Name = "Calibri": .FontStyle = "полужирный": .Size = 11 End With Columns("ra.Columns(1):ra.Columns(r a.Columns.Count)").EntireColumn.Aut oFit 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).LineStyl e = xlNone: ra.Borders(xlDiagonalUp).LineStyle = xlNone ra.Borders(xlInsideVertical).LineSt yle = xlContinuous: ra.Borders(xlInsideVertical).Weight = xlThin ra.Borders(xlInsideHorizontal).Line Style = xlContinuous: ra.Borders(xlInsideHorizontal).Weig ht = xlThin ra.Rows(1).Borders(xlEdgeBottom).Li neStyle = xlContinuous: ra.Rows(1).Borders(xlEdgeBottom).We ight = xlMedium ra.Columns(1).Borders(xlEdgeRight). LineStyle = xlContinuous: ra.Columns(1).Borders(xlEdgeRight). Weight = xlMedium ra.Rows(ra.Rows.Count).Borders(xlEd geTop).LineStyle = xlContinuous: ra.Rows(ra.Rows.Count).Borders(xlEd geTop).Weight = xlMedium End Sub А вот эта строка совсем не работает,помогите исправить: Columns("ra.Columns(1):ra.Columns(r a.Columns.Count)").EntireColumn.Aut oFit |
![]() |
![]() |
![]() |
#4 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
По сути, Вы всё сделали правильно.
Убрал немного лишнего (в частности, всякие Select-ы) Код:
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 01.05.2009
Сообщений: 200
|
![]()
Спасибо большое. Все супер!
А можете помочь с модификацией? Я хочу, чтобы макрос искал в первом столбце определенное слово и выделял цветом все стороки, которые содержат это слово. Есть какая-нибудь функция поиска??? или подскажите как в VB организуется цикл и считывание информации из ячейки??? |
![]() |
![]() |
![]() |
#6 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Назначить условное форматирование можно и макросом: Код:
Цитата:
Код:
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 08.07.2009 в 18:01. |
||
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 01.05.2009
Сообщений: 200
|
![]()
Маленький вопросик:
происходит сверка содержимого ячейки и "слова" или поиск слова в содержимом ячейки. Проще говоря хочется, если в ячейке находится "\\слово", то она тоже выделяется. |
![]() |
![]() |
![]() |
#8 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Код:
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 01.05.2009
Сообщений: 200
|
![]()
EducatedFool огромное спасибо!!! Выручил грандиозно!!!
Но вот самой последний штрих в макрос я так и не понял, и не доделал ![]() Целиком он теперь выглядит так: Код:
Код:
К тому же я здесь писал об упрощенной задаче. В действительности мне нужно просматривать строки выделенного диапазона, находить в их ячейках определенное слово и выделять всю строку цветом. При этом ячейка, содержащая слово, может оказаться в произвольном столбце. Как мне этого добиться??? |
![]() |
![]() |
![]() |
#10 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Set ra = Range([A1], Range("A" & Rows.Count).End(xlUp))
Обрабатываются ячейки, начиная с A1, и заканчивая последней заполненной ячейкой в столбце A Set ra = selection Обрабатываются ячейки выделенного диапазона Set ra = Intersect(Selection.EntireRow, ActiveSheet.UsedRange) Обрабатываются все ячейки в строках, которые захватывает выделение. К примеру, выделен диапазон b2:g9 Макрос обработает все ячейки в строках со 2-й по 9-ю. PS: Чтобы не обрабатывать отдельно одни и те же слова, но написанные в разном регистре, используйте директиву Option Compare Text (эта директива должна стоять первой строкой в модуле, выше всех макросов) Код:
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 09.07.2009 в 15:49. |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Макрос постоянно обрабатывает события. При открытии другой книги макрос обрывается. | 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 |