添加名称会创build“被调用的对象与客户端断开连接”错误

当我在这个工作簿上进行工作和开发时,经常(但不总是),在新的文件名下手工保存以增加版本号,我会在下面提到的代码行中看到“被调用的对象已经与客户端断开连接”错误下一次我运行它:

Sub copy_range_names_storage_to_values(wStorage As Workbook) Dim n As Name For Each n In ThisWorkbook.Names If VBA.InStr(1, n.Name, "_FilterDatabase") = 0 Then If VBA.InStr(1, n.Name, "_xlfn") = 0 Then If VBA.InStr(1, n.Name, "Values!") <> 0 Or VBA.InStr(1, n.RefersTo, "Values!") <> 0 Then n.Delete End If End If End If Next n Set n = Nothing Dim sNewRefersTo As String For Each n In wStorage.Names With ThisWorkbook.Sheets("Values").Names If VBA.InStr(1, n.Name, "_xlfn") = 0 Then If VBA.InStr(1, n.RefersTo, "=" & wStorage.Sheets("Sheet1").Name & "!") > 0 Then sNewRefersTo = VBA.Replace(n.RefersTo, "Sheet1", "Values") If VBA.InStr(1, sNewRefersTo, "#REF!") = 0 Then Dim rn As String rn = "" rn = VBA.Replace(n.Name, wStorage.Sheets("Sheet1").Name & "!", "") Dim ra As String ra = "" ra = "=" & "Values!" & ThisWorkbook.Sheets("Values").Range(sNewRefersTo).Address 'ThisWorkbook.Sheets("Values").Activate .Add Name:=rn, RefersTo:=ra '<--- ERROR HERE!!! Else n.Delete End If End If End If End With Next n Application.StatusBar = "copy_range_names_storage_to_values: finished" End Sub 

上面的目的是从ThisWorkbook.Sheets(“Values”)中删除所有范围名称,并从wStorage.Sheets(“Sheet1”)复制范围名称并将其添加到Thisworkbook.Sheets(“Values”)。 换句话说,我从值中删除名称并使用Sheet1上的名称进行更新。 有一些例外,我不想复制名称,我不想删除名称等(如在If语句中可以看到的)。

还有一点要注意的是,它总是出现在特定的几个范围名称中,这些名称恰好是工作簿中的最大范围(2000行×1250列,28行×1250列)。 事实上,它只发生在更大的范围,使我认为这是一个内存问题,但我希望错误发生更频繁/一致,如果这是一个内存问题,因为这台电脑的内存使用是相当一致的。

这是对冲基金客户的重要工作手册,因此可靠性至关重要。

随着时间的推移,这个小组已经随着时间的推移而被打造成碎片。 我仍然在寻找一个优雅的方式来传输命名的范围。

在概念上,我明白错误意味着什么:我已经以某种方式断开了表格或工作簿的范围。 但是,如何避免这种情况或避免错误,并实现我所需要的?