Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Userform Изменение параметров в нескольких боксах разом - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Userform Изменение параметров в нескольких боксах разом
ZetMenChavo Дата: Четверг, 23.06.2022, 15:07 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 165
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте. Вопрос возник из-за необходимости оптимизации кода.
Меня интересует, возможно ли изменять свойства боксов не поочередно, а разом.
Вот для примера того, как я реализовывал это с перекрашиваением ячеек на листе:
Первый макрос перекрашивает ячейки поочередно
Второй запоминает адреса всех нужных ячеек и перекрашивает разом
[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]


Сообщение отредактировал ZetMenChavo - Четверг, 23.06.2022, 16:11
 
Ответить
СообщениеЗдравствуйте. Вопрос возник из-за необходимости оптимизации кода.
Меня интересует, возможно ли изменять свойства боксов не поочередно, а разом.
Вот для примера того, как я реализовывал это с перекрашиваением ячеек на листе:
Первый макрос перекрашивает ячейки поочередно
Второй запоминает адреса всех нужных ячеек и перекрашивает разом
[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]

Автор - ZetMenChavo
Дата добавления - 23.06.2022 в 15:07
Pelena Дата: Пятница, 24.06.2022, 10:02 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4555 ±
Замечаний: ±

Excel 365 & Mac Excel
если добиться разового перекрашивания нескольких боксов

в циклле, наверное, можно. Как определить, какие боксы перекрашивать?
Файл с примером помог бы в понимании проблемы


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
если добиться разового перекрашивания нескольких боксов

в циклле, наверное, можно. Как определить, какие боксы перекрашивать?
Файл с примером помог бы в понимании проблемы

Автор - Pelena
Дата добавления - 24.06.2022 в 10:02
RAN Дата: Пятница, 24.06.2022, 11:39 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Много ячеек на листе, это диапазон. А много боксов на форме, это много боксов на формею


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеМного ячеек на листе, это диапазон. А много боксов на форме, это много боксов на формею

Автор - RAN
Дата добавления - 24.06.2022 в 11:39
ZetMenChavo Дата: Пятница, 24.06.2022, 13:35 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 165
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Pelena, циклом я как раз таки всё и организовал, но когда боксов image сетка 100 на 100, начинает медленнее высчитываться.
Касательно файла, могу позже загрузить. Там много всего, так что дописать инструкцию, и проверить не привысит ли размер файла разрешенный здесь.

RAN, тоесть для боксов нет аналога диапазона? Жаль если это так.
 
Ответить
СообщениеPelena, циклом я как раз таки всё и организовал, но когда боксов image сетка 100 на 100, начинает медленнее высчитываться.
Касательно файла, могу позже загрузить. Там много всего, так что дописать инструкцию, и проверить не привысит ли размер файла разрешенный здесь.

RAN, тоесть для боксов нет аналога диапазона? Жаль если это так.

Автор - ZetMenChavo
Дата добавления - 24.06.2022 в 13:35
ZetMenChavo Дата: Пятница, 24.06.2022, 15:40 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 165
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Pelena, подготовил файл. Оставлять лишь тот участок кода где я пытаюсь оптимизировать его, я не стал, чтоб случайно не поламать всю форму. Там практически всё взаимозависимо.
В форме в макре "Игра_Жизнь_Ver_2" после фразы "'Вычисление следующего поколения" тот участок кода из-за которого и возник мой вопрос.
В макросе "Игра_Жизнь_Ver_1" также после фразы "'Вычисление следующего поколения" то как я оптимизировал форматирование для листа.
При создания большого игрового поля в форме и запуска игры в самой форме очень сильно тормозит.
Инструкцию как чем управлять записал в самой форме.
Т.к. форма форматирует лист, создавать кнопку не стал. Запустить макрос сможете через панель "Разработчик"
К сообщению приложен файл: 7049463.xlsm (50.3 Kb)


Сообщение отредактировал ZetMenChavo - Пятница, 24.06.2022, 16:00
 
Ответить
СообщениеPelena, подготовил файл. Оставлять лишь тот участок кода где я пытаюсь оптимизировать его, я не стал, чтоб случайно не поламать всю форму. Там практически всё взаимозависимо.
В форме в макре "Игра_Жизнь_Ver_2" после фразы "'Вычисление следующего поколения" тот участок кода из-за которого и возник мой вопрос.
В макросе "Игра_Жизнь_Ver_1" также после фразы "'Вычисление следующего поколения" то как я оптимизировал форматирование для листа.
При создания большого игрового поля в форме и запуска игры в самой форме очень сильно тормозит.
Инструкцию как чем управлять записал в самой форме.
Т.к. форма форматирует лист, создавать кнопку не стал. Запустить макрос сможете через панель "Разработчик"

Автор - ZetMenChavo
Дата добавления - 24.06.2022 в 15:40
Serge_007 Дата: Пятница, 24.06.2022, 17:03 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
не привысит ли размер файла разрешенный здесь
Если превысит - можно загрузить через Администраторов


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
не привысит ли размер файла разрешенный здесь
Если превысит - можно загрузить через Администраторов

Автор - Serge_007
Дата добавления - 24.06.2022 в 17:03
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!