Ошибка 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)), и это также вызывает ту же проблему
-
Наличие открытого файла уже, кажется, останавливает проблему - интересно, есть ли способ, которым открывающаяся рабочая книга (а не моя основная рабочая тетрадь с макросом в ней) не включена для макросов, и это мешает. Но даже если это причина, я не уверен, как обойти это!
Любые идеи?
Ответы
Ответ 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"
, и он отлично работает