检查的最佳方式是访问表单是否已打开,并使用Excel VBA获取文本框的值。
我的意思是有办法检查MS Access应用程序是否正在运行,如果是,那么检查某个表单是否已打开,然后从此表单的文本框字段中获取值。
像
这样的东西 If MSAccess.([Application name]).Forms("FormName").isOpen then
MyVar = MSAccess.([Application name]).Forms("FormName")![PO Number]
end if
答案 0 :(得分:1)
以下是一些示例代码。
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function ShowWindow Lib "user32" _
(ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Public Const SW_SHOW = 5
Public Const GW_HWNDNEXT = 2
Sub FindAccess()
Dim WinHandle As Long
Dim objAc As Object
'Form title'
FindWindow vbNullString, "Images"
'use it'
ShowWindow WinHandle, SW_SHOW
'to get the application'
Set objAc = GetObject(, "Access.Application")
'and print a control's value'
Debug.Print objAc.Forms("frmImages").Controls("Description")
Set objAc = Nothing
End Sub
答案 1 :(得分:1)
大多数Access开发人员将IsLoaded()函数导入其数据库并使用它。我的版本中的代码(可能是也可能不是从原始MS版本编辑)是这样的:
Function IsLoaded(ByVal strFormName As String) As Boolean
' Returns True if the specified form is open in Form view or Datasheet view.
Const conObjStateClosed = 0
Const conDesignView = 0
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
If Forms(strFormName).CurrentView <> conDesignView Then
IsLoaded = True
End If
End If
End Function
要从Excel中使用它,您可以这样重写它:
Function IsLoaded(ByVal strFormName As String, objAccess As Object) As Boolean
' Returns True if the specified form is open in Form view or Datasheet view.
Const conObjStateClosed = 0
Const conDesignView = 0
Const acSysCmdGetObjectState = 10
Const acForm = 2
If objAccess.SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
If objAccess.Forms(strFormName).CurrentView <> conDesignView Then
IsLoaded = True
End If
End If
End Function
(我没有从Excel测试,但你明白了)