2012-05-17 5 views
13

Ich habe eine VBA-Funktion innerhalb einer Tabelle, die auf einer anderen Tabelle arbeitet, die in einer früheren Phase meines Makros geöffnet wird. Das Makro, das verwendet wurde, um ordnungsgemäß zu funktionieren, hat jedoch erst kürzlich verursacht Fehler ("Kann nicht RoundDown-Eigenschaft der WorksheetFunction-Klasse"), wenn es ausgeführt wird.Excel-Fehler 1004 "Unable to get .... Eigenschaft der WorksheetFunction-Klasse" erscheint inkonsistent

Ich glaube, ich verstehe, was der Fehler verursacht werden würde (ein Problem mit RoundDown), aber ich kann nicht sehen, warum es in meinem Makro ausgelöst wird und der seltsame Teil ist, wenn ich in den Debug-Modus gehe und durch den Code in der VBE tritt der Fehler nicht auf (obwohl sich nichts offensichtlich ändert).

Hat jemand eine ähnliche Erfahrung dieser Art von Fehler inkonsistent und weiß, was ich tun könnte, um es zu lösen?

Ich bin vernünftig VBA/Excel-savvy, aber alle Vorschläge für weitere Schritte zur Diagnose wäre willkommen. Ich frage mich, ob es ein Problem mit der geöffneten Tabelle gibt, die nicht bereit ist, 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

  • Datei befindet sich lokal auf meinem C geöffnet wird: fahren; in einer Tabelle auf dem Netzwerk mein Makro ist

  • Dateiformat für beiden Dateien .xls (dh Excel 2003) ist - ich habe nicht die Möglichkeit der Veränderung dieses

  • Windows 7 (nicht, dass ich denke, es wäre relevant sein)

Zwei Punkte, die ich versucht habe bereits sind:

  • Stellvertreter eine andere Tabellenfunktion (zB Min (Current)) und th at verursacht auch das gleiche Problem

  • Mit der Datei geöffnet scheint bereits das Problem zu stoppen - ich frage mich, ob es eine Möglichkeit gibt, dass die Arbeitsmappe, die geöffnet wird (anstatt meine Hauptarbeitsmappe mit dem Makro darin) nicht ist aktiviert für Makros und das ist störend. Aber selbst wenn das der Grund ist, bin ich mir nicht sicher, wie ich es umgehen soll!

Irgendwelche Ideen?

+0

Wenn Sie einfügen 'Debug.Print currentCell.Value' kurz vor' vDateList (0, n) = WorksheetFunction.RoundDown (currentCell.Value, 0) ', was zu tun du erhältst? Ist es eine gültige Nummer? –

+3

Ändern Sie auch 'WorksheetFunction.RoundDown (currentCell.Value, 0)' in 'Application.WorksheetFunction.RoundDown (currentCell.Value, 0)' –

+0

Vielen Dank! Das habe ich mir vorgenommen. Ich bekomme eine Liste von Daten (effektiv Zahlen - sie zeigen als Datum, es sei denn, ich multipliziere mit 1, um die zugrunde liegende Excel-Nummer zu erhalten, die dem Datum entspricht). Diese gehen alle gut durch, wenn ich den Code durchlaufe, aber nicht, wenn ich ihn selbst laufen lasse (wenn er die exakt gleichen Werte zurückzieht), also ist es wahrscheinlich eher etwas an WorksheetFunction als an meinen schlechten Daten. Ich arbeite jetzt an der Verwendung von "On Error ..." - es scheint, Fehler nur beim ersten Mal, so eine Kludis könnte zuerst einen beliebigen WorksheetFunction-Aufruf mit On Resume Next und dann wieder ausschalten. – Neil

Antwort

21

Dieser Fehler tritt häufig auf, wenn ein Argument, das an die Arbeitsblattfunktion übergeben wird, nicht vom richtigen Typ ist oder einfach keinen Sinn ergibt.

Zum Beispiel hatte ich dieses Problem beim Aufruf WorksheetFunction.Asin mit einem Argument größer als 1. In Ihrem Fall würde ich vermuten, currentCell.Value ist ein nicht-numerischer Wert oder eine nicht gemäß Ihrer Region Einstellungen in Bezug auf Zahlen.

Ja, die Fehlermeldung ist wirklich irreführend.

+0

Nur als Referenz tritt derselbe Fehler beim Aufrufen von WorksheetFunction.Ln mit negativen Werten auf. –

+0

oder wenn Sie in einer 1-basierten Excel-Sammlung nach einem Element an Position 0 fragen, z. B. Blatt.Pictures (0) – Cel

+0

Es tritt auch auf, wenn der Bereich, den Sie zu transponieren versuchen, nicht "in einem Stück" ist. Sie können also Bereiche, die gebrochen sind, nicht transponieren –

1

Ich habe die "Unable to * Eigenschaft der WorksheetFunction-Klasse" Fehler mit den Funktionen Transpose, MMult, MDterm und MInverse erhalten.

Ich konnte meinen Code ausführen, indem ich "Option Base 1" in den Deklarationsbereich (vor dem eigentlichen Code) des jeweiligen Moduls im Editer setze.

Excel geht davon aus, dass "Option Base 0" eine zusätzliche Zeile und Spalte mit leeren Zellen hinzufügt. Dies führt dazu, dass der Fehler auftritt und nicht sofort ersichtlich ist.

0

Ich bin schon vorher darüber gekommen, und für mich war es, weil der Kriterienbereich keinen Sinn ergab, wie Andre oben sagte.

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

Werfen Sie einen Blick auf die Strecke ... es macht keinen Sinn. Geändert, um den Bereich "AC8:C"-"AC8:AC" und es wird funktionieren perfekt

Verwandte Themen