|
|
|
| Хотел сделать чтобы значения в таблице пересчитывались в цикле, а VBA выдает ошибку на строке SET ...., что ему может не нравиться?
Private Sub Form_Load()
Dim rs As ADODB.Recordset, v As Variant
Set rs = CurrentDb.OpenRecordset("ОсновнДанные")
Do Until rs.EOF
rs.MoveFirst
v = Abs(Me!Поле28)
Me!ууууу = v
rs.Update
rs.MoveNext
Loop
Me.FilterOn = True
Me.Filter = "[ОсновнДанные]![НаимПокупателя]=[Forms]![Форма1]![ПолеСоСпискомЗаказчики]"
End Sub
|
| |
|
| |
|
|
|
| Это библиотека ADO
Dim rs As ADODB.Recordset
|
Это библиотека DAO
Set rs = CurrentDb.OpenRecordset
|
Выберите одну библиотеку и работайте ее методами | |
|
| |
|
|
|
| Dim rs As Recordset
а если я так пишу, туже самую ошибку выдает | |
|
| |
|
|
|
| Может я слышу звон, не знаяя где он, конечно... Я просто с Recordset-ами не разобралась, сделала цикл так:
For intI = 1 To DCount("*", "Журнал")
DoCmd.GoToRecord acDataForm, "Журнал", acGoTo, intI
' все необходимые действия
Next intI
|
| |
|
| |
|
|
|
| изменил так:
For intI = 1 To DCount("*", "ОсновнДанные ")
DoCmd.GoToRecord acDataForm, "ОсновнДанные ", acGoTo, intI
v = Abs(Me!Поле28)
Me!ууууу = v
Next intI
но ругается на это: DoCmd.GoToRecord acDataForm, "ОсновнДанные ", acGoTo, intI
говорит что объект ОсновнДанные не открыт | |
|
| |
|
|
|
| Ну тогда напрашивается решение перед началом цикла открыть "ОсновнДанные" с помощью DoCmd, наверное как-то так. А обязательно это делать в загрузке формы? может взять какое-нить событие, которое позже происходит? Не совсем понятно, что вы хотите сделать и в какой момент, так как Ме!Поле28 и Ме!ууууу не несут никакой информативности. | |
|
| |
|
|
|
| Форма должна быть открыта до начала цикла в видимом или не видимом режиме......а она у вас еще не открыта полностью вот и возникает проблемка - все потому что вы не то событие обрабатываете
создайте макрос (открыть форму в видимом (или невидимом) режиме) после преобразуйте его в VBA и посмотрите как Акс сам пишет команду открытия формы
v = Abs(Me!Поле28)
Me!ууууу = v
что это? почему не вот так
Me!ууууу = Abs(Me!Поле28)
более того если поле Me!ууууу вычисляемое зачем вся эта конструкция каждый раз при открытии формы не проще это поле высчитывать просто на форме
вызывает сомнение вот эта строчка
Me.Filter = "[ОсновнДанные]![НаимПокупателя]=[Forms]![Форма1]![ПолеСоСпискомЗаказчики]"
не проверял но вроде так работать не будет
теперь по самому первому сообщению
пытаетесь получить доступ к рекордсету, а когда получаете его (когда все ошибки исправите) устанавливаетесь на первую запись а далее почему то обращаетесь не к полям рекордсета а к полям формы - о как далее переходите на другую запись рекордсета и опять обращаетесь к полям формы и так пока цикл не закончится - странно все это
Теперь - что делать
видимо открытие формы "ОсновнДанные" происходит после какого то события на форме "Форма1" вот вам и нужное событие которое надо обрабатывать (а не мучаться во время загрузки формы)
если изменение данных будет происходить через рекордсет то доберитесь до таблиц до открытия формы "ОсновнДанные", а уже после открывайте эту форму
если изменение будет через форму то откройте ее сначала в невидимом режиме, пробегитесь по записям, измените данные, после чего установите фильтр, а уж потом отобразите форму иначе будут не приятные глазу мелькания | |
|
| |
|
|
|
|
| http://hiprog.com/index.php?option=com_content&task=blogcategory&id=119&Itemid=159
Вопрос 2
Там подробно расписано про эту ошибку | |
|
| |