很长一段时间以来,我们一直在Windows 7中使用MS Access数据库(Office 2007,32位),但是最近我们切换到了64位Office 2016。
现在每个表格都显示以下消息,这确实很烦人:
此外,“访问”窗口没有最小化。我不是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位办公室中)“访问”窗口以前在表单加载时隐藏,但现在在64位中它已完全打开。请帮助我隐藏64位版本的MS Access窗口。
答案 0 :(得分:2)
未经广泛测试即可升级公司软件是业余的!
但是,如果该错误消息是唯一的问题,那么您很幸运。您需要将api参数声明转换为x64,这通常意味着将所有Long
句柄和指针的声明更改为LongPtr
,并在声明后添加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来为更多的麻烦做准备;)
答案 1 :(得分:1)
我同意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