У меня возникают проблемы при открытии формы, в доступе, заставляя ее перейти на максимальный размер экрана - PullRequest
0 голосов
/ 22 июня 2019

У меня есть доступ к БД с 3 пользователями.Я создал весь код на своей рабочей станции, и каждый из пользователей открывает свой внешний интерфейс на своей рабочей станции (код поддерживается на центральном сервере).

Я пробовал в коде несколько разных способов открыть форму по умолчанию при открытии Access на их рабочей станции.Я использовал процедуры form_load и form_open с doCmd.Maximize.

Вот проблема: когда я открываю один из внешних интерфейсов на моей рабочей станции, форма разворачивается, поэтому я подозреваю, что это не проблема кода.Когда я открываю Access на рабочих станциях, формы по умолчанию открываются только в том размере, который я создал, скажем, 5 "x 5".Однако, если я затем переведу форму в режим «дизайн», а затем в режим «форма», формы будут занимать весь экран, то есть они максимизируются.Проблема возникает только тогда, когда Access запускается на своих рабочих станциях и загружается форма по умолчанию.

Может кто-нибудь указать мне где-нибудь настройку или вариант кода VBA, который максимизирует форму при ее загрузке?Все 3 рабочие станции работают под управлением Windows 10.

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Вам необходимо развернуть само окно доступа, а не только форму. Скопируйте это в какой-нибудь пульсирующий модуль:

' Put at the top of the module:
Declare Function GetActiveWindow Lib "user32" () As Long
Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Boolean
Global Const SW_MAXIMIZE = 3

' Function to get window handle of Access application:
Function GetAccesshWnd()
    Dim hWnd As Long, hWndAccess As Long
    ' Get the handle to the currently active window.
    hWnd = GetActiveWindow()
    hWndAccess = hWnd
    ' Find the top window without a parent window.
    While hWnd <> 0
        hWndAccess = hWnd
        hWnd = GetParent(hWnd)
    Wend
    GetAccesshWnd = hWndAccess
End Function

и это в событии form_load:

ShowWindow GetAccesshWnd(), SW_MAXIMIZE
0 голосов
/ 26 июня 2019

Даже я обычно избегаю DoCmd, максимизация окна приложения доступа - это одна строка с:

Apllication.DoCmd.RunCommand acCmdAppMaximize 'Maximize the MS Access Application

Или с ShowWindow (x86 и x64) и Application.hWndAccessApp:

#If VBA7 Then
    Private Declare PtrSafe Function ShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As LongPtr, ByVal nCmdShow As Long) As Long
#Else
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#End If
Private Const SW_MAXIMIZE = 3

Public Sub MaximizeAccessApp(Optional ByRef app As Access.Application)
  If app Is Nothing Then
    Set app = Application
  End If
  ShowWindow app.hWndAccessApp, SW_MAXIMIZE
End Sub

Это можно использовать без аргументов для текущей прикладной программы Access или передать другой экземпляр Access, чтобы развернуть его окно.

Private Sub TestMaximizeAccessApp()
  Dim app As Object
  Set app = CreateObject("Access.Application")
  app.OpenCurrentDatabase ("path/to/db")

  MaximizeAccessApp app
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...