Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2010, 11:30   #1
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию Проблема с адресацией к элементам формы (696 элементов)

Здравствуйте, уважаемые профессионалы!
Помогите советом...
При попытках адресации в рабочем режиме к элементам формы из модуля общего назначения - ошибка Excel, из модуля ComboBox_Change - ошибка сначала Дебугера и за ним - Эксела. Детали - во вложении
Явно проблема в количестве Controls, может кто уже сталкивался?
С уважением и надеждой, Алексей
Вложения
Тип файла: rar ExcelErr.rar (62.7 Кб, 15 просмотров)
alvazor вне форума Ответить с цитированием
Старый 12.02.2010, 12:54   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Возникает ли ошибка при работе программы в Excel 2007?

Скиньте файл excel мне на почту (если нет возможности выложить его на форуме), и опишите последовательность действий (нажатий кнопок, и т.п.), приводящую к появлению этой ошибки.
Адрес почты:

Посмотрим, что можно сделать.
EducatedFool вне форума Ответить с цитированием
Старый 12.02.2010, 13:52   #3
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

Спасибо, EducatedFool, бросил прогу Вам на эл. адрес
alvazor вне форума Ответить с цитированием
Старый 15.02.2010, 09:29   #4
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

Доброе утро всем, и особо - EducatedFool
Все мы Fools, но не все образованные -)

Может все-таки кто-то тоже сталкивался с этим вопросом? Мне ничего не удается найти в продолжение темы по найденной ссылке

http://www.pcreview.co.uk/forums/thread-3429524.php

Ниже - ее перевод

Я наконец констатирую! (по вопросу, изложенному ниже)

Это, кажется, продолжение 177842 (см. КБ), проблемы, с которой я уже столкнулся несколько лет назад.
В последней версии моего приложения я добавил прямую ссылку на некоторые элементы управления (userform.controls.name) вместо использования userform.controls.item (позиция) формы
Мне удалось обеспечить совместимость для Excel 97

но...

1) На сей раз предел не 411 элементов (у меня в настоящее время их 844 в одной форме) Самый низкий tabindex элемента, который дал мне сбой - #784. Элемент
#620 был адресован на тот же самый путь, но не дал сбоя
2) Ошибка не возникает при извлечении с прямой ссылкой но, кажется, возникает на установке первой позиции listindex (для comboboxes), даже если эта позиция использует ссылку controls.item !!! Мне кажется, что, поскольку в Вашем коде где-нибудь есть строка с прямой ссылкой на этот вид элемента, у Вас проблема на первой позиции listindex (вот почему мне требуется так много времени, чтобы додуматься)
Фактически, у меня была проблема также и с checkbox ... на сей раз, ошибка шла из строки, использующей прямую ссылку (это была большая помощь для меня, чтобы понять)
3) Последнее, но не меньшее: первая проблема (177842) была ограничена Excel 97 и 2000. Эти аффекты - всех версий Excel (которые я знаю): Excel 2002, 2003, 2007 в режиме совместимости....


Исходный вопрос

Я имею текущую проблему в приложении Excel Vba.

Для 3 (из больше чем сотни) comboboxes, установка listindex прекращает работать.
Это не последние три элемента в моей форме (не даже последние три comboboxes).
Точнее, это работает в первый раз, после того, как я сохраняю модификацию в VBA, но не работает больше, если я сохраняю файл, выхожу из Excel и запускаюсь повторно.
Все работает отлично, если отладчик включен (то есть когда я вхожу в редактор VB и ввожу пароль, который защищает мой проект).

Сообщение об ошибке:-2147417848 (80010108) Метод ListIndex для объекта IMDcCombo has failed) и сопровождается крушением Excel...

Если я комментирую 3 строки введенного кода, прогоны программы идут гладко, Comboboxes устанавливаются (с Методом Additem), и я могу выбрать вручную каждое значение.

Проблема происходит с XL XP (Windows XP Pro), XL 2003 (Windows NT), XL 2007 (Vista) в режиме совместимости.
Проблема, кажется, не происходит с новым XL формата 2007, но если я преобразовываю файл обратно в XL 2003, проблема вновь появляется!

