Ошибка 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"
и это будет отлично работать