wake-up-neo.com

Excel-Fehler 1004 "Die Eigenschaft der WorksheetFunction-Klasse kann nicht abgerufen werden" erscheint inkonsistent

Ich habe eine VBA-Funktion in einer Kalkulationstabelle, die auf einer anderen Kalkulationstabelle arbeitet, die in einer früheren Phase meines Makros geöffnet wird. Das Makro funktionierte einwandfrei, hat aber vor kurzem einen 1004 error ("RoundDown-Eigenschaft der WorksheetFunction-Klasse kann nicht abgerufen werden"), wenn es ausgeführt wird.

Ich glaube, ich verstehe, was der Fehler sein würde (ein Problem beim Ausführen von RoundDown), aber ich kann nicht erkennen, warum er in meinem Makro ausgelöst wird. Der merkwürdige Teil ist der, wenn ich in den Debug-Modus gehe und den Code in der VBE durchsehe Fehler wiederholt sich nicht (obwohl sich offensichtlich nichts ändert).

Hat jemand eine ähnliche Erfahrung mit dieser Art von Fehlern, die inkonsistent auftreten und wissen, was ich tun könnte, um das Problem zu beheben?

Ich bin einigermaßen VBA/Excel-versiert, aber alle Vorschläge zu weiteren Schritten zur Diagnose wären dankbar. Ich frage mich, ob es Probleme mit der geöffneten Tabelle gibt, aber ich kann nicht sehen, wie.

Der Code ist hier. Der Fehler tritt in der Zeile auf, die mit einem Kommentar markiert ist.

Public Function GetDatesA(sWorkbookname As String, sSheetname As String, sCell As String) As Variant

    Dim vDateList() As Variant
    Dim currentCell As Range
    Dim n As Long

    Set currentCell = Workbooks(sWorkbookname).Worksheets(sSheetname).Range(sCell)

    n = 0

    Do
        If Trim(currentCell.Value) = "" Then
            Exit Do
        Else
            ReDim Preserve vDateList(0 To 1, 0 To n)
            vDateList(0, n) = WorksheetFunction.RoundDown(currentCell.Value, 0) 'error occcurs on this line
            vDateList(1, n) = currentCell.Column
            'Debug.Print currentCell.Value
        End If
        Set currentCell = currentCell.Offset(0, 1)
        n = n + 1
    Loop While currentCell.Column < XL_LAST_COLUMN

    GetDatesA = vDateList

End Function

Weitere Details sind:

  • Excel-Version: 2010

  • Die geöffnete Datei befindet sich lokal auf meinem Laufwerk C:. Mein Makro befindet sich in einer Tabelle im Netzwerk

  • Das Dateiformat für beide Dateien ist .xls (d. H. Excel 2003). Ich habe keine Möglichkeit, dies zu ändern

  • Windows 7 (nicht dass ich denke das wäre relevant)

Zwei Punkte, die ich bereits ausprobiert habe, sind:

  • Ersetzen Sie eine andere Arbeitsblattfunktion (z. B. Min (currentCell)), und dies verursacht dasselbe Problem

  • Wenn die Datei bereits geöffnet ist, scheint das Problem zu stoppen. Ich frage mich, ob es eine Möglichkeit gibt, dass die Arbeitsmappe, die geöffnet wird (und nicht meine Hauptarbeitsmappe mit dem Makro), für Makros nicht aktiviert ist und dies stört. Aber selbst wenn dies die Ursache ist, bin ich nicht sicher, wie ich das umgehen kann!

Irgendwelche Ideen?

16
Neil

Dieser Fehler tritt häufig auf, wenn ein an die Arbeitsblattfunktion übergebenes Argument nicht den richtigen Typ hat oder einfach keinen Sinn ergibt.

Dieses Problem hatte ich beispielsweise, wenn Sie WorksheetFunction.Asin mit einem Argument aufrufen, das größer als 1 ist. In Ihrem Fall würde ich annehmen, dass currentCell.Value ein nicht numerischer Wert ist oder nicht Ihren Regionseinstellungen in Bezug auf Zahlen entspricht.

Ja, die Fehlermeldung ist wirklich irreführend.

23
André Chalella

Ich habe die Fehlermeldung "Unable to * of WorksheetFunction Class" erhalten. 

Ich konnte meinen Code zur Ausführung bringen, indem "Option Base 1" in den Deklarationsbereich (vor dem eigentlichen Code) des jeweiligen Moduls im Editor eingefügt wurde.

Excel nimmt "Option Base 0" an, wodurch eine zusätzliche Zeile und Spalte mit leeren Zellen hinzugefügt wird. Dies führt dazu, dass der Fehler auftritt und nicht sofort ersichtlich ist.

1
James

Ich habe das schon früher durchgemacht, und für mich war das so, weil der Kriterienbereich keinen Sinn machte, wie Andre oben gesagt hat.

Siehe nachstehende Beispielformel: .Cells(11, i).Formula = Application.WorksheetFunction.CountIfs(Sheets("Sheet1").Range("AC8:C" & n), "S")

Schauen Sie sich die Range an ... es macht keinen Sinn. Der Bereich von "AC8:C" bis "AC8:AC" wurde geändert und es funktioniert einwandfrei

0
user1