powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как определить открыта форма или отчет
34 сообщений из 34, показаны все 2 страниц
Как определить открыта форма или отчет
    #39846729
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Как по средствам VBA определить открыта форма или отчет?
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846738
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstarДобрый день!
Как по средствам VBA определить открыта форма или отчет?
можно так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Function roi_IsFormOpen(strName As String) As Boolean
    Dim frm As Form

    For Each frm In Forms
        If frm.Name = strName Then
            roi_IsFormOpen = True
            Exit Function
        End If
    Next
    roi_IsFormOpen = False
End Function
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846739
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дочернюю коллекцию Windows перебрать-опросить ?
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846742
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar,

Да и к стати, если форма вложенная, то там сложнее, но тоже возможно.
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846744
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROI, а что мы получим при вызове функции?
Запустил и ничего не получил.

ROIquickstarДобрый день!
Как по средствам VBA определить открыта форма или отчет?
можно так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Function roi_IsFormOpen(strName As String) As Boolean
    Dim frm As Form

    For Each frm In Forms
        If frm.Name = strName Then
            roi_IsFormOpen = True
            Exit Function
        End If
    Next
    roi_IsFormOpen = False
End Function
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846746
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstarROI, а что мы получим при вызове функции?
Запустил и ничего не получил.
Функция принимает строковое значение "Имя формы"
возвращает True если форма открыта.
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846753
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В какой-то из книг есть такой вариант, он тоже не отрабатывает для подчинённой формы.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Function IsOpen(strFormName As String) As Boolean
    Const conObjStateClosed = 0
    Const conDesignView = 0

    If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
        If Forms(strFormName).CurrentView <> conDesignView Then
            IsOpen = True
        End If
    End If
    
End Function
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846755
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monster,
а по Спецификации Количество уровней вложенности форм или отчетов=7
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846757
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
причем в некий момент времени
- некие формы открыты в режиме формы
- некие в режиме конструктора или макета
- - - может и еще каком виде
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846767
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыла, что есть еще и экземпляры форм, в том числе с подчиненными подформами
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846795
Фотография Tarasios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar,
я проверяю так:
If CurrentProject.AllForms("ИмяФормы").IsLoaded Then
если открыта - тут дальнейшее действие
Else
если закрыта - ... что там вам нужно
End if
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846796
Фотография Tarasios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar,
я проверяю так:
If CurrentProject.AllForms("ИмяФормы").IsLoaded Then
если открыта - тут дальнейшее действие
Else
если закрыта - ... что там вам нужно
End if
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846798
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в Борей2003 есть такая функция:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Function IsLoaded(ByVal strFormName As String) As Boolean
 ' Возвращает значения True, если форма открыта в режиме формы или таблицы.
      Dim oAccessObject As AccessObject
            Set oAccessObject = CurrentProject.AllForms(strFormName)
    If oAccessObject.IsLoaded Then
        If oAccessObject.CurrentView <> acCurViewDesign Then
            IsLoaded = True
        End If
    End If
   End Function


(пользуюсь ей очень давно-вопросов не возникало)
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846821
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начиная с Access2000, имеется свойство IsLoaded:
автор IsLoaded Property

You can use the IsLoaded property to determine if an AccessObject is currently loaded.

Setting
The IsLoaded property uses the following settings.

Setting Visual Basic Description Yes True (-1) The specified AccessObject is loaded. No False (0) The specified AccessObject is not loaded..

The IsLoaded property is available only by using Visual Basic and is read-only.


А еще есть функция SysCmd.
Например:
Код: vbnet
1.
If SysCmd(acSysCmdGetObjectState, acForm, "имя формы")  <> 0 Then.....
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846828
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar,

с вложенными:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
'************************************************************
'
'               Функция  возвращает списка открытых форм
'
'***********************************************************
Private Function roiListForms() As String
    Dim vFormName As String
    Dim vForm As Form
    Dim vControl As Control
    Dim vFormSub As Control
On Error GoTo HandleError
    
    vFormName = ""
    For Each vForm In Forms
        vFormName = vFormName & "Форма — '' " & vForm.Name & " ''" & vbCrLf
        For Each vControl In vForm.Controls
            'Если у формы есть подчиненные
            If vControl.ControlType = acSubform Then
                vFormName = vFormName & "    Контрол — '' " & vControl.Name & " ''" & vbCrLf
                vFormName = vFormName & "                Форма — '' " & vControl.Form.Name & " ''" & vbCrLf
                For Each vFormSub In vControl.Form.Controls
                    'Если у подчиненной есть подчиненные
                    If vFormSub.ControlType = acSubform Then
                        vFormName = vFormName & "                          Контрол — '' " & vFormSub.Name & " ''" & vbCrLf
                        vFormName = vFormName & "                                      Форма — '' " & vFormSub.Form.Name & " ''" & vbCrLf
                    End If
                Next
            End If
        Next
    Next
    
roiListForms = vFormName

ExitProc:
    Exit Function
