Страницы: 1 2 След.
RSS
CheckBoxes.Visible работает через раз
 
Мяв!
Очередная засада
Попытался удалить цикл из кода
Закомментированный код работает, а строка
Код
.CheckBoxes.Visible = True

периодически выдает ошибку. Если-бы каждый раз, то можно валить на то, что написано криво...
А так, даже не представляю, на что грешить...
В чем может быть проблема?
 
RAN, А разве можно всей коллекции задавать свойство?
По вопросам из тем форума, личку не читаю.
 
Не знаю...
Но работает, правда через раз ругается. А
Код
.CheckBoxes.Delete

даже и не ругается.
 
хм . и правда работает. А событийность на время попробуйте отключить. Бред конечно, но единственное, что приходит в голову.
По вопросам из тем форума, личку не читаю.
 
Добрый день,RAN приведите, пожалуйста, пример в файле Excel
Изменено: ProFessor - 16.04.2018 09:36:32
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
RAN, интересно, а если через For Each...?

Ой, прошу прощения не воткнулся сразу...
Видимо они находятся в разных условиях и они, эти самые условия, каким, то образом оказывают влияние... , но каким?
Изменено: AAF - 16.04.2018 09:55:24
 
AAF, так это как раз закомментированный вариант,
По вопросам из тем форума, личку не читаю.
 
БМВ, да, да, я просто не сразу понял...  :(

Может стоит просмотреть при For Each свойства объектов поочередно и сравнить их.
Вдруг там найдется ответ сей проблемы?
Изменено: AAF - 16.04.2018 10:02:45
 
Цитата
AAF написал:
просмотреть ... свойства объектов
Объекты - обычные флажки.
 
RAN, флажки, понятно. :)
Маленький файлик с этими самыми флажками и этой ошибкой был бы в самый раз, а то вдруг я что-то сделаю не так...
Нарисовал, все работает и чего искать не знаю...
Может это и есть косяк, а может есть моменты, которых я(мы) не знаю(ем), но интересный вопрос...
 
И вся проблема, что через раз ругается (у клиента, в Excel 2016)
Мне тоже не удается создать пример с ошибкой... :(
хотя в том-же файле макрос со строкой
Код
.CheckBoxes.Delete

без проблем работает уже месяца четыре.
Изменено: RAN - 16.04.2018 10:23:23
 
AutoFilter отрабатывал какие-либо заданные критерии перед данной операцией или нет?
Delete относится к объекту в целом и не важно в каком он состоянии.
Например, Target после удаления принадлежащего ему Range не превращается в Nothing и может здесь что-то похожее...
Изменено: AAF - 16.04.2018 10:29:19
 
Смысл макросов
первый скрывает флажки в строках, попадаюших под условие фильтрации, и применяет фильтр. тут без цикла никак (не показан)
второй - снимает фильтр, и отображает все флажки. он и глючит
Изменено: RAN - 16.04.2018 10:33:03
 
RAN, да хоть убей, работает и работает... Хоть бы раз ошибка случилась.
Правда офис 2013x32, но вечером посмотрю на 2016x64.
Создавал чеки внутри первой ячейки каждой строки и со свойством "перемещать, но не изменять размеры"
Изменено: AAF - 16.04.2018 10:57:18
 
Объясняю. В данном случае, если любой попытается воспроизвести ошибку, то он её не получит, т.к. метод описан правильно, создатель темы всё сделал по методичке. Дело в конкретном файле, версии Excel и конкретных взаимодействиях между процедурами внутри кода VBA или в элементе Хэ (случайная величина блуждающая в пространство-времени и вредящая в основном макросам VBA). Я часто сталкиваюсь с косяками самого VBA, не исключено ,что это системная ошибка или ошибка версионности. Но это лишь догадки. Как сказал бы врач, нужно больше данных для вынесения диагноза.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
Цитата
ProFessor написал:
(случайная величина блуждающая в пространство-времени и вредящая в основном макросам VBA)
Насколько она случайна? :)
 
RAN, а возникает ли проблема, если фильтр не установлен? Есть подозрение, что часть CheckBox-ов попадает в скрытые строки и поэтому реально не может быть отображена. Это корректно обрабатывается в цикле, но для всей коллекции в целом, вероятно, применяется иной алгоритм изменения данного свойства.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий Щербаков,
Цитата
RAN написал:
снимает фильтр, и отображает все флажки. он и глючит
PS
Впрочем я пробовал и с включенным и отработавшим условия фильтром, но ошибок не добился...
Изменено: AAF - 16.04.2018 12:07:15
 
