24

マクロの初期段階で開いた別のスプレッドシートで動作する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))に置き換えても、同じ問題が発生します

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

何か案は?

4

3 に答える 3

29

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

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

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

于 2012-08-17T16:53:01.127 に答える
1

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

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

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

于 2014-06-05T19:46:56.600 に答える
0

アンドレが上で言ったように、私は以前にこれに遭遇しました、そして私にとってそれは基準範囲が意味をなさなかったためでした。

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

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

于 2016-12-14T14:15:57.657 に答える