通常,但并非总是如此,当我在此工作簿中工作/开发并在新文件名下手动保存以增加版本号时,我得到 “下次运行时,下面提到的代码行中出现了”调用的对象与其客户端断开连接“错误:
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”) 。换句话说,我从Values中删除名称并使用Sheet1上的名称更新它们。有一些例外,我不想复制名称,我不想删除名称等(可以在If语句中看到)。
另外需要注意的是,它总是会出现一些特殊的范围名称,这恰好是工作簿中的最大范围(2000行乘1250列,28行乘1250列)。事实上它只发生在更大的范围内,这让我觉得它是一个内存问题,但如果它是一个内存问题我会期望错误更频繁/一致地发生,因为这个pc的内存使用非常一致。
这是对冲基金客户的关键任务工作手册,因此可靠性至关重要。
随着时间的推移,潜艇随着时间的推移逐渐建成了磨机。我仍在寻找一种优雅的方式来转移命名范围。
在概念上,我理解错误意味着什么:我已经以某种方式断开了工作表或工作簿的范围。但是,我该如何避免这种情况或避免错误并实现我的需要呢?