AAF, написанное не показатель достоверности :) Судя по коду - фильтр не снимается. Да и пользователи не всегда делают именно то, что мы там себе придумали как правильное действие. Это тоже надо учитывать. Плюс разные сборки и версии офиса и ОС тоже могут влиять.
Андрей, ты бы лучше пример приложил, хоть было бы что помучить...
Изменено: Дмитрий Щербаков - 16.04.2018 12:14:42
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Кажется я нашёл возможную причину:
Эта ошибка появляется, чаще всего, если на листе нет ни одного чекбокса
Отсюда следствие:
1) Либо неверная ссылка на лист
2) Либо чекбокс типа ActiveX

Советую сделать так:
Поменять  
Код
.CheckBoxes.Visible = True
на
Код
for each
по всем объектам с отловом чекбоксов
И поочерёдно менять свойство каждого чекбокса на листе.
Да, это менее удобный вариант, но:
1) Для дебага - это добро
2) Будет понятна причина ошибки
Изменено: ProFessor - 16.04.2018 14:19:21
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
Цитата
Дмитрий Щербаков написал:
RAN , а возникает ли проблема, если фильтр не установлен? Есть подозрение, что часть CheckBox-ов попадает в скрытые строки и поэтому реально не может быть отображена. Это корректно обрабатывается в цикле, но для всей коллекции в целом, вероятно, применяется иной алгоритм изменения данного свойства.
Как я понимаю, чекбоксы привязаны к листу координатным методом.
При скрытии строк, чекбоксы всё равно будут поверх ячеек. Это отдельные объекты листа, им должно быть параллельно на скрытые строки и столбцы.
Скрытие ячеек и столбцов никак не должно влиять на их свойства
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
Цитата
ProFessor написал:
им должно быть параллельно на скрытые строки и столбцы.
Это, смотря что в свойствах прописать )
 
Сам файл очень большой и сложный.
Сейчас сделали копию листа. В ней все работает без ошибок.
Ну хоть плачь!  :cry:
 
Цитата
ProFessor написал:
Советую сделать так:
Так я сразу писал, что так все работает (и давно работает). Ошибка возникает при попытке обработать все сразу.
Может быть, стоило сформулировать вопрос так:
Чем отличается отображение флажков в цикле от отображения всех флажков сразу (одной командой).
И почему первое работает всегда, а второе через раз.
 
Удивительное это Worksheet.CheckBoxes Я даже справку по методам и пр. для коллекции не могу найти. Только отсылки к каким-то классам блаблабла. Может быть проблема именно в работе Form Controls в 2016? Но это уже гадание.
F1 творит чудеса
 
Максим Зеленский, это ж вроде https://msdn.microsoft.com/en-us/library/dzddyc7z(v=vs.85).aspx
По вопросам из тем форума, личку не читаю.
 
Вот копия листа без гранат и формул
Но, как я уже писал, в копии ошибка не воспроизводится.
кнопки скрыть пустые и отобразить все
Изменено: RAN - 25.04.2018 21:38:16
 
БМВ, я там не нашел свойства Visible,
Правда, порывшись потом, нашел - там было написано что-то типа "Gets or sets a value indicating whether the control and all its child controls are displayed", но это и всё, что может навести на мысль. Может, там и порылась собака? Хотя почти уверен, что в предыдущих версиях читал не про child, а про parent - но это ж доки Microsoft, могли и напутать
F1 творит чудеса
 
Максим Зеленский, Как не макрушник, вроде припоминаю что Form Controls для совместимости оставлено. Объекты не богатые и не столь гибкие. Может по этому и внимания к ним такого нет.

Все туда ведет.
https://msdn.microsoft.com/en-us/library/system.windows.forms.checkbox(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/system.windows.forms.checkbox_properties(v=vs.85).aspx
Изменено: БМВ - 17.04.2018 17:12:41
По вопросам из тем форума, личку не читаю.
 
Судя по всему проблема в количестве этих самых CheckBox-ов. И вероятно, кол-во допустимых элементов, которые единоразово может обработать свойство Visible зависит от конкретных показателей ПК.
У меня на 84 элементе все накрылось. Осталось прояснить это только у меня 83 допустимо или это реальное внутреннее ограничение, не зависящее от параметров ПК и т.п. Как можно проверить: берем любой CheckBox, копируем его и вставляем раз 50, может больше. Выполняем код:
Код
Sub SetCHBVisible()
    Sheets("СМЕТА").CheckBoxes.Visible = True
end sub
Если выбивамет в ошибку - значит выполняем процедуру подсчета:
Код
Sub GetCHBVisible_Limit()
On Error Resume Next
Sheets("СМЕТА").CheckBoxes.Visible = True
Do While Err.Number <> 0 And Sheets("СМЕТА").CheckBoxes.Count <> 0
    Sheets("СМЕТА").CheckBoxes(Sheets("СМЕТА").CheckBoxes.Count).Delete
    Err.Clear
    Sheets("СМЕТА").CheckBoxes.Visible = True
    If Err.Number = 0 Then
        Debug.Print Sheets("СМЕТА").CheckBoxes.Count
    End If
    DoEvents
Loop
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1 2 След.
Наверх