从Excel打开Access表单中的特定记录
我正在编写一个宏,它将打开Access数据库,打开表单,并根据ActiveCell的内容显示特定记录。我让它大部分工作,但我的问题是,它打开的表单只包含一条记录,因此底部的箭头按钮不会指向其他记录。有没有办法打开包含所有记录的表单,然后转到我想显示的一个?我怀疑这与表单底部的搜索框有关,但我在互联网上找不到任何相关信息 宏打开的窗体: 手动打开的表单:从Excel打开Access表单中的特定记录,excel,vba,ms-access,Excel,Vba,Ms Access,我正在编写一个宏,它将打开Access数据库,打开表单,并根据ActiveCell的内容显示特定记录。我让它大部分工作,但我的问题是,它打开的表单只包含一条记录,因此底部的箭头按钮不会指向其他记录。有没有办法打开包含所有记录的表单,然后转到我想显示的一个?我怀疑这与表单底部的搜索框有关,但我在互联网上找不到任何相关信息 宏打开的窗体: 手动打开的表单: 您正在使用以下内容显示表单: expression.OpenForm(FormName、View、FilterName、WhereCondi
您正在使用以下内容显示表单: expression.OpenForm(FormName、View、FilterName、WhereCondition、DataMode、WindowMode、OpenArgs) 对于
FormName
您正在传递问题详细信息“
,跳过视图
和过滤器名称
参数,然后提供一个WhereCondition
参数:
app.DoCmd.OpenForm“问题详细信息”、“[ID]=”&Abs(替换(右(搜索,4)、“-”、”)
“[ID]=”&Abs(Replace(右(搜索,4),“-”,”)
表达式就是您看到的过滤器
删除该参数,您将删除筛选器
app.DoCmd.OpenForm“问题详细信息”
侧注,不要跳过可选的位置参数,如“代码>,”-考虑使用命名参数,这样就可以更清楚地说明参数到什么参数: 现在,您需要将记录集光标移动到所需位置(可由
.OpenArgs
提供):
app.DoCmd.OpenForm“问题详情”_
OpenArgs:=“[ID]=”&Abs(替换(右(搜索,4),“-”,”)
“以下可能是表格本身,例如-表格加载(然后由我参考)
带有表单(“问题详细信息”)。RecordsetClone
.FindFirst表单(“问题详细信息”).OpenArgs
如果是的话,那就是诺玛奇
'未找到对id的反应
其他的
表格(“发行详情”).Bookmark=.Bookmark
如果结束
以
您应用了一个过滤器,如箭头旁边的单词Filtered
所示!。单击它以删除过滤器。您可能想使用。这可以在表单_load上完成,搜索值由OpenArgs提供。)在查询中使用字段名而不是controlsname。[NCR编号]是字符串吗?然后使用[NCR Number]='”&Replace(search,“,”)&“
(如果[NCR Number]包含引号(”
),则替换是为了避免错误。[Title]
/[NCR Number]
和搜索
始终是一个格式如下的数字:19-0001。使用[NCR Number]
对于where条件,我只是将表单打开到一个新条目,并且我再次检查了搜索
是否与该字段中的数据相同。我尝试使用表单上的其他文本框,结果更加混乱。wherecondition:=“[Program]=”和“SE07”“
弹出一个输入框,询问SE07的参数值,而不是程序。格式化的数字已转换为字符串!所以你需要在搜索之前和之后的报价!SE07也一样!条件是字段的数据类型,而不是其内容-WhereCondition:=“[NCR编号]=”&search&“”
有效,谢谢!该代码是否必须以的形式加载
,或者是否有办法将所有代码保存在我的excel宏中?我的代码有点变化,请参见上面我编辑的问题。@breaddough如果代码调用了OpenForm
,它将打开表单。。。它不属于表单加载
处理程序,不属于@breadoughlas,但它可以在那里使用(都在OpenForm之后)。如果在多个位置需要,这很有用。现在我已经弄清楚了我的论点,这很有效。我只需将表单(“问题详细信息”)
更改为app.Forms(“问题详细信息”)
Sub File_open()
Dim app as Object
Dim search As String: search = ActiveCell.Value
If (ActiveCell.Font.ColorIndex = 3) And (InStr(ActiveCell.Value, "-") <> 0) Then
'Open NCR Record
Set app = CreateObject("Access.Application")
app.Visible = True
app.OpenCurrentDatabase ("Z:\Quality\NCR Database\NCR Databse " & "20" & Left(ActiveCell.Value, 2) & "0101.accdb")
app.DoCmd.OpenForm "Issue Details", , , "[ID]=" & Abs(Replace(Right(search, 4), "-", ""))
Set app = Nothing
Exit Sub
End If
Msbox ("NCR Not Found.")
End Sub
app.DoCmd.OpenForm "Issue Details", WhereCondition:="[Title]=" & search