4

我正在清理 3 张 excel 表中的一些表格。

我的代码在 Excel 2007 上运行良好,当我切换到 excel 2010 时,我开始收到此运行时错误自动化错误调用的对象已与其客户端断开连接,错误号为-2147417848,然后 excel 冻结。

在线运行此功能2次后显示错误

    Sheets("Risk Details").Range("A3" & ":BV" & (count + 1)).Delete Shift:=xlUp

谁能帮我找出为什么会发生这种情况以及如何解决它?

下面是函数的完整代码

Function clearData(Optional refresh As Boolean) As Boolean
Application.ScreenUpdating = False

Sheets("Single Risk Register").Unprotect myPass
Sheets("Single Risk Register").Activate
Cells.FormatConditions.Delete


Sheets("Risk Details").Unprotect myPass
Sheets("Risks").Unprotect myPass
Dim currentrange As Range


Sheets("Risks").Activate
Set currentrange = Sheets("Risks").Range("RisksTable")
currentrange.ClearContents


Dim count As Integer
count = Sheets("Risks").ListObjects("RisksTable").ListRows.count
If count > 1 Then
    Sheets("Risks").Range("A3" & ":C" & (count + 1)).Delete Shift:=xlUp
End If


Sheets("Risk Details").Activate
Set currentrange = Sheets("Risk Details").Range("RiskDetails")
currentrange.ClearContents
count = Sheets("Risk Details").ListObjects("RiskDetails").ListRows.count
If count > 1 Then
    Sheets("Risk Details").Range("A3" & ":BV" & (count + 1)).Delete Shift:=xlUp
End If
Sheets("Single Risk Register").Activate
count = CInt(Range("ActionsCount"))
Range("ActionsCount") = 1

Dim tableLastRow As Integer
tableLastRow = getLastTableRow()
If (tableLastRow >= 48) Then
    Sheets("Single Risk Register").Range("B48" & ":K" & tableLastRow).Delete Shift:=xlUp
End If
Range("ActionsTable[[Action Description]:[Action Commentary]]").Select
Application.CutCopyMode = False
Selection.ClearContents

Application.ScreenUpdating = False
Dim DataRange As Range

Dim o As Shape
Dim tC As Variant
Dim propertiesCount As Integer
Dim i As Integer

tC = Sheets("TableColumns").ListObjects("TableColumns").DataBodyRange

propertiesCount = GetTemplatePropertiesCount(templates(0)) - 1
ReDim properties(0 To propertiesCount - 1, 0 To 4)
If (properitesColl.Item(i + 1)(propertiesCount, 2) = templates(0)) Then
    properties = properitesColl.Item(i + 1)
End If

For count = 0 To propertiesCount - 1
    If ((properties(count, 4) <> "C25") And (properties(count, 4) <> "C26") And (properties(count, 4) <> "C27") And (properties(count, 4) <> "C28") And (properties(count, 4) <> "C38") And (properties(count, 4) <> "C39") And (properties(count, 4) <> "C40") And (properties(count, 4) <> "C41"))

    Then
        Sheets("Single Risk Register").Range(properties(count, 4)) = ""
    End If
Next

Dim columnCount As Integer
columnCount = GetColumnCount()
count = 0
For i = 1 To columnCount
    If tC(i, 4) <> "Action" Then
        Set currentrange = Range(tC(i, 4))
    Else
        Set currentrange = Range("ActionsTable[" & tC(i, 1) & "]")
    End If
    If ((tC(i, 4) = "C25") Or (tC(i, 4) = "C26") Or (tC(i, 4) = "C27") Or (tC(i, 4) = "C28") Or (tC(i, 4) = "C38") Or (tC(i, 4) = "C39") Or (tC(i, 4) = "C40") Or (tC(i, 4) = "C41")) 

     Then
        With currentrange.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 15654866
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With

    Else
        With currentrange.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent1
            .TintAndShade = 0.799981688894314
            .PatternTintAndShade = 0
        End With
    End If
Next


Sheets("Single Risk Register").Unprotect myPass
If (Range("C3").Value = "") Then
    Range("ActionsTable[[Action Description]:[" & addTitle & "]]").Select
    Selection.Locked = True
    Rows("45:47").Select
    Selection.EntireRow.Hidden = True
End If


Sheets("Single Risk Register").Range(Range("TitleCell")).Value = Range("OldTitle") + " (" + Range("Project_Title") + ")"

Sheets("Single Risk Register").Protect myPass, AllowFiltering:=True
Sheets("Risk Details").Protect myPass, AllowFiltering:=True
Sheets("Risks").Protect myPass, AllowFiltering:=True

doNotRun = False
Range("C3").Select
Application.ScreenUpdating = True

Exit Function

err:  

Sheets("Risk Details").Protect myPass
Sheets("Risks").Protect myPass
MsgBox err.Description, vbCritical, "Error"
4

1 回答 1

2

微软提供了一个高级别的答案

如果代码在第一次运行时似乎总是可以工作,并且如果错误或意外行为仅在随后调用相同代码期间发生,则原因是不合格的方法调用。

于 2013-02-12T11:29:08.413 回答