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

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

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

Два момента, которые я уже пробовал:

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

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

Есть идеи?

3 ответа

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам