Excel “VBA投掷”;调用的对象已与其客户端断开连接;错误

Excel “VBA投掷”;调用的对象已与其客户端断开连接;错误,excel,vba,Excel,Vba,很久以前,我在Excel中编写了一个VBA宏,该宏在几个月内一直工作正常。突然,前几天它开始抛出一个错误,尽管我没有对工作簿进行任何更改: 运行时错误“-2147417848(80010108)”: 自动化误差 调用的对象已与其客户端断开连接 我将错误追溯到以下代码行 wkbTool.Worksheets("Excl Spine").Range("A2:D" & exclRow).ClearContents '<--- RUNS GREAT

很久以前,我在Excel中编写了一个VBA宏,该宏在几个月内一直工作正常。突然,前几天它开始抛出一个错误,尽管我没有对工作簿进行任何更改:

运行时错误“-2147417848(80010108)”:

自动化误差

调用的对象已与其客户端断开连接

我将错误追溯到以下代码行

wkbTool.Worksheets("Excl Spine").Range("A2:D" & exclRow).ClearContents '<--- RUNS GREAT
wkbTool.Worksheets("Delq Spine").Range("C2:D13").ClearContents '<--- ERROR OCCURS HERE
尝试2-相反

Dim wkbTool as Workbook
Dim wksht as Worksheet
Dim myRange as Range

Set wkbTool = Workbooks("Name.xlsm")
Set wksht = wkbTool.Worksheets("Delq Spine")
Set myRange = wksht.Range("C2:D13")

myRange.ClearContents '<--- ERROR
Workbooks("Name.xlsm").Worksheets("Delq Spine").Range("C2:D13").ClearContents
尝试3-可能
ClearContents
做一些疯狂的事情,跳过它

For i = 3 to 4
    For j = 2 to 13
        wkbTool.Worksheets("Delq Spine").cells(j,i) = ""
    Next j
Next i
这会导致Excel崩溃,尽管它不会首先抛出错误。它在崩溃前的第一次迭代中明确执行该操作,因为Excel恢复工作簿时,单元格(2,3)为空。此外,我没有在本次尝试的第一行使用
ClearContents
,以防万一
ClearContents
本身造成了一些问题

尝试4-好吧,反正我不需要那句话

我将注释掉导致错误的行。下一次循环时,有一个对
工作表(“Delq Spine”)
的引用,它在第一次迭代中有效,但在第二次迭代中无效:

With wkbTool.Worksheets("Delq Spine")
        .Activate
        .Range("C2").FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-1],'[" & wkbNew.Name & "]" & wksht.Name & "'!R3C2:R14C3,2,FALSE),0)"
End With
在上面的示例中,工作表被激活,但Excel崩溃,类似于将公式分配给C2时的尝试3。同样,一旦Excel恢复,很明显操作是成功的,因为公式在该单元格中被更新

尝试5-工作簿肯定已损坏

我翻阅了公司的备份文件,找到了当时确实有效的工作簿版本。它在同一个地方遇到了同样的错误

尝试6-让我们重新创建工作簿,然后

我从头开始重新创建工作簿,包括写入所有公式和设置单元格格式。我确实将VBA脚本复制/粘贴到了新版本,因为我没有时间重写它,结果它再次失败



我将继续添加有关我所做尝试的更多信息,因为我想起了这些尝试,上周我断断续续地研究这个问题。

工作表
“Delq Spine”
是否有事件处理程序?它的某些单元格是否有数据验证?保护?您是否经常在代码中使用
。激活
。选择
?导致这种异常的潜在原因很多,您需要逐一检查。如果没有一些可重复的示例,其他人很难诊断。您也可以尝试在宏的开头禁用事件、屏幕更新以及所有可能的内容。@A.S.H,谢谢您的提示。我确实禁用了事件和屏幕更新。工作表上没有事件处理程序、数据验证或保护。不幸的是,我确实有几个
.Activate
.Select
的实例,其中一些很容易替换。但我无法想象这会是原因,因为直到最近它还运转良好(没有任何改变)。我只需要花一些时间来替换这些激活和选择。@A.S.H,如果失败,我将考虑在脚本仍在运行且失败的情况下尽可能地剥离。太长了,不能在这里以原始形式发布。再次感谢!如果要清除的范围内至少有一个单元格与范围外的单元格合并,则会发生错误。工作表
“Delq Spine”
是否具有事件处理程序?它的某些单元格是否有数据验证?保护?您是否经常在代码中使用
。激活
。选择
?导致这种异常的潜在原因很多,您需要逐一检查。如果没有一些可重复的示例,其他人很难诊断。您也可以尝试在宏的开头禁用事件、屏幕更新以及所有可能的内容。@A.S.H,谢谢您的提示。我确实禁用了事件和屏幕更新。工作表上没有事件处理程序、数据验证或保护。不幸的是,我确实有几个
.Activate
.Select
的实例,其中一些很容易替换。但我无法想象这会是原因,因为直到最近它还运转良好(没有任何改变)。我只需要花一些时间来替换这些激活和选择。@A.S.H,如果失败,我将考虑在脚本仍在运行且失败的情况下尽可能地剥离。太长了,不能在这里以原始形式发布。再次感谢!如果要清除的范围内至少有一个单元格与范围外的单元格合并,则会发生错误。