Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переполнение, непонятная ошибка 
:(
    Опции темы
wowka19
Дата 27.2.2013, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 30.11.2011

Репутация: нет
Всего: нет



вот (Excel 2007):

Код

'Dim SumValues(10) As Decimal - Excel говорит, что нет такого типа
'Dim SumValues(10) As Double  - тоже переполнение как и с Currency
Dim SumValues(10) As Currency
Dim CodesCount(10) As Integer

SumValues(i) = SumValues(i) / CodesCount(i) ' ОШИБКА Overflow


В чем проблема?
PM MAIL   Вверх
Akina
Дата 27.2.2013, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



А где присвоение значений?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
wowka19
Дата 27.2.2013, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 30.11.2011

Репутация: нет
Всего: нет



в 6 строке же!
если ты про изначальную инициализацию, то она есть - я просто не стал загромождать код
PM MAIL   Вверх
Akina
Дата 27.2.2013, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Ну так вот свою 6-ю строку и поправь. А мне её не видать. Другим, думаю, тоже.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
wowka19
Дата 27.2.2013, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 30.11.2011

Репутация: нет
Всего: нет



как это не видать? она же последняя в приведенном мною коде
примечание: шесть - это такая цифра с круглишочком и хвостиком наверху. Ее можно спутать с девяткой если перевернуть монитор относительно лица на 180 градусов. Так что приглядись хорошенько друг.

Это сообщение отредактировал(а) wowka19 - 27.2.2013, 09:42
PM MAIL   Вверх
Данкинг
Дата 27.2.2013, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130



wowka19, я думаю, что
Цитата(Akina @  27.2.2013,  10:21 Найти цитируемый пост)
А мне её не видать.

сказано всё же про инициализацию SumValues. smile

Добавлено через 59 секунд
А зачем currency на integer вообще делить?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Akina
Дата 27.2.2013, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



См. аттач.

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  1.jpg 40,68 Kb


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
wowka19
Дата 28.2.2013, 05:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 30.11.2011

Репутация: нет
Всего: нет



Вот весь код (код формы с одной кнопкой):

Код

Private Sub Load_TP_Click()
    Filename = Application.GetOpenFilename()
    Workbooks.Open (Filename)
    
    N = 0
    For i = 0 To 3500
        If Application.ActiveWorkbook.ActiveSheet.Cells(i + 2, 4) = "" Then Exit For
        N = N + 1
    Next i
    
    Dim RecordsCodes() As String
    Dim RecordsValues() As Currency
    ReDim RecordsCodes(N - 1)
    ReDim RecordsValues(N - 1)
    
    For i = 0 To N - 1
        If Application.ActiveWorkbook.ActiveSheet.Cells(i + 2, 4) = "" Then Exit For
        RecordsCodes(i) = Application.ActiveWorkbook.ActiveSheet.Cells(i + 2, 4)
        RecordsValues(i) = CCur(Application.ActiveWorkbook.ActiveSheet.Cells(i + 2, 9))
        'RecordsValues(i) = Application.ActiveWorkbook.ActiveSheet.Cells(i + 2, 9)
    Next i
    
    '?????????? ???-?? ?????????? ?????
    C = 0
    MewCode = True
    Dim AllCodes() As String
    ReDim AllCodes(N - 1)
    For i = 0 To N - 1
        For Each v In AllCodes
            If RecordsCodes(i) = v Then
                NewCode = False
                Exit For
            End If
        Next v
        If NewCode = True Then
            AllCodes(C) = RecordsCodes(i)
            C = C + 1
        End If
        NewCode = True
    Next i
    
    Dim CodesCount() As Integer
    Dim SumValues() As Currency
    ReDim CodesCount(C - 1)
    ReDim SumValues(C - 1)
    '?????????
    For i = 0 To C - 1
        CodesCount(i) = 0
        SumValues(i) = 0
    Next i
    
    '???????
    For i = 0 To C - 1
        For j = 0 To N - 1
            If RecordsCodes(j) = AllCodes(i) Then
                CodesCount(i) = CodesCount(i) + 1
                SumValues(i) = SumValues(i) + RecordsValues(j)
            End If
            SumValues(i) = SumValues(i) / CodesCount(i) ' !!! - !!! здесь переплнение, но ПОЧЕМУ?????
        Next j
    Next i
    
    For i = 0 To C - 1
        MsgBox ("Code: " & AllCodes(i) & " - Sum: " & SumValues(i) & " - Count:" & CodesCount(i))
    Next i
    
    MsgBox (C)
    
End Sub


Я уже ###а*ся. Хоть убейте, но не могу понять в чем ошибка.

Пусть вас не смущает тип Currency. Я просто не знаю в чем хранить десятичные дроби. Гуглил по типам VBA, нашел Decimal, НО ЕГО НЕТ в Excel 2007. Почему - хз! Типы с плавающей точкой имхо не лучший выбор, а вот Currency вроде подходит гарантируя точность до 4 знака после точки + целая часть имеет большой диапазон.

Приложу файл, который обрабатывается для теста. Может там проблема

Присоединённый файл ( Кол-во скачиваний: 0 )
Присоединённый файл  TP.zip 14,60 Kb
PM MAIL   Вверх
Akina
Дата 28.2.2013, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Код

Private Sub Load_TP_Click()

On Error Goto ErrorHandler

    Filename = Application.GetOpenFilename()
    Workbooks.Open (Filename)

' [skipped]    

    MsgBox (C)

Exit Sub

ErrorHandler:
Debug.Print Err.Number, Err.Description
Err.Clear
Resume Done

Done:
On Error Goto Next
Debug.Print i,
Debug.Print Ubound(SumValues),
Debug.Print Ubound(CodesCount),
Debug.Print SumValues(i),
Debug.Print  CodesCount(i)

End Sub


Вывод из окна отладки в студию.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.