|
|
|
| есть строка:
Forms!Main!Child1!Field1.RowSource = "List_01"
вызывается в двух местах:
1. по нажатию кнопки, которая обновляет Main-форму и нужные в ней субформы
(все работает прекрасно)
2. на событии Current в Child0, который отвечает за перелистывание данных в других субформах.
Здесь все работает прекрасно, НО при открытии формы, когда Current активируется самый первый раз, на первой строке - выдается ошибка:
"You entered an expression that has an invalid reference to the property Form/Report"
и предлагается ее дебагать или игнорировать.
при игнорировании ("End") все начинает нормально работать, как и должно было быть.
Еще один признак: если во время дебаганья эту строку заремить, а потом опять включить - все опять работает хорошо, спотыкается только на открытии формы.
Как ее унять? | |
|
| |
|
|
|
| Child1 - это подчиненная форма?
если да, то попробуйте
Forms!Main!Child1.form!Field1.RowSource = "List_01"
|
кроме того при загрузке на current child0 может быть еще не загружена подчиненная child1 | |
|
| |
|
|
|
| Дело в том, что при открытии формы событие Current (и, естественно, Open-Load) субформ происходят по очереди и до события Current главной формы. В этот момент Child1 для Child0 еще недоступна.
Вам нужно проигнорировать эту ошибку, а на Load главной формы вызвать процедуру Click кнопки. | |
|
| |
|
|
|
| Osmor:
я пытался и так и так (хотя и не понимаю, в чем разница, ведь работает и без этого дополнительного указания .Form). ругается абсолютно одинаково.
Анатолий:
а можно ли сделать так, чтобы чайлды отслеживали друг друга, кто уже открыт а кто нет и не пытались заставить работать того, кто еще не открылся?
> Вам нужно проигнорировать эту ошибку
а как это делается? нажимать каждый раз End - мне не нравится.
Нашел топорный выход, который работает:
Dim ChildOpen
If ChildOpen = 0 Then
ChildOpen = 1
Else
Forms!Main!Child1!Field1.RowSource = "List_01"
End If
никаких сообщений об ошибке больше не происходит, все работает.
Но не является ли такой способ диким извратом? | |
|
| |
|
|
|
|
| ...в чем разница
предложенный мной способ записи более полный, указывающий всю иерархию объектов к источнику данных | |
|
| |
|
|
|
| Bellerofont :
спасибо. все получилось. гораздо проще моего ужаса.
вопрос. если у меня в процедуре много сомнительных моментов - эта строчка подействует:
1. только на первую следующую строчку?
2. или на первую следующую за ней ошибку, если она встретится за ней?
3. или на все, следующие за ней?
если третье - как выключить этот режим?
Osmor:
т.е. если я буду писать халявно - то однажды получу какие-нибудь глюки, например, вставив в чайлда не субформу а что-то другое, а если буду прописывать так как вы - их не будет, потому что будет явно прописано, как именно воспринимать сурс обжект чайлда? | |
|
| |
|
|
|
| ну не могу сказать что обязательно будут проблемы, просто иерархия такова
Forms!Main.Controls("Child1").Form!Controls("Field1").RowSource
1.Коллекция Forms
2. В ней Форма с именем Main
3. в этой форме коллекция контролов и в этой коллекции контрол (подчиненная форма) Child1
4. У этого контрола есть свойство Form содержащее ссылку на объект формы открытой в этом контроле
5. В объекте Form есть коллекция контролов и в этой коллекции контрол Field1
6. у контрола Field1 свойство RowSource
Но существуют свойства по умолчанию, т.е. если к кобъекту обратиться явно неуказывая свойства, то VBA сам пытается понять, что от него хотят толи сам объект, толи его свойство по умолчанию.
Например
dim obj as control
dim S as string
set obj = Me.Поле
s = Me.Поле
|
obj - будет содержать объект контрол
s - значение свойства Value (которое является свойством по умолчанию)
У Формы свойством по умолчанию является свойство Controls содержащее коллекцию Controls, у контрола Подчиненная формасвойством по умолчанию (видимо) является свойство Form, но я не знаю когда это появилось, наскоклько я помню в MSA 97 требовалось для обращения к подчиненной форме указывая свойство Form, возможно в более поздних версиях это не так, не поверял, поскольку всегда пишу Form. | |
|
| |
|
|
|
| >эта строчка подействует..
Laser, если бы задали такой вопрос на SQL.ru, то сразу нарвались бы на большую Ф1 с соответствующими комментариями.
Вы для начала попробуйте почитать HELP про "On Error Statement", а если чего-то не поймете, тогда - сюда. | |
|
| |