|
|
|
| Подскажите плз как сделать.
Есть форма - в ней некоторое количество полей, кнопка "Печать" и подформа в табличном виде.
Нельзя ли как-то запускать программку, которая сейчас запускается нажатием на кнопку "Печать" непосредственно из подформы (сочетанием клавиш?).
Сейчас все поля на форме заполняются с клавиатуры, переход в подформу тоже клавиатурой и приходится затем отлавливать на столе мышь и топтать на кнопку ей, что не очень удобно. Нельзя ли как-то с клавиатуры и запуск программы тоже? (Или, как вариант, сочетанием клавиш - фокус на кнопку "Печать"???) | |
|
| |
|
|
|
| ежели в надписи на кнопке(или на другом элементе формы)
перед какимто символом поставить &
то этот символ станет на кнопке с подчеркиванием
что означает, что вы можете перейти на эту кнопку по "горячим следам" ,
нажав комбинацию клавиш Alt+<Тот самый подчеркнутый символ>
и следите за раскладкой
ну или более сложный путь - назначить комбинации клавиш в макросе Autokeys (кажись так) | |
|
| |
|
|
|
|
| А нельзя никак поконкретнее что-то где-то почитать насчёт макросов AutoKeys?
А то Alt+"клавиша" из подчиненной формы никак работать не хочет. Из главной - пожалуйста, а из подчинённой - нишиша.
Я уже попробовал в подчиненной форме другую кнопочку смастырить в режиме конструктора. Но, - то ли потому, что в работе она в режиме таблицы, то ли ещё почему - и это тоже не сработало... | |
|
| |
|
|
|
| Доброго всем времени суток!
С Макросами AutoKeys разобрался сам. Макрос сочетанию клавиш назначил и всё даже заработало.
Попутно возник ещё вопрос. При нажатии комбинации клавиш я хочу проверить - загружена и активна ли та форма в которой, собственно, мне и надо запустить программку (мне кажется, что так будет правильно). Проблема в том, что на строчке в коде
If IsLoaded("Имя формы") = True Then
...
| выдаёт ошибку : Compile error Sub or Function not defined (Я так понимаю: "Процедура или функция не определена").
Подскажите плз., почему "не определена"? Может быть надо какую-то библиотеку где-то подключить??? Или я что-то неправильно пишу в коде? | |
|
| |
|
|
|
| Доброго времени суток.....
вот выдрал из своей базки кусок кода - попробуй может поможет.....
(сам код тупо переписал из какой то книги)
Private Sub Кнопка533_Click()
Dim IsFormOpen As Boolean
Dim objAccess As AccessObject, dbObject As Object
Set dbObject = Application.CurrentProject
For Each objAccess In dbObject.AllForms
If objAccess.IsLoaded = True And objAccess.Name = "Основная1" Then
IsFormOpen = True
Exit For
Else
IsFormOpen = False
End If
Next objAccess
If IsFormOpen = True Then
DoCmd.Close acForm, "сроки"
Else
DoCmd.OpenForm "Стартовая форма", acNormal, "", "", , acNormal
DoCmd.Close acForm, "сроки"
End If
End Sub
суть всего этого хода в следующем - пользователь может попасть с форму "сроки" двумя путями из "стартовой формы" или из "основной1", но что бы попасть в форму "основная1" пользователю нужно ввести пароль. если пользователь попал в форму "сроки" через "стартовую форму" то форма "основная1" не открыта а если через форму "основная1" - то соответственно форма открыта (она не закрывается в момент запуска формы "сроки") Теперь если пользователь захочет выйти из формы "сроки"- то он попадет в форму "основная1" без ввода пароля, либо (если "основная 1" закрыта) в "стартовую форму" для ввода пароля. Ну а что бы это реализовать весь это бред нужно было просто проверить открыта форма "основная 1" или нет | |
|
| |
|
|
|
| snipe, спасибо за отклик.
Попобовал ваш код - по-честному не очень понравилось, что запускается цикл For... Next (усложняет - замедляет).
Вышел из положения таким вот образом (код нарыл здесь же):
If Application.CurrentObjectType = acForm And Application.CurrentObjectName = "Имя проверяемой формы " Then
|
Не совсем устраивает то, что по-факту проверяется не открыта ли форма, а только активна ли она (если форма не открыта, а просто выделена в окне БД - то
Application.CurrentObjectName = "Имя пров. формы"
| - всё-равно будет True (в Вашем, кстати, примере - та же история)), но, в общем и целом работает. В режиме пользователя же окно БД не открыто
В любом случае - за отклик - спасибо. | |
|
| |
|
|
|
| Вот ещё вопрос-ответ
====================================
Вопрос: Как проверить открыта ли форма
Совет:
Function fIsLoaded(ByVal strFormName As String) As Boolean
'функция возращает True, если форма загружена или False - если нет
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> 0 Then
If Forms(strFormName).CurrentView <> 0 Then fIsLoaded = True
End If
End Function
|
'Для MSA2000 и выше:
Function IsFormLoaded(strNameFRM As String) As Boolean
IsFormLoaded = CurrentProject.AllForms(strNameFRM).IsLoaded
End Function
|
| |
|
| |
|
|
|
| Час. Спасибо - не дали пропасть.
Ваш код (второй, т.к. MSA2000) прописал отдельным модулем.
При попытке обращения к нему выдаёт ошибку: Compile error: Expected variable or procedure, not module. (По-моему разумению - он от меня ждёт переменную или процедуру, а вовсе не модуль...).
Поясните плз. Мне что, не надо было в процедуры функцию эту писать? Тогда куда? Или я чего-то понял не так?
Заранее спасибо. | |
|
| |