vba excel: функция, вызывающая ошибку

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Yanenok
Сообщения: 3
Зарегистрирован: 13 янв 2010, 22:50

Есть функция:

Код: Выделить всё

Public Function CheckIfUsed(ByRef Ti As Integer, ByRef Qi As Integer) As Boolean
' Ti - индекс темы, Qi - индекс вопроса

Qst = CopyArr(1).Theme(Ti).Question(Qi).QName
' Qst - название вопроса
' массивы объявлены через User-Defined Type в этом же модуле

If WorksheetFunction.CountIf(RList.Columns(1), "?. " & Qst) > 0 Then
' если вопрос уже есть на странице, то необходимо взять следующий вопрос в данной теме, если ни один вопрос в данной теме не подходит, надо взять следующую тему и проделать то же самое:
    CheckIfUsed = True
    Set QList = Worksheets("1")
' на этом листе хранятся вопросы в виде таблицы "тема-вопрос-сложность", с него происходит запись элементов в массив в основном коде
    Set RList = Worksheets("2")
'на этот лист выводятся вопросы
    tmpT = CopyArr(0).Theme(Ti).TName
    NumQT = WorksheetFunction.CountIf(QList.Columns(1), tmpT)
' NumQT - число вопросов в теме; находится, как число строк на листе с одинаковыми темами
    var = Qi
' переменной var присваиваем значение, при достижении которого надо будет выйти из цикла
    Do
        Do
        Call ChooseNext(Qi, NumQT)
        Qst = CopyArr(1).Theme(Ti).Question(Qi).QName
        If WorksheetFunction.CountIf(RList.Columns(1), "?. " & Qst) = 0 Then
            Exit Do
        End If
        Loop Until Qi = var
    Call ChooseNext(Ti, NumT)
    Qi = 0
    Qst = CopyArr(1).Theme(Ti).Question(Qi).QName
    Loop Until WorksheetFunction.CountIf(RList.Columns(1), "?. " & Qst) = 0
Else
    CheckIfUsed = False
End If
End Function

Public Function ChooseNext(ByRef index As Integer, ByRef amount As Integer)
If index < amount Then
    index = index + 1
Else
    index = 1
End If
End Function
и обращение к этой функции в основном коде:

Код: Выделить всё

    Do
    Qst = CopyArr(1).Theme(Ti).Question(Qi).QName
    Loop Until CheckIfUsed(Ti, Qi) = False
все это настолько не нравится excel'ю, что он упорно выдает ошибку и закрывается
кто может подсказать, где ошибка?
заранее спасибо!
Вложения
error.jpg
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Сложно найти причину, не увидев проект полностью.

Вообще, дело не в Вашем коде, а в ошибке интерпретатора кода VBA - какие бы не попадались ошибки в коде, excel не должен вылетать с ошибкой.

Я порой сталкиваюсь с подобным - обычно помогает перезапуск Excel или Windows.
Иногда требуется установка сервис-паков.

Попробуйте пройтись по коду в пошаговом режиме - вместо F5 для запуска нажимайте F8
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
Ответить