Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Надпись
 
 автор: Гоблин   (17.05.2012 в 21:36)   личное сообщение
 
 

Привет всем. Народ, подскажите плиз такую штуку. Есть форма, на форме надпись. "1". Можно ли эту надпись изменить без конструктора? Жму кнопку, открываю форму запроса, меняю и при закрытии формы выполняю код
Forms!Форма1!Надпись1.Caption = Me.Поле0

Надпись на форме1 меняется.
Но при повторном открытии этой формы снова вылазит старая надпись та, что прописана в свойствах конструктора. Можно ли как-то избежать фазы конструктора?
Одно время все такие надписи хранил в отдельной таблице, при открытии формы пробегая рекордсетом назначал данные надписям и прочему. Можно ли без рекордсета из таблиц значений надписей как-то? что бы новые данные в надписи сохранились.

  Ответить  
 
 автор: Дядя Федор   (18.05.2012 в 07:56)   личное сообщение
 
 

На кнопку закрытия формы повесить acSaveYes:
docmd.Close acForm,me.Name,acSaveYes

  Ответить  
 
 автор: Гоблин   (18.05.2012 в 09:56)   личное сообщение
 
 

Что-то не то. Прервано выполнение макрокоманды Close
Пробовал всякое. мe.name - имя формы определяет правильно. ругается на acform
без него форму закрывает, но ничего не сохраняет.

  Ответить  
 
 автор: Дядя Федор   (18.05.2012 в 10:47)   личное сообщение
 
 

Надо не на событие Close, а на кнопку(сделать кнопку и на нее повесить)
Щас проверю сам. Несколько минут...

Да. Не сохраняет.

Насколько я понимаю, капшин меняется из другой формы?
Подчиненная?
Тогда отцепить и открыть в режиме конструктора

docmd.OpenForm "Форма1",acDesign,,,,acHidden
сделать изменения и закрыть

ПС
проверил
DoCmd.OpenForm "Frm1", acDesign, , , , acHidden
Forms("Frm1").Caption = "********"
DoCmd.Close acForm, "Frm1", acSaveYes
работает

  Ответить  
 
 автор: Гоблин   (18.05.2012 в 11:30)   личное сообщение
11 Кб.
 
 

Форма не подчиненная. Изменения с другой формы в процессе работы. А при закрытии формы 1 необходимо все эти изменения сохранить.
Ща попробую с таким кодом. Но, если будет переключаться каждый раз при закрытии формы в режим конструктора, то это ни есть гуд наверное. Неужто придется таблицу ставить и при открытии формы из этой таблицы вгонять caption.

  Ответить  
 
 автор: Дядя Федор   (18.05.2012 в 11:33)   личное сообщение
 
 

Тогда мой код 100% прокатит

Но, если будет переключаться каждый раз при закрытии формы в режим конструктора, то это ни есть гуд наверное

Почему? Что смущает?
А при закрытии формы 1 необходимо все эти изменения сохранить.


Наверное, не так.
При закрытии вызывающей формы сохранить в форме1.
Саму себя форма не откроет.

  Ответить  
 
 автор: Дядя Федор   (18.05.2012 в 11:37)   личное сообщение
 
 


Неужто придется таблицу ставить и при открытии формы из этой таблицы вгонять caption.



Еще вариант: формировать капшины в запросе формы, если есть такая воозможность (т.е. если в источнике данных (запросе) можно подцепить правила формирования капшинов.

И еще. Если форма не подч.
Forms!Форма1!Надпись1.Caption = Me.Поле0 - синтаксис не верный.

  Ответить  
 
 автор: Дядя Федор   (18.05.2012 в 11:48)   личное сообщение
 
 

Еще вариант открывать форму1 через класс
Dim f As Form
Set f = New Form_Форма1
DoCmd.OpenForm f.name
Тогда можно мой код спокойно ставить

  Ответить  
 
 автор: Гоблин   (18.05.2012 в 17:00)   личное сообщение
14 Кб.
 
 

Или я что-то не понял или одно из двух. Третьего точно не дано. И что там с синтаксисом?
Вот пример.
Дана форма 1. На ней надпись 33. Нажимаем на нее 2 раза. Выходит форма2 с полем. Вводим в поле нечто иное и закрываем эту форму. На форме 1 вместо 33 видим то, что вводили в форме 2. Может синтаксис не верный, но работает на ура. Далее надо закрыть форму 1 и открыв в следующий раз в надписи должно быть не 33, а то самое нечто иное, с чем закрывали эту форму. Вот в этом загвоздка. Тут хоть какую кнопку ставь, один хрен ругается на acform,...
Через класс тоже ничего не получается.

  Ответить  
 
 автор: Дядя Федор   (21.05.2012 в 08:13)   личное сообщение
15 Кб.
 
 

в форме2

Private Sub Form_Close()
Forms!Форма1!Надпись1.Caption = Me.Поле0
DoCmd.OpenForm "Форма1", acDesign, , , acFormEdit, acHidden
Forms("Форма1").Надпись1.Caption = Поле0
DoCmd.Close acForm, "Форма1", acSaveYes
DoCmd.OpenForm "Форма1"
End Sub

Недостаток: если форма1 тяжелая - будет заметна перезагрузка

  Ответить  
 
 автор: Дядя Федор   (21.05.2012 в 08:20)   личное сообщение
16 Кб.
 
 

Вариант 2 через глоб. переменную (описана в module1)

  Ответить  
 
 автор: Гоблин   (21.05.2012 в 08:56)   личное сообщение
 
 

Спасибо, дядя Федор. Выходит, что простого способа не существует. Остается скрывать форму 1, при запуске формы 2, что бы перезагрузка не сильно в глаза бросалась.
А все из-за пределов измерения. В рабочей форме таких надписей масса. Но это респект.

  Ответить  
 
 автор: Дядя Федор   (21.05.2012 в 08:58)   личное сообщение
 
 

//Остается скрывать форму 1, при запуске формы 2, что бы перезагрузка не сильно в глаза бросалась. //
Хороший вариант.

Еще подумай о запросе. (Может можно там формировать капшины, если они зависят от связанных данных)

  Ответить  
 
 автор: Гоблин   (21.05.2012 в 12:55)   личное сообщение
 
 

Маловероятно. Есть формы, на которых полтора десятка различных пунктов. На каждый пункт по 3 параметра, да еще результат. Каждый параметр надо ограничить по пунктам Min и Max, при выходе за пределы которых меняется цвет шрифта и т.д. (условное форматирование) Пределы надо иметь возможность менять. Таблу делать неохота, хотя... В общем решил выпендриться таким образом. А запросом - весьма проблематично. Если только запрос на рекордсет и считывать параметры из таблицы, ну и т.д....
Хочу опробовать текущий вариант.

  Ответить  
 
 автор: Дядя Федор   (21.05.2012 в 12:59)   личное сообщение
 
 

удачи!!!

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList