Ошибка компиляции при объявлении функции vba ms access - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь реализовать скрипт, который отключил бы кнопку «Закрыть» окна доступа MS.

Однако при попытке объявить функции я получаю ошибку компиляции:

Option Compare Database
Option Explicit
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal wRevert As Long) As Long
Private Declare Function EnableMenuItem Lib "user32" (ByVal hMenu As Long, ByVal wIDEnableItem As Long, ByVal wEnable As Long) As Long

Public Sub AccessCloseButtonEnabled(pfEnabled As Boolean)
  ' Comments: Control the Access close button.
  '           Disabling it forces the user to exit within the application
  ' Params  : pfEnabled       TRUE enables the close button, FALSE disabled it
  ' Owner   : Copyright (c) FMS, Inc.
  ' Source  : Total Visual SourceBook
  ' Usage   : Permission granted to subscribers of the FMS Newsletter

  On Error Resume Next

  Const clngMF_ByCommand As Long = &H0&
  Const clngMF_Grayed As Long = &H1&
  Const clngSC_Close As Long = &HF060&

  Dim lngWindow As Long
  Dim lngMenu As Long
  Dim lngFlags As Long

  lngWindow = Application.hWndAccessApp
  lngMenu = GetSystemMenu(lngWindow, 0)
  If pfEnabled Then
    lngFlags = clngMF_ByCommand And Not clngMF_Grayed
  Else
    lngFlags = clngMF_ByCommand Or clngMF_Grayed
  End If
  Call EnableMenuItem(lngMenu, clngSC_Close, lngFlags)
End Sub

My Error

Перевод: Ошибка в компиляции функций.Синтаксическая ошибка в модуле Visual Basic.Проверьте программу и перекомпилируйте ее.


Как вы думаете, что могло вызвать проблему?

1 Ответ

0 голосов
/ 23 мая 2018

Объявления не совместимы с 64-битной версией, и вы используете long вместо вместо логических значений для wRevert и возврата EnableMenuItem.Вы можете попробовать следующее (для поддержки LongPtr требуется VBA7 (Office 2010+)):

Private Declare PtrSafe Function GetSystemMenu Lib "user32" (ByVal hwnd As LongPtr, ByVal wRevert As Boolean) As LongPtr
Private Declare PtrSafe Function EnableMenuItem Lib "user32" (ByVal hMenu As LongPtr, ByVal wIDEnableItem As Long, ByVal wEnable As Long) As Boolean
...