Я в настоящее время создаю приложение Excel 2003, которое требует ужасно сложной формы и волнуется по поводу ограничений на количество средств управления. Это в настоящее время имеет 154 средств управления (считаемое использование Me.Controls.Count
- это должно быть точно, правильно?), но, вероятно, только приблизительно завершенная треть. Рабочий процесс действительно соответствует единственной форме, но я предполагаю, что могу разделить его, если я действительно имею к.
Я вижу доказательство в поиске Google, что VB6 (это обычно включает VBA) имеет жесткий предел 254 средств управления в форме. Однако я создал фиктивную форму с хорошо более чем 1 200 средствами управления, которые все еще загрузились и, казалось, работали просто великолепно.
Я действительно вытаскивал некоторых 'из памяти' ошибки при попытке добавить определенные комбинации средств управления, хотя, скажите 800 кнопок и 150 маркировок, ведя меня, чтобы думать, что любой предел мог бы быть затронут требованиями к памяти каждого типа управления.
У кого-либо есть информация, которая могла бы помочь гарантировать, чтобы я или, что еще более важно, другие пользователи с отличающимися средами не сталкивался ни с какими проблемами памяти с такой большой формой?
Большинство элементов управления MSForms не имеют окон (поскольку это не настоящие окна, а они рисуются непосредственно механизмом VBA Forms как графические объекты), которые по сравнению с ними являются «легковесными». Это означает, что вы можете выгрузить в пользовательскую форму больше, чем при использовании эквивалентных элементов управления, не относящихся к MSForms, в форме VB6.
Я не знаю, каков верхний предел, но это будет либо абсолютный предел, либо предел, налагаемый доступными ресурсами, поэтому, если вы можете добавить 1200, не сталкиваясь ни с одним из них, & excel ведет себя с точки зрения памяти использование у вас должно быть в порядке.
Тем не менее, такое количество элементов управления по-прежнему кажется слишком большим для одновременного представления пользователю!
Нет определенного количества элементов управления, которыми VBA ограничит вас.
Это полностью зависит от системы, в которой он запущен.
Общее практическое правило:
Кроме того, если вы все еще используете более 100 элементов управления на экране (как вы говорите), то самое время нанять нового дизайнера пользовательского интерфейса для проекта.
УДАЧИ !!
PS : Попытайтесь разделить форму, если возможно.
Я не могу представить себе программу, которая отображает 154 элемента управления на одном экране.
(MS-WORD довольно близко ;-))
ОБНОВЛЕНИЕ: Некоторые сведения для справки ниже ...
Нет жесткого ограничения на максимальное количество элементов управления в форме. Как упоминалось в другом ответе, это будет зависеть от вашего оборудования, версии Excel и операционной системы.
К сожалению, у меня слишком большой опыт создания форм VBA со слишком большим количеством элементов управления. : (
Я могу сказать, что как только вы получите более 200 элементов управления, вы можете начать замечать некоторые странные / периодические появления / ошибки.
Я обнаружил, полностью методом проб и ошибок, что элемент управления Frame , обычно используемый для хранения групп переключателей, кажется, вызывает больше проблем, чем любой другой элемент управления. Если я создаю формы без каких-либо элементов управления Frame, я могу получить больше элементов управления в этой форме, прежде чем столкнуться с проблемами.
Я обнаружил, что нет независимо от того, сколько элементов управления вам нужно, их обычно можно разделить на разные группы. Если определенная группа или категория будет содержать более дюжины элементов управления (включая метки), почти всегда лучше иметь кнопку для этой категории, которая запускает подформа. Это действительно помогает снизить сложность основной формы.
Я стараюсь держаться подальше от таких больших пользовательских форм. Я предпочитаю использовать электронную таблицу для сбора данных для таких больших вещей. Если есть зависимости, то я скрываю / показываю строки по мере необходимости или использую несколько листов. Я считаю, что это более простое решение (иногда).