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

Microsoft は高レベルの回答を提供します

コードが最初に実行されたときに常に機能しているように見え、エラーまたは予期しない動作が同じコードへの後続の呼び出し中にのみ発生する場合は、修飾されていないメソッド呼び出しが原因です。

于 2013-02-12T11:29:08.413 に答える