打开从 Excel 工作表单元格中选择的特定记录的访问表单
Posted
技术标签:
【中文标题】打开从 Excel 工作表单元格中选择的特定记录的访问表单【英文标题】:Open an Access Form to a specific record selected from an excel sheet cell 【发布时间】:2019-07-05 01:25:14 【问题描述】:我正在处理我负责处理的工作问题。在 Excel 工作表中有一个 ID 列表和一个 MS Access 数据库,其中包含与这些记录对应的记录。我需要编写代码来打开一个访问表单,以访问从 excel 字段中识别的记录。
Sub OpenAccess()
Dim LPath As String
Dim StudentID As Integer
'Path to Access database
LPath = "C:\Users\Admin\Desktop\CNRC_Test.accdb"
'Open Access and make visible
Set oApp = CreateObject("Access.Application")
oApp.Visible = True
'Open Access database as defined by LPath variable
oApp.OpenCurrentDatabase LPath
'Open form called Categories filtering by CategoryID
oApp.DoCmd.OpenForm "Student Details", , , "Student ID=" & StudentID
End Sub
我试过这段代码:
Sub OpenAccess()
Dim LPath As String
Dim StudentID As Integer
'Path to Access database
LPath = "C:\Users\Admin\Desktop\CNRC_Test.accdb"
'Open Access and make visible
Set oApp = CreateObject("Access.Application")
oApp.Visible = True
'Open Access database as defined by LPath variable
oApp.OpenCurrentDatabase LPath
'Open form called Categories filtering by CategoryID
oApp.DoCmd.OpenForm "Student Details", , , "Student ID=" & StudentID
End Sub
【问题讨论】:
有什么问题?描述错误或您有什么问题?另外,您使用的是什么 excel 和 access 版本? Office 2016 代码打开访问表单,但不是通过单击 Excel 单元格或转到 Excel 单元格指定的记录。我需要打开对单击的 excel 单元格指定的记录的访问表单。 【参考方案1】:oApp.DoCmd.OpenForm "Student Details", , , "Student ID=" & StudentID
在 Office 16 上测试:如果“学生详细信息”是您的表单名称,并且您的表单的记录源是您要从中获取的表,并且“学生 ID”是索引号列,并且有一个表单上的文本字段,其控件源是该索引号列或表中其他列的名称,那么应该返回一条记录(在文本框中显示结果)。
一个例子如下:
首先,将顶部的函数 def 重写为 OpenAccess(StudentID)
。
接下来,从您要使用的工作表中分配 StudentID:
用您选择的索引值填充 B3。
然后将活动单元暂时停放在 A1 中。
然后从左侧 VBE 窗格的 VBAProject 树中的 Microsoft Excel 对象中调出 Sheet 对象。将其写入其模块:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$3" Then
Call OpenAccess(Target.Value)
End If
End Sub
然后点击进入B3。
【讨论】:
StudentID需要来自excel文档中的点击事件/值,并在access中打开对应记录。 现在一切正常吗,还是缺少管道? 我仍在寻求帮助,以编写实现以下目标的方法:StudentID 需求来自 excel 文档中的点击事件/值,并在 access 中打开相应记录【参考方案2】:您可以将此代码复制/粘贴到 Excel 工作表模块后面并对其进行自定义以满足您的需求:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim studentID As Long
' Exit if selection is more than one cell
If Target.Cells.Count > 1 Then
Exit Sub
End If
' Validate if selected cell is in range
If Not Application.Intersect(Range("A1:A5"), Range(Target.Address)) _
Is Nothing Then
' Assign studentid value from current cell
studentID = Target.Value
' Call the open procedure with current cell value
Call OpenAccess(studentID)
End If
End Sub
Sub OpenAccess(studentID As Long)
Dim oApp As Object
Dim LPath As String
'Path to Access database
LPath = "C:\Temp\Test.accdb"
' Check if Access is open
On Error Resume Next
Set oApp = GetObject(LPath)
If Err.Number <> 0 Then Err.Clear
On Error GoTo 0
oApp.Visible = True
'Open form called Categories filtering by CategoryID
oApp.DoCmd.OpenForm "Student Details", , , "[Student ID]=" & studentID
End Sub
【讨论】:
运行打开访问并立即关闭 你调整了DB的路径吗? 你能用你当前的代码编辑/更新你的问题吗?以上是关于打开从 Excel 工作表单元格中选择的特定记录的访问表单的主要内容,如果未能解决你的问题,请参考以下文章
VBA Excel - 从 Excel 中的一个单元格中选择一个值以更新 SQL 表