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
相关产品推荐
相关产品推荐

