编辑后Access窗体中Microsoft Excel 12 OLE对象连接丢失问题
解决Access中嵌入式Excel OLE对象编辑后引用失效的问题
当你双击Access窗体中的嵌入式Excel OLE对象(Feuilles)在外部Excel编辑并关闭后,之前通过Set wb = Feuilles.Object获取的工作簿引用会因为OLE连接断开而失效,触发错误-2147220995: Object is not connected to server。核心解决思路是重新获取OLE对象的引用,而非尝试用Action或Verb属性重建连接。
具体解决方案
- 避免在
Form_Open事件中一次性赋值工作簿变量,而是在需要访问Excel对象时,重新从OLE控件的.Object属性获取引用。可以封装成一个复用函数:
Private Function GetExcelWorkbook() As Excel.Workbook On Error Resume Next ' 尝试直接获取引用 Set GetExcelWorkbook = Feuilles.Object ' 如果获取失败,激活OLE对象后重试 If Err.Number <> 0 Then Feuilles.Activate Set GetExcelWorkbook = Feuilles.Object End If On Error GoTo 0 End Function
- 在需要操作Excel工作簿的地方,调用该函数获取最新引用:
Dim wb As Excel.Workbook Set wb = GetExcelWorkbook If Not wb Is Nothing Then Dim sheetCount As Integer sheetCount = wb.Worksheets.Count ' 执行你的后续操作,比如读取数据、修改内容等 Debug.Print "工作表数量:" & sheetCount Else MsgBox "无法连接到嵌入式Excel工作簿" End If
关键说明
- 之前尝试的
Feuilles.Action =7、Feuilles.Verb =0/-1等方法,仅用于触发OLE对象的显示或激活动作,无法修复已断开的对象引用,必须重新通过.Object属性获取实例。 - 确保VBA编辑器中已引用Microsoft Excel xx.x Object Library(路径:工具 -> 引用,勾选对应版本),否则会出现类型未定义错误。
- 每次操作Excel对象前都重新获取引用,可避免因编辑、关闭外部Excel导致的连接失效问题。
内容的提问来源于stack exchange,提问作者candyuiop
相关产品推荐
相关产品推荐

