Sub Отметить() Intersect(Columns("A:N"), ActiveCell.EntireRow).Interior.Color = 15773696 End Sub
[/vba]
Его задача, при запуске макроса, заливать цветом диапазон A:N по одной строке. Но, к сожалению, он и выделяет цветом только одну строку. Помогите переделать его так, чтобы я, к примеру, выделял диапазон ячеек C1:C13, запускал макрос и он при запуске заливал цветом диапазон A1:N13. И так при выделении любого диапазона (по любому столбцу в пределах A:N), от 1 ячейки до максимально возможного.
Здравствуйте. Сейчас у меня есть макрос: [vba]
Код
Sub Отметить() Intersect(Columns("A:N"), ActiveCell.EntireRow).Interior.Color = 15773696 End Sub
[/vba]
Его задача, при запуске макроса, заливать цветом диапазон A:N по одной строке. Но, к сожалению, он и выделяет цветом только одну строку. Помогите переделать его так, чтобы я, к примеру, выделял диапазон ячеек C1:C13, запускал макрос и он при запуске заливал цветом диапазон A1:N13. И так при выделении любого диапазона (по любому столбцу в пределах A:N), от 1 ячейки до максимально возможного.Alexei
Sub Отметить() Range("A" & Selection.Row).Resize(Selection.Rows.Count, 14).Interior.Color = 15773696 End Sub
[/vba]
Если будет выделен несмежный диапазон, код отработает не так, как Вы ожидаете, а закрасит количество строк, равное кол-ву строк в первой выделенной области.
[vba]
Код
Sub Отметить() Range("A" & Selection.Row).Resize(Selection.Rows.Count, 14).Interior.Color = 15773696 End Sub
[/vba]
Если будет выделен несмежный диапазон, код отработает не так, как Вы ожидаете, а закрасит количество строк, равное кол-ву строк в первой выделенной области.The_Prist
Errare humanum est, stultum est in errore perseverare
А Вы как бы даже не упоминали про эту проблему. [vba]
Код
Sub Отметить() Dim rArea As Range For Each rArea In Selection.Areas Cells(rArea.Row, 1).Resize(Selection.Rows.Count, 14).Interior.Color = 15773696 Next rArea End Sub
[/vba]
А Вы как бы даже не упоминали про эту проблему. [vba]
Код
Sub Отметить() Dim rArea As Range For Each rArea In Selection.Areas Cells(rArea.Row, 1).Resize(Selection.Rows.Count, 14).Interior.Color = 15773696 Next rArea End Sub
Извините, но выделяет некорректно. Выделяю диапазоны, а макрос в одном диапазоне выделяет меньше строк, а в другом диапазоне захватывает не выделенные ячейки и тоже заливает.
Извините, но выделяет некорректно. Выделяю диапазоны, а макрос в одном диапазоне выделяет меньше строк, а в другом диапазоне захватывает не выделенные ячейки и тоже заливает.Alexei
Sub otmet() Dim rRow As Range For Each rRow In Selection Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696 Next End Sub
[/vba]
Я ведь правильно понял задачу? Вы выделяете несколько ячеек, и все строки, в которых находятся выделенные ячейки нужно закрасить от столбца А до N ?
С проверкой диапазона. Заливает только строки выделенные в диапазоне A:N [vba]
Код
Sub otmet() Dim rRow As Range For Each rRow In Selection If rRow.Column <= 14 Then Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696 End If Next End Sub
[/vba]
Вот [vba]
Код
Sub otmet() Dim rRow As Range For Each rRow In Selection Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696 Next End Sub
[/vba]
Я ведь правильно понял задачу? Вы выделяете несколько ячеек, и все строки, в которых находятся выделенные ячейки нужно закрасить от столбца А до N ?
С проверкой диапазона. Заливает только строки выделенные в диапазоне A:N [vba]
Код
Sub otmet() Dim rRow As Range For Each rRow In Selection If rRow.Column <= 14 Then Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696 End If Next End Sub
Никакой тяги к изучению...А еще говорят, что лень - двигатель прогресса. Врут. [vba]
Код
Sub Отметить() Dim rArea As Range For Each rArea In Selection.Areas Cells(rArea.Row, 1).Resize(rArea.Rows.Count, 14).Interior.Color = 15773696 Next rArea End Sub
[/vba]
Никакой тяги к изучению...А еще говорят, что лень - двигатель прогресса. Врут. [vba]
Код
Sub Отметить() Dim rArea As Range For Each rArea In Selection.Areas Cells(rArea.Row, 1).Resize(rArea.Rows.Count, 14).Interior.Color = 15773696 Next rArea End Sub
The_Prist, До этой темы не был знаком с Resize, и, соответственно не мог применять (хотя и сейчас не совсем понимаю, как этот метод работает). Поэтому предложил вариант с перебором всех ячеек выделенного диапазона. Прекрасно понимаю, что при большом кол-ве макрос будет работать дольше.
The_Prist, До этой темы не был знаком с Resize, и, соответственно не мог применять (хотя и сейчас не совсем понимаю, как этот метод работает). Поэтому предложил вариант с перебором всех ячеек выделенного диапазона. Прекрасно понимаю, что при большом кол-ве макрос будет работать дольше.SkyPro
skypro1111@gmail.com
Сообщение отредактировал SkyPro - Воскресенье, 07.07.2013, 00:31
SkyPro, в принципе моя цитата про лень была адресована не Вам :-) Resize - если дословно, то и перевод будет "переопределение размерности". Иными словами данный метод изменяет границы диапазона на указанное кол-во сток и столбцов. Если какой-либо из параметров опущен, то он не изменяется. Небольшие примеры: Range("A1").Resize(5) - получим диапазон "A1:A5" Range("A1").Resize(5,3) - получим диапазон "A1:C5" Range("A1").Resize(,3) - получим диапазон "A1:C1"
Метод Resize может быть применен только к диапазону.
SkyPro, в принципе моя цитата про лень была адресована не Вам :-) Resize - если дословно, то и перевод будет "переопределение размерности". Иными словами данный метод изменяет границы диапазона на указанное кол-во сток и столбцов. Если какой-либо из параметров опущен, то он не изменяется. Небольшие примеры: Range("A1").Resize(5) - получим диапазон "A1:A5" Range("A1").Resize(5,3) - получим диапазон "A1:C5" Range("A1").Resize(,3) - получим диапазон "A1:C1"
Метод Resize может быть применен только к диапазону.The_Prist
Errare humanum est, stultum est in errore perseverare
С Resize разобрался более-менее. Спасибо вам огромное за разьяснение. Но теперь у меня еще один вопрос Почему этот код: [vba]
Код
Sub otmet() Dim rRow As Range For Each rRow In Selection.Areas If rRow.Column <= 14 Then 'Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696 Cells(rRow.Row, 1).Resize(rRow.Rows.Count, 14).Interior.Color = 15773696 End If Next End Sub
[/vba] Работает быстрее, чем этот: [vba]
Код
Sub otmet() Dim rRow As Range For Each rRow In Selection '.Areas If rRow.Column <= 14 Then 'Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696 Cells(rRow.Row, 1).Resize(rRow.Rows.Count, 14).Interior.Color = 15773696 End If Next End Sub
[/vba] ? может кто-нибудь простым языком обьяснить, чем Areas так сокращает кол-во итераций?
С Resize разобрался более-менее. Спасибо вам огромное за разьяснение. Но теперь у меня еще один вопрос Почему этот код: [vba]
Код
Sub otmet() Dim rRow As Range For Each rRow In Selection.Areas If rRow.Column <= 14 Then 'Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696 Cells(rRow.Row, 1).Resize(rRow.Rows.Count, 14).Interior.Color = 15773696 End If Next End Sub
[/vba] Работает быстрее, чем этот: [vba]
Код
Sub otmet() Dim rRow As Range For Each rRow In Selection '.Areas If rRow.Column <= 14 Then 'Range("a" & rRow.Row, "N" & rRow.Row).Interior.Color = 15773696 Cells(rRow.Row, 1).Resize(rRow.Rows.Count, 14).Interior.Color = 15773696 End If Next End Sub
[/vba] ? может кто-нибудь простым языком обьяснить, чем Areas так сокращает кол-во итераций?SkyPro
Ареас (если не вдаваться в подробности, на пальцах) в данном случае работает сразу с блоками неразрывных диапазонов. То есть, если выделить А1:А3 и А5:А9, то он сначала сделает нужную операцию над А1:А3 (сразу на 3 строки), потом над А5:А9 (сразу на 5 строк). То есть, всего 2 операции. А без него операции будут идти на каждую выделенную строчку, то есть, всего 8 операций. С нижеследующей поправкой Сергея (конечно ячейку - быстро писал, не подумал). А без него операции будут идти на каждую выделенную ячейку, то есть, всего 8 операций.
Ареас (если не вдаваться в подробности, на пальцах) в данном случае работает сразу с блоками неразрывных диапазонов. То есть, если выделить А1:А3 и А5:А9, то он сначала сделает нужную операцию над А1:А3 (сразу на 3 строки), потом над А5:А9 (сразу на 5 строк). То есть, всего 2 операции. А без него операции будут идти на каждую выделенную строчку, то есть, всего 8 операций. С нижеследующей поправкой Сергея (конечно ячейку - быстро писал, не подумал). А без него операции будут идти на каждую выделенную ячейку, то есть, всего 8 операций._Boroda_
Тем, что Areas за раз просматривает всю выделенную область, а во втором случае просматривается КАЖДАЯ ячейка всех областей. Т.е. при выделееной А6:Н6 одна и таже область будет просмотрена и обработана 8 раз. А Areas обработает ее за раз. Можете убедиться, установив в watches watch - rRow.Address и прогнав оба макроса по шагам. P.S. Надеюсь, это было "простым языком"
Тем, что Areas за раз просматривает всю выделенную область, а во втором случае просматривается КАЖДАЯ ячейка всех областей. Т.е. при выделееной А6:Н6 одна и таже область будет просмотрена и обработана 8 раз. А Areas обработает ее за раз. Можете убедиться, установив в watches watch - rRow.Address и прогнав оба макроса по шагам. P.S. Надеюсь, это было "простым языком" KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Да, доступно и понятно. Спасибо за обьяснения. Тоесть Areas можно использовать везде, где диапазон обьявляется переменной? Имею вииду, если нужно сделать переборку по диапазону.
Да, доступно и понятно. Спасибо за обьяснения. Тоесть Areas можно использовать везде, где диапазон обьявляется переменной? Имею вииду, если нужно сделать переборку по диапазону.SkyPro
skypro1111@gmail.com
Сообщение отредактировал SkyPro - Воскресенье, 07.07.2013, 17:31