fAccessWindow («Hide», False, False) выдает ошибку компиляции - PullRequest
0 голосов
/ 10 марта 2011

Функция fAccessWindow («Скрыть», «Ложь», «Ложь») для скрытия фактического окна доступа дает ошибку компиляции с номером 7960

Я пробовал без пробела "fAccessWindow (" Hide ", False, False)", но без разницы. У меня также есть код ниже в модуле, который также можно найти здесь . Я использую Access 2010 с самым низким уровнем безопасности макросов. Также у меня операционная система x64.

Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
Dim dwReturn As Long

Const SW_HIDE = 0
Const SW_SHOWNORMAL = 1
Const SW_SHOWMINIMIZED = 2
Const SW_SHOWMAXIMIZED = 3

Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, _
     ByVal nCmdShow As Long) As Long

Public Function fAccessWindow(Optional Procedure As String, Optional SwitchStatus As Boolean, Optional StatusCheck As Boolean) As Boolean
If Procedure = "Hide" Then
    dwReturn = ShowWindow(Application.hWndAccessApp, SW_HIDE)
End If
If Procedure = "Show" Then
    dwReturn = ShowWindow(Application.hWndAccessApp, SW_SHOWMAXIMIZED)
End If
If Procedure = "Minimize" Then
    dwReturn = ShowWindow(Application.hWndAccessApp, SW_SHOWMINIMIZED)
End If
If SwitchStatus = True Then
    If IsWindowVisible(hWndAccessApp) = 1 Then
        dwReturn = ShowWindow(Application.hWndAccessApp, SW_HIDE)
    Else
        dwReturn = ShowWindow(Application.hWndAccessApp, SW_SHOWMAXIMIZED)
    End If
End If
If StatusCheck = True Then
    If IsWindowVisible(hWndAccessApp) = 0 Then
        fAccessWindow = False
    End If
    If IsWindowVisible(hWndAccessApp) = 1 Then
        fAccessWindow = True
    End If
End If
End Function

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

Вам нужно обратиться к этой статье от MS на 64-битном VBA и использовать не только PtrSafe, но и новый тип данных LongLong, и вам нужно будет использовать условную компиляцию:

  #if Win64 then
      Private Declare PtrSafe Function IsWindowVisible Lib "user32" (ByVal hwnd As LongLong) As LongLong
  #else
      Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
  #end if

Я не программирую для 64-битного доступа, поэтому не работал с этим.Мне неясно, каково взаимодействие между константами компиляции Win64 и VBA7, и процитированная статья не совсем ясно об этом.Мне не ясно, если вы должны сделать это:

  #If Win64 And VBA7 Then
      ...
  #Else
      ...
  #End If

или это должно быть:

  #If Win64 Then
      #If VBA7 Then
         ...
      #Else
         ...
      #End If
  #Else
      #If VBA7 Then
         ...
      #Else
         ...
      #End If
  #End If
0 голосов
/ 10 марта 2011

Я добавил опцию PtrSafe для функций ниже, и она начала работать в x64, но теперь выдает ту же ошибку на машинах x86.

Private Declare PtrSafe Function IsWindowVisible Lib "user32"_
    (ByVal hwnd As Long) As Long

Private Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hwnd As Long, _
    ByVal nCmdShow As Long) As Long
...