【问题标题】:The code in this project must be updated for use on 64-bit systems此项目中的代码必须更新才能在 64 位系统上使用
【发布时间】:2019-06-16 14:45:02
【问题描述】:

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

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

此外,Access 窗口并未最小化。我不是 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

还有:

Private Sub Form_Load()
    Application.RunCommand (acCmdAppRestore)
    SetWindowPos Application.hWndAccessApp, 0, 0, 0, 0, 0, 0
    Application.DoCmd.MoveSize 0, 0
End Sub

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

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

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

    但是,如果该错误消息是唯一的问题,那么您很幸运。您需要将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
    

    这可以在Declaring API Functions In 64 Bit Office 找到。 好像您不使用 x86 ActiveX 控件或 ODBC 连接,因为它们也会造成麻烦。

    您应该阅读Compatibility Inspector user's guide 为更多麻烦做好准备;)

    【讨论】:

    • 非常感谢,但使用“Private Declare PtrSafe Function SetWindowPos Lib”user32.dll”(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”给出了相同的结果。暂时我正在切换到 Access 2016,32 位版本。 :( 你是对的,我应该阅读兼容性检查器用户指南。谢谢老兄,非常感谢。
    • 绝对不需要 gor office x64,除非您满足Choose between the 64-bit or 32-bit version of Office 中的条件,但它们的迷雾最好由 RDBMS 覆盖。你的项目编译了吗?打赌还有其他需要调整的部分。
    • 是的,我的项目在 32 位 Access 2016 中完美编译,所以现在不用担心。谢谢你的时间。
    • 它是在 x64 中编译的吗?
    • 没有。它显示图像中显示相同的错误:(
    【解决方案2】:

    我同意 ComputerVersteher 的第一部分,所以我将解决您问题的第二部分。您可以通过以下方式使表单不可见:

    Private Sub Form_Load()
        'this turns the forms timer event on every 1 milisecond
        Me.TimerInterval = 1
    End Sub
    
    Private Sub Form_Timer()
        Me.Visible = False
        'this turns the timer event off so you don't waste CPU power
        Me.TimerInterval = 0
    End Sub
    

    【讨论】:

    • 它应该隐藏正在使用的表单,但我正在寻找一种在表单加载并可见时隐藏 MS Access 窗口的方法。
    • SetWindowPosyou 可以将高度和宽度设置为 0 (args cy, cx) 什么使窗口不可见
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多