Страницы: 1
RSS
Отладка кода VBA программы для дистанционного снятия показаний тепловычислителей Multical
 
Добрый день
Есть файл с макросами для удаленного снятия показаний с теплосчетчика. Поставлялся вместе с теплосчетчиком много лет назад. Авторов соответственно найти нереально. Сейчас вдруг начал барахлить и я не могу понять почему.
Кода там довольно много, но вот выложу кусок в котором генерируется ошибка Type mismatch.
Код
'  Процедуры ниже заполняют протокол данными со счётчика
'
Public Function ОбработатьЧасовой(Wrs As Excel.Worksheet, ByVal До As Date, ByVal Всего As Integer) As Integer
Dim i As Integer, j As Integer, k As Integer
Dim Регистр As Integer, iDay As Integer
Dim iStr As Integer, iPos As Integer
Dim День As Date
Dim a
  With Wrs
        If kTab = 0 Then Exit Function
    День = До - Всего + 1
    iDay = Sect(Sect_Tbl, 1) + TblBeg
    For k = 1 To Всего
        For i = 1 To kTab               ' Цикл по регистрам
         If ПрерватьЧтение Then
            ОбработатьЧасовой = 1
            Exit Function
          End If
           Регистр = sTab(2, i)
            iPos = sTab(1, i)
            iStr = iDay
            ' *************************************
            a = MC601_СчитатьЧасовой(Регистр, День)
            ' *************************************
 ИндикаторЕщё (1)
            For j = 24 To 1 Step -1             ' Записываем в блок
                .Cells(iStr, iPos) = a(j)
                iStr = iStr + 1
              Next j
          Next i
        iDay = iDay + TblLen
        День = День + 1
      Next k
  End With
End Function
Конечно понимаю, что это очень неблагодарный труд, но может быть кто нибудь из уважаемых форумчан сразу увидит в чем дело.
Ошибка на скрине ниже. Возникает сразу, при j=24.
Переменную a объявлял и  integer и Long, и скобочки ставил после a(). Не получается!
Раньше работал, точно помню. Просто к этой процедуре нечасто обращаюсь, и не могу сказать что же поменялось. Вообще код так выглядит как будьто потерлось объявление переменной а. Незнаю...

PS ссылка на сам файл ( больше 100 кб):
http://d.zaix.ru/rrGV.xls
 
Цитата
john22255: Ошибка Type mismatch
Разбор ошибки Type Mismatch Error
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Type Mismatch Error
прочитал сразу же после появления ошибки, одна из первых в выдаче
 
А что находится в переменной a в момент ошибки?
Должен быть массив.
Может MC601_СчитатьЧасовой(Регистр, День) вернул что-то неправильное?
 
Цитата
МатросНаЗебре написал:
в переменной
в переменной а - Empty
Изменено: john22255 - 26.10.2021 16:58:17
 
Собственно дело в этом. Есть как минимум два варианта, или сделать проверку If Not IsEmpty(), или разобраться почему MC601_СчитатьЧасовой вернул Empty.
 
Цитата
МатросНаЗебре написал:
Собственно дело в этом
Спасибо за подсказку!
Буду копать в этом направлении.
 
john22255, может и не то, но заметил, что все переменные числовые объявлены как Integer. Не может возникнуть ситуации, когда какое-либо значение переменной превышает допустимое значение для типа Integer?

(это я так, в качестве выстрела наугад) :)
Кому решение нужно - тот пример и рисует.
 
Цитата
Пытливый написал:
превышает допустимое значение
вроде нет
Страницы: 1
Наверх