Это, кажется, не связано с дисквалифицированными ссылками Office (как описано в MS Бюллетене Q319832: я не использую в своей программе другие приложения Office, ошибка проявляется после выхода из Excel (он терпит крах), это происходит без ссылки на Библиотеку объекта Microsoft Office 11),

Я провел много времени, чтобы попытаться найти (причину), но без успеха... Если у кого - то будет идея, то я буду пробовать!

Спасибо

М.б. у Microsoft есть какие-нить пояснения или заплатки?
С уважением
alvazor вне форума Ответить с цитированием
Старый 16.02.2010, 15:36   #5
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

Здравствуйте, уважаемые коллеги!
Придется продолжить в условиях всеобщего молчания
Может кого заинтересует, что говорит Microsoft?

Комментарии в базе данных Microsoft
http://support.microsoft.com/kb/177842/

Article ID: 177842 - Last Review: January 22, 2007 - Revision: 4.4
(This article was previously published under Q177842)

OFF97: Invalid Page Fault with More Than 411 Controls in UserForm
Когда у UserForm есть более 411 элементов и любые элементы, добавленные после 411-го адресуются непосредственно по имени в Microsoft Visual Basic for Applications макросе или процедура (например, UserForm1. Label412), Вы получаете одно из следующих сообщений об ошибке. (указаны варианты сообщений только для Excel Win95 и NT)

Это происходит в случаях:
* В UserForm созданы более 411 элементов любого типа
* Элементы, созданные после 411-ого, адресуются непосредственно по имени (например, UserForm1. Label412) в макросе Visual Basic или процедуре.

Элементы вне 411-ого должны адресоваться, как члены коллекции Controls вместо адресации непосредственно по имени. Вы можете использовать один из следующих методов для решения проблемы.

Метод 1: Используя конструкции For Each...Next
Обратитесь к требуемому элементу, используя коллекцию Controls и конструкции For Each...Next. Следующий пример подпрограммы демонстрирует этот метод:

Sub Change_Caption()
For each myControl in UserForm1.Controls
x = x + 1
myControl.Caption = x
Next
End Sub


Метод 2: Используя Метод Item
Используйте метод Item с номером индекса, как показано в следующих примерах:

UserForm1.Controls.Item(411).Captio n = "joe"

UserForm1.Controls(411).Caption = "joe"

UserForm1.Controls("Label411").Capt ion = "joe"

Примечание: индекс начинается с 0

Microsoft подтвердила, что эта проблема имеется в упомянутых выше продуктах (Win 95, NT). Мы исследуем эту проблему и разместим новую информацию здесь, в Microsoft Knowledge Base, как только она появится.

Удаление элемента с номером TabIndex меньшим, чем 411 позволяют адресацию по имени к следующему элементу (выше предыдущих 410) без ошибки, но тогда ошибка происходит на элементе, который становится 411-ым после удаления. Изменение TabIndex или TabOrder элемента не изменяет поведение; поведение, кажется, полностью определено порядком, в котором элементы были созданы.

С использованием этих рекомендаций для всех Controls, кроме OptionButton, от сбоев удалось избавиться. В OptionButton даже с номерами меньшими 411 (например, с номером 295), Value категорически не хочет устанавливаться в True, хотя текущее значение Value читается, устанавливаются все прочие свойства, в т.ч. Value=False.
Пробовал все без исключения рекомендованные варианты! Выскакивает сообщение vb с тем же номером, но с иным объектом (см. ниже) и сразу - крах Excel. В общем, приехал…

Run-time error ‘-2147417848 (80010108)’:
Method ‘Value’ of object ‘IMdcOptionButton’ failed
alvazor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с многоуровневой адресацией grook Общие вопросы C/C++ 3 18.12.2010 17:15
Visual C++.Доступ к элементам главной формы almareta Помощь студентам 2 13.02.2010 14:26
Вопросы по GetOpenFilename и элементам формы Excel!!! Klim Bassenger Microsoft Office Excel 13 28.01.2010 23:22
Элемент формы <input type="image"... не находится в коллекции элементов формы? euroflock Работа с сетью в Delphi 1 01.09.2009 16:17
Динамическое обращение к элементам формы. Dennis Microsoft Office Excel 2 17.03.2009 12:55