You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access子窗体间复制记录报错:无效书签,求Bookmark正确语法

解决Access VBA跨子窗体复制记录的“无效书签”问题

你的代码出现“无效书签”错误的核心原因:书签仅能在同一个记录集或结构完全一致的记录集之间使用,FrmEmergencyContactSub和FrmWidowSub属于两个独立的子窗体,它们的记录集是不同的实例,直接跨窗体赋值书签必然失效。而且Bookmark的作用是定位当前窗体/记录集内的记录,并非复制记录内容,所以修改后无效果也符合逻辑。

正确的实现方式是读取源记录的字段值,在目标子窗体中创建新记录并写入对应内容:

Dim strCriteria As String
Dim rsSource As DAO.Recordset
Dim rsTarget As DAO.Recordset

strCriteria = "Members_FID = " & Me![Member_ID]
Set rsSource = Me.FrmEmergencyContactSub.Form.RecordsetClone
rsSource.FindFirst strCriteria

If rsSource.NoMatch Then
    MsgBox "未找到匹配记录"
Else
    ' 获取目标子窗体的记录集
    Set rsTarget = Me.FrmWidowSub.Form.Recordset
    rsTarget.AddNew
    ' 逐个复制需要的字段值,替换为实际字段名
    rsTarget!Members_FID = rsSource!Members_FID
    rsTarget!ContactName = rsSource!ContactName
    rsTarget!PhoneNumber = rsSource!PhoneNumber
    ' 继续添加其他需要复制的字段...
    rsTarget.Update
    ' 刷新目标子窗体显示新记录
    Me.FrmWidowSub.Form.Requery
End If

' 释放资源
rsSource.Close
rsTarget.Close
Set rsSource = Nothing
Set rsTarget = Nothing

重要注意事项:

  • 替换代码中的ContactName、PhoneNumber等字段名为两个子窗体数据源中实际对应的字段名称
  • 确保目标子窗体的数据源(表/查询)允许添加记录,若子窗体设置了AllowAdditions = False,需先改为True再执行添加操作(完成后可按需改回)
  • 若字段包含文本类型,注意添加引号包裹(比如rsTarget!Name = "'" & rsSource!Name & "'"),避免SQL语法错误

内容的提问来源于stack exchange,提问作者Dennis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:02:43