Здравствуйте. Вопрос возник из-за необходимости оптимизации кода. Меня интересует, возможно ли изменять свойства боксов не поочередно, а разом. Вот для примера того, как я реализовывал это с перекрашиваением ячеек на листе: Первый макрос перекрашивает ячейки поочередно Второй запоминает адреса всех нужных ячеек и перекрашивает разом [vba]
Код
Dim oX&, oY As Long Sub adfbadfb() For oY = 1 To 100 For oX = 1 To 100 If True Then 'Окрашивание по условию Cells(oY, oX).Interior.Color = rgb(0, 255, 0) End If Next oX Next oY End Sub Sub dghmdghmsfn() Dim Mass As Range For oY = 1 To 100 For oX = 1 To 100 If True Then 'Окрашивание по условию If Mass Is Nothing _ Then Set Mass = Cells(oY, oX) _ Else Set Mass = Union(Mass, Cells(oY, oX)) End If Next oX Next oY Mass.Interior.Color = rgb(0, 0, 255) End Sub
[/vba] При проигрывании этих макросов можно заметить, что второй работает быстрее.
В форме у меня создается много боксов Image, которые должны, при включении макроса, часто изменять свой цвет. Максимум, какой оптимизации я смог добиться, это не менять цвет конкретоной Image, если новый цвет равен старому. Меня интересует, получиться ли ещё сильнее оптимизировать, если добиться разового перекрашивания нескольких боксов, вместо поочередного, но никак не получается добиться желаемого действия в макросе. Поэтому вопрос ко всем знатокам: как можно добиться этого в форме? Или в форме такого не сделать?
Вот чего в форме максимум добился (естественно не работает) [vba]
Код
Dim Spisok(1 To 7) As Object Private Sub UserForm_Initialize() Set Spisok(1) = Me.Image1 Set Spisok(2) = Me.Image2 Set Spisok(3) = Me.Image3 End Sub Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 'Перекрашивает только одну Spisok(2).BackColor = rgb(255, 0, 0)
'Не перекраш все, а выдаёт ошибку ' Spisok.BackColor = rgb(255, 0, 0) End Sub
[/vba]
Здравствуйте. Вопрос возник из-за необходимости оптимизации кода. Меня интересует, возможно ли изменять свойства боксов не поочередно, а разом. Вот для примера того, как я реализовывал это с перекрашиваением ячеек на листе: Первый макрос перекрашивает ячейки поочередно Второй запоминает адреса всех нужных ячеек и перекрашивает разом [vba]
Код
Dim oX&, oY As Long Sub adfbadfb() For oY = 1 To 100 For oX = 1 To 100 If True Then 'Окрашивание по условию Cells(oY, oX).Interior.Color = rgb(0, 255, 0) End If Next oX Next oY End Sub Sub dghmdghmsfn() Dim Mass As Range For oY = 1 To 100 For oX = 1 To 100 If True Then 'Окрашивание по условию If Mass Is Nothing _ Then Set Mass = Cells(oY, oX) _ Else Set Mass = Union(Mass, Cells(oY, oX)) End If Next oX Next oY Mass.Interior.Color = rgb(0, 0, 255) End Sub
[/vba] При проигрывании этих макросов можно заметить, что второй работает быстрее.
В форме у меня создается много боксов Image, которые должны, при включении макроса, часто изменять свой цвет. Максимум, какой оптимизации я смог добиться, это не менять цвет конкретоной Image, если новый цвет равен старому. Меня интересует, получиться ли ещё сильнее оптимизировать, если добиться разового перекрашивания нескольких боксов, вместо поочередного, но никак не получается добиться желаемого действия в макросе. Поэтому вопрос ко всем знатокам: как можно добиться этого в форме? Или в форме такого не сделать?
Вот чего в форме максимум добился (естественно не работает) [vba]
Код
Dim Spisok(1 To 7) As Object Private Sub UserForm_Initialize() Set Spisok(1) = Me.Image1 Set Spisok(2) = Me.Image2 Set Spisok(3) = Me.Image3 End Sub Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 'Перекрашивает только одну Spisok(2).BackColor = rgb(255, 0, 0)
'Не перекраш все, а выдаёт ошибку ' Spisok.BackColor = rgb(255, 0, 0) End Sub
Pelena, циклом я как раз таки всё и организовал, но когда боксов image сетка 100 на 100, начинает медленнее высчитываться. Касательно файла, могу позже загрузить. Там много всего, так что дописать инструкцию, и проверить не привысит ли размер файла разрешенный здесь.
RAN, тоесть для боксов нет аналога диапазона? Жаль если это так.
Pelena, циклом я как раз таки всё и организовал, но когда боксов image сетка 100 на 100, начинает медленнее высчитываться. Касательно файла, могу позже загрузить. Там много всего, так что дописать инструкцию, и проверить не привысит ли размер файла разрешенный здесь.
RAN, тоесть для боксов нет аналога диапазона? Жаль если это так.ZetMenChavo
Pelena, подготовил файл. Оставлять лишь тот участок кода где я пытаюсь оптимизировать его, я не стал, чтоб случайно не поламать всю форму. Там практически всё взаимозависимо. В форме в макре "Игра_Жизнь_Ver_2" после фразы "'Вычисление следующего поколения" тот участок кода из-за которого и возник мой вопрос. В макросе "Игра_Жизнь_Ver_1" также после фразы "'Вычисление следующего поколения" то как я оптимизировал форматирование для листа. При создания большого игрового поля в форме и запуска игры в самой форме очень сильно тормозит. Инструкцию как чем управлять записал в самой форме. Т.к. форма форматирует лист, создавать кнопку не стал. Запустить макрос сможете через панель "Разработчик"
Pelena, подготовил файл. Оставлять лишь тот участок кода где я пытаюсь оптимизировать его, я не стал, чтоб случайно не поламать всю форму. Там практически всё взаимозависимо. В форме в макре "Игра_Жизнь_Ver_2" после фразы "'Вычисление следующего поколения" тот участок кода из-за которого и возник мой вопрос. В макросе "Игра_Жизнь_Ver_1" также после фразы "'Вычисление следующего поколения" то как я оптимизировал форматирование для листа. При создания большого игрового поля в форме и запуска игры в самой форме очень сильно тормозит. Инструкцию как чем управлять записал в самой форме. Т.к. форма форматирует лист, создавать кнопку не стал. Запустить макрос сможете через панель "Разработчик"ZetMenChavo