Подтвердить что ты не робот

Ошибка Excel 1004 "Невозможно получить свойство свойства WorksheetFunction", возникающее непоследовательно

У меня есть функция VBA в электронной таблице, которая работает с другой электронной таблицей, которая открывается на более ранней стадии моего макроса. Макрос, используемый для работы отлично, но только недавно начал вызывать ошибку 1004 ( "Невозможно получить свойство RoundDown класса WorksheetFunction" ) при запуске.

Я считаю, что понимаю, что вызвала ошибка (проблема с запуском RoundDown), но я не могу понять, почему она запускается в моем макросе, а нечетная часть - это то, что когда я перехожу в режим Debug и выполняю код в 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 (не думаю, что это было бы актуально)

Два момента, которые я уже пробовал, следующие:

  • Замените другую функцию листа (например, Min (currentCell)), и это также вызывает ту же проблему

  • Наличие открытого файла уже, кажется, останавливает проблему - интересно, есть ли способ, которым открывающаяся рабочая книга (а не моя основная рабочая тетрадь с макросом в ней) не включена для макросов, и это мешает. Но даже если это причина, я не уверен, как обойти это!

Любые идеи?

4b9b3361

Ответ 1

Эта ошибка возникает часто, когда любой аргумент, переданный функции рабочего листа, не имеет правильного типа или просто не имеет смысла.

Например, я столкнулся с этой проблемой при вызове WorksheetFunction.Asin с аргументом больше 1. В вашем случае я бы предположил, что currentCell.Value является нечисловым значением или не соответствует вашим настройкам региона в отношении числа.

Да, сообщение об ошибке действительно ошибочно.

Ответ 2

Я получил свойство "Невозможно получить * свойство класса WorksheetFunction" с помощью функций Transpose, MMult, MDterm и MInverse.

Мне удалось запустить мой код, поместив "Option Base 1" в разделе Declarations (до фактического кода) конкретного модуля в Editer.

Excel предполагает "базу опций 0", которая добавит дополнительную строку и столбец пустых ячеек. Это приведет к возникновению ошибки и не сразу станет очевидным.

Ответ 3

Я столкнулся с этим раньше, и для меня это было потому, что диапазон критериев не имел никакого смысла, как сказал Андре выше.

См. пример формулы ниже: .Cells(11, i).Formula = Application.WorksheetFunction.CountIfs(Sheets("Sheet1").Range("AC8:C" & n), "S")

Посмотрите на Range... это не имеет никакого смысла. Изменен диапазон от "AC8:C" до "AC8:AC", и он отлично работает