HandleError:
    MsgBox vbCrLf & Err.Description & _
            vbCrLf & vbCrLf & "  Имя объекта = " & Me.Name & _
            vbCrLf & vbCrLf & "  Имя процедуры = roiListForms", _
            vbCritical, "Ошибка " & Err.Number
    Resume ExitProc
End Function
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846852
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROI,

авторFor Each vFormSub In vControl.Form.Controls
'Если у подчиненной есть подчиненные
не увидела хотя бы 2-х уровней вложения форм, из возможных 7-ми(по спецификации)
хотя сама я никогда не применяла более 1-го уровня

но ведь зачем то это ограничение ввели - значит есть такие умельцы/любители острых ощущений
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846879
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКАROI,

авторFor Each vFormSub In vControl.Form.Controls
'Если у подчиненной есть подчиненные
не увидела хотя бы 2-х уровней вложения форм, из возможных 7-ми(по спецификации)
хотя сама я никогда не применяла более 1-го уровня

но ведь зачем то это ограничение ввели - значит есть такие умельцы/любители острых ощущений
У меня есть, но больше 2-х уровней считаю перебор.
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846888
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROI,

Интересно - помогло это все ТС?
Чёт он затих!
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846923
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROI, вопрос был как определить открыта форма или отчет.
1 или 0 в функции - это понял.
А если открыта таблица, запрос?
В целом, задача писать в логе, что открыл пользователь.
Но хочу это вынести в публичную функцию, чтобы только её вызывать, а не дублировать код.
Пока не нашел решения как определять что за объект открыт.
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846932
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstarА если открыта таблица, запрос?

у пользователя не должно быть прямого доступа не к тому не к другому
quickstarВ целом, задача писать в логе, что открыл пользователь.
на событие открытия форты (отчета)
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846966
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubucha, не получается на открытие.
me.name не определяется при открытии
а Screen.ActiveForm.Name определяет во время открытия другую форму как активную.
пробовал на загрузку делать, такая же ситуация.

вопрос: как определить имя открываемой формы?
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846979
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstarROI, вопрос был как определить открыта форма или отчет.
1 или 0 в функции - это понял.
А если открыта таблица, запрос?
В целом, задача писать в логе, что открыл пользователь.
Но хочу это вынести в публичную функцию, чтобы только её вызывать, а не дублировать код.
Пока не нашел решения как определять что за объект открыт.
Дык пускай объект и передает в публичную функцию свое имя Me.Name
А уж функция пишет в таблицу это имя.
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846980
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROIquickstarROI, вопрос был как определить открыта форма или отчет.
1 или 0 в функции - это понял.
А если открыта таблица, запрос?
В целом, задача писать в логе, что открыл пользователь.
Но хочу это вынести в публичную функцию, чтобы только её вызывать, а не дублировать код.
Пока не нашел решения как определять что за объект открыт.
Дык пускай объект и передает в публичную функцию свое имя Me.Name
А уж функция пишет в таблицу это имя.
То есть в событии "открытия формы" вызываешь свою публичную функцию
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39846999
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstarme.name не определяется при открытии

да ладно...
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39847007
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar,

Что бы вести логирование чего нибудь.
Надо определиться с предметной областью приложения.
А писать кто, что открыл (пустое это).
-Добавление товара - это действие предметной области
пишишь кто добавил и что добавил (ссылка на ID_товар)
-Изменил цену - это действие предметной области
пишишь кто изменили что изменил(ссылка на ID_товар, старое значение, новое значение)
Как то так.
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39847010
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar,
Судя по вашим знаниям (далеко вам ещё до логирования)
Без сарказма.
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39847016
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubucha, а что тогда не так делаю?
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39847029
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
log_entres какого типа ждет на входе? ...что то мне кажется объект, а не стринг
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39847032
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar....В целом, задача писать в логе, что открыл пользователь...
а если так:
Код: vbnet
1.
2.
3.
Private Sub Form_Load()
CurrentDb.Execute "insert into log(объект,кто,когда) values('" & Me.Name & "','" & CurrentUser & "',#" & Format(Now, "mm\/dd\/yy hh\:mm\:ss") & "#)"
End Sub.
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39847033
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubucha,
Код: vbnet
1.
Public Function log_entries(name_form As Object)


пробовал Form, Object, не сработало
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39847037
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39847047
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar,

Покажите заголовок функции Log_entries
чё т вы там намудрили.
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39847049
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstarbubucha,
Код: vbnet
1.
Public Function log_entries(name_form As Object)



пробовал Form, Object, не сработало
дык и передовайте объект Me
A Me.Name это string
...
Рейтинг: 0 / 0
Как определить открыта форма или отчет
    #39847052
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROI, да, сработало
Код: vbnet
1.
Call log_entries(Me)



bubucha, благодарю за подробный ответ
ROI, спасибо.
sdku, спасибо за еще один вариант решения.
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как определить открыта форма или отчет
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]