Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как определить открыта форма или отчет / 25 сообщений из 34, страница 1 из 2
08.08.2019, 07:11
    #39846729
quickstar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить открыта форма или отчет
Добрый день!
Как по средствам VBA определить открыта форма или отчет?
...
Рейтинг: 0 / 0
08.08.2019, 07:32
    #39846738
ROI
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
08.08.2019, 07:32
    #39846739
ldfanate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить открыта форма или отчет
дочернюю коллекцию Windows перебрать-опросить ?
...
Рейтинг: 0 / 0
08.08.2019, 07:45
    #39846742
ROI
ROI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить открыта форма или отчет
quickstar,

Да и к стати, если форма вложенная, то там сложнее, но тоже возможно.
...
Рейтинг: 0 / 0
08.08.2019, 07:48
    #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
08.08.2019, 07:50
    #39846746
ROI
ROI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить открыта форма или отчет
quickstarROI, а что мы получим при вызове функции?
Запустил и ничего не получил.
Функция принимает строковое значение "Имя формы"
возвращает True если форма открыта.
...
Рейтинг: 0 / 0
08.08.2019, 08:26
    #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
08.08.2019, 08:31
    #39846755
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить открыта форма или отчет
4d_monster,
а по Спецификации Количество уровней вложенности форм или отчетов=7
...
Рейтинг: 0 / 0
08.08.2019, 08:36
    #39846757
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить открыта форма или отчет
причем в некий момент времени
- некие формы открыты в режиме формы
- некие в режиме конструктора или макета
- - - может и еще каком виде
...
Рейтинг: 0 / 0
08.08.2019, 09:02
    #39846767
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить открыта форма или отчет
забыла, что есть еще и экземпляры форм, в том числе с подчиненными подформами
...
Рейтинг: 0 / 0
08.08.2019, 10:05
    #39846795
Tarasios
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить открыта форма или отчет
quickstar,
я проверяю так:
If CurrentProject.AllForms("ИмяФормы").IsLoaded Then
если открыта - тут дальнейшее действие
Else
если закрыта - ... что там вам нужно
End if
...
Рейтинг: 0 / 0
08.08.2019, 10:06
    #39846796
Tarasios
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить открыта форма или отчет
quickstar,
я проверяю так:
If CurrentProject.AllForms("ИмяФормы").IsLoaded Then
если открыта - тут дальнейшее действие
Else
если закрыта - ... что там вам нужно
End if
...
Рейтинг: 0 / 0
08.08.2019, 10:13
    #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
08.08.2019, 10:54
    #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
08.08.2019, 11:04
    #39846828
ROI
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
08.08.2019, 11:27
    #39846852
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить открыта форма или отчет
ROI,

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

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

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

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

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

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

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

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

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


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