从 Excel VBA 的 MS Access 表单中获取价值
Posted
技术标签:
【中文标题】从 Excel VBA 的 MS Access 表单中获取价值【英文标题】:Getting Value from MS Access form from Excel VBA 【发布时间】:2009-03-27 18:41:01 【问题描述】:最好的检查方法是访问表单是否打开并使用 Excel VBA 获取文本框的值。
我的意思是有办法检查 MS Access 应用程序是否正在运行,如果是,则检查某个表单是否打开,然后从该表单的文本框字段中获取值。
类似
If MSAccess.([Application name]).Forms("FormName").isOpen then
MyVar = MSAccess.([Application name]).Forms("FormName")![PO Number]
end if
【问题讨论】:
您可能想添加示例,更多细节以获得更好的答案。 我不会把它放在答案中,因为它并没有真正回答提出的问题,但这听起来像是一个非常糟糕的想法。我的建议是找到一种更好的方法来处理你想做的任何事情。如果您提供更多详细信息,我会尝试提供有关更好方法的建议。 【参考方案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
【讨论】:
谢谢,这正是我想要的。【参考方案2】:如果表单未打开,@Remou 的 Debug.Print 将出错。
大多数 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 中测试过,但你明白了)
【讨论】:
以上是关于从 Excel VBA 的 MS Access 表单中获取价值的主要内容,如果未能解决你的问题,请参考以下文章
MS Access VBA:创建具有多个工作表的 Excel 工作簿
带有空格和范围的 MS Access VBA acImport 工作表名称
使用 VBA 将 MS Access 记录集导出到 Excel 中的多个工作表/选项卡会生成只读文件
VBA Excel - 从 MS Access 将列名保存到电子表格