web-dev-qa-db-ja.com

Excelエラー1004「WorksheetFunctionクラスのプロパティを取得できません...」が一貫して表示されない

マクロの初期段階で開かれている別のスプレッドシートで動作するスプレッドシート内にVBA関数があります。マクロは正常に機能していましたが、ごく最近、1004エラー( "WorksheetFunctionクラスのRoundDownプロパティを取得できません")実行されるとき。

エラーの原因(RoundDownの実行の問題)は理解できますが、マクロでトリガーされる理由がわかりません。奇妙な部分は、デバッグモードに入ってVBEのコードをステップスルーするときです。エラーは再発しません(明らかに変化はありませんが)。

この種のエラーが一貫性なく発生し、それを解決するために何ができるかを知っている人はいますか?

私は合理的にVBA/Excelに精通していますが、それを診断するためのさらなる手順に関する提案は歓迎されます。開いたスプレッドシートの準備ができていないという問題があるのではないかと思っていますが、どうすればいいのかわかりません。

コードはこちらです。エラーがコメントでマークされた行で発生します。

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

その他の詳細:

  • Excelバージョン:2010

  • 開かれているファイルは、C:ドライブにローカルに存在します。私のマクロはネットワーク上のスプレッドシートにあります

  • 両方のファイルのファイル形式は.xls(つまりExcel 2003)です-これを変更するオプションはありません

  • Windows 7(関連があるとは思わない)

すでに試した2つのポイントは次のとおりです。

  • 別のワークシート関数(Min(currentCell)など)を使用すると、同じ問題が発生します

  • ファイルをすでに開いていると、問題が停止するようです-開かれているブック(マクロを含むメインブックではなく)がマクロに対して有効になっておらず、これが干渉している方法があるのではないかと思います。しかし、これが原因である場合でも、私はそれを回避する方法がわかりません!

何か案は?

17
Neil

このエラーは、ワークシート関数に渡された引数の型が正しくないか、意味をなさない場合によく発生します。

たとえば、1より大きい引数でWorksheetFunction.Asinを呼び出すときにこの問題が発生しました。あなたの場合、currentCell.Valueは数値ではないか、地域の設定に従っていないと思います数字に関して。

はい、エラーメッセージは誤解を招きます。

23
André Chalella

Transpose、MMult、MDterm、およびMInverse関数を使用すると、「WorksheetFunctionクラスの*プロパティを取得できません」というエラーが表示されました。

エディターの特定のモジュールの宣言(実際のコードの前)セクションに「オプションベース1」を配置することで、コードを実行することができました。

Excelは、空のセルの行と列を追加する「オプションベース0」を想定しています。これによりエラーが発生し、すぐにはわかりません。

1
James

アンドレが上記のように言ったように、私は以前にこれに出くわしたことがあり、私にとっては基準範囲が意味をなさないのでした。

以下の式の例を参照してください:.Cells(11, i).Formula = Application.WorksheetFunction.CountIfs(Sheets("Sheet1").Range("AC8:C" & n), "S")

範囲を見てください...それは意味がありません。 "AC8:C"から"AC8:AC"の範囲を修正しました。完全に機能します

0
user1