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

У меня есть функция VBA в электронной таблице, которая работает с другой таблицей, которая открывается на более ранней стадии моего макроса. Макрос, используемый для работы отлично, но совсем недавно начал вызывать ошибку 1004 ( «Невозможно получить свойство RoundDown classа 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)), и это также вызывает ту же проблему

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

Есть идеи?

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

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

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

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

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

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

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

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

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

  • Названия листов вкладки Excel против имен таблиц Visual Basic
  • Формула разделения в excel
  • Есть ли эквивалент Thread.Sleep () в VBA
  • VLOOKUP с несколькими критериями, возвращающими значения в одной ячейке
  • Функция хеша пароля для Excel VBA
  • Как вы проверяете время работы кода VBA?
  • Должен ли я снова включить .CutCopyMode, прежде чем выйти из моей подпрограммы?
  • Как повторить «диапазон копирования (A1: A5) в диапазон B с преобразованием (столбец в строку)?
  • Как хранить макросы VBA для Office 2007, чтобы они всегда были доступны и делились ими с другими?
  • excel VBA автоматически запускает макрос всякий раз, когда изменяется ячейка
  • Способ запуска макросов Excel из командной строки или командного файла?
  • Давайте будем гением компьютера.