У меня есть функция 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)), и это также вызывает ту же проблему.
Кажется, что открытие файла уже решает проблему - мне интересно, есть ли способ, которым открываемая книга (а не моя основная книга с макросом в ней) не включена для макросов, и это мешает. Но даже если это причина, я не знаю, как это обойти!
Любые идеи?
Debug.Print currentCell.Value
непосредственно передvDateList(0, n) = WorksheetFunction.RoundDown(currentCell.Value, 0)
, что вы получите? Это действительный номер? - person Siddharth Rout   schedule 17.05.2012WorksheetFunction.RoundDown(currentCell.Value, 0)
наApplication.WorksheetFunction.RoundDown(currentCell.Value, 0)
- person Siddharth Rout   schedule 17.05.2012