我正在努力清理3张excel表中的一些表格。
我的代码在Excel 2007中运行良好,因为我切换到excel 2010我开始收到此运行时错误自动化错误调用的对象已与其客户端断开连接,错误号 -2147417848 < / strong>然后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"
答案 0 :(得分:2)
Microsoft provide a high-level answer:
如果代码在第一次运行时总是显示正常工作,并且如果错误或意外行为仅在后续调用相同代码期间发生,则会导致非限定方法调用。