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

16

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

Мне кажется, я понимаю, из-за чего возникла ошибка (проблема с запуском RoundDown), но я не понимаю, почему она запускается в моем макросе, и странным является то, что, когда я перехожу в режим отладки и выполняю код в VBE, ошибка не повторяется (несмотря на то, что ничего явно не меняется).

Does anyone have a similar experience of this sort of error occuring inconsistently and know what I could do to resolve it?

Я разумно разбираюсь в 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 version: 2010

File being opened resides locally on my C: drive; my macro is in a spreadsheet on the network

File format for both files is .xls (i.e. Excel 2003) - I don't have the option of changing this

Windows 7 (not that I think it would be relevant)

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

Substitute a different worksheet function (e.g. Min(currentCell)) and that also causes the same problem

Having the file open already seems to stop the problem - I wonder if there is some way that the workbook which is being opened (rather than my main workbook with the macro in it) is not enabled for macros and this is interfering. But even if this is the cause I'm not sure how to get around it!

Есть идеи?

Также изменитьWorksheetFunction.RoundDown(currentCell.Value, 0) вApplication.WorksheetFunction.RoundDown(currentCell.Value, 0) Siddharth Rout
Если вы вставитеDebug.Print currentCell.Value как раз передvDateList(0, n) = WorksheetFunction.RoundDown(currentCell.Value, 0), что вы получаете? Это действительный номер? Siddharth Rout
Спасибо! Я попробовал. Я получаю список дат (фактически числа - они отображаются как дата, если я не умножу на 1, чтобы получить базовый номер Excel, соответствующий дате). Они определенно все проходят хорошо, если я прошагаю по коду, но не позволяю, чтобы он запускался на его собственном (когда он возвращает те же самые значения), так что это скорее что-то о WorksheetFunction, а не мой плохой данные. Я сейчас работаю над использованием "При ошибке ..." - кажется, что это ошибка только в первый раз, поэтому kludge может быть сначала выполнить произвольный вызов WorksheetFunction с помощью On Resume Next, а затем выключить после. Neil
Ты попробовал мое второе предложение? Siddharth Rout

Ваш Ответ

3   ответа
1

* свойство класса WorksheetFunction & quot; ошибка при использовании функций Transpose, MMult, MDterm и MInverse.

Мне удалось запустить мой код, поставив & quot; Вариант Base 1 & quot; в разделе объявлений (перед фактическим кодом) конкретного модуля в редакторе.

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

0

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

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

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

23

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

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы