必须更新此项目中的代码才能在 64 位系统上使用

Imt*_*iaz 4 ms-access vba

我们一直在 Windows 7 中使用 MS Access 数据库(Office 2007,32 位),但最近我们切换到 Office 2016,64 位。

现在每个表单都显示以下消息,这真的很烦人:

这条信息

此外,访问窗口没有最小化。我不是 VBA 专家,不知道该怎么做。我正在粘贴代码。请不要推荐 Microsoft 提供的任何文章或文档。我试图理解这些,但失败了。

使用的代码是:

Option Compare Database
Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Run Code Online (Sandbox Code Playgroud)

和:

Private Sub Form_Load()
    Application.RunCommand (acCmdAppRestore)
    SetWindowPos Application.hWndAccessApp, 0, 0, 0, 0, 0, 0
    Application.DoCmd.MoveSize 0, 0
End Sub
Run Code Online (Sandbox Code Playgroud)

以前(在 32 位办公室中)Access 窗口曾经在表单加载时隐藏,但现在在 64 位中它是敞开的。请帮我隐藏 64 位版本的 MS Access 窗口。

Com*_*her 5

未经广泛测试就升级公司软件是业余的!

但是,如果该错误消息是唯一的问题,那么您很幸运。您需要将 api 参数声明转换为 x64,这通常意味着将Long句柄和指针的所有声明更改为LongPtr并在 Declare 之后添加 PtrSafe。

对于条件编译器 ( #If VBA7 Then),Office 2010 及更高版本使用第一部分,因为它们支持 VBA7 (LongPtr),Office 2007 及更早版本使用带有旧声明的 else 部分。

#If VBA7 Then
    Private Declare PtrSafe Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As LongPtr, ByVal hWndInsertAfter As LongPtr, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
#Else
    Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
#End If
Run Code Online (Sandbox Code Playgroud)

这可以在 64 位 Office中的声明 API 函数中找到。似乎您不使用 x86 ActiveX 控件或 ODBC 连接,因为它们也会引起麻烦。

您应该阅读Compatibility Inspector 用户指南,为更多麻烦做好准备;)