7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
1

Проблема с типами данных. Run-time error '6': OverFlow

01.02.2012, 13:03. Показов 28226. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Option Explicit
Option Explicit
Dim curCSP As Single
Dim curSP As Single
Dim dbSV As Single
Dim dbIr As Single
Dim dbTM As Single
 
'Const curCSP = 51
'Const curSP = 50
'Const dbSV = 0.6
'Const dbIr = 0.05
'Const dbTM = 0.164
 
 
Sub CallOptionCalculator()
 
 
Range("B1").Activate
curCSP = ActiveCell.Value ' current stock price (= S )
 
Range("B2").Activate
curSP = ActiveCell.Value ' strike price (= K )
 
Range("B3").Activate
dbSV = ActiveCell.Value ' stock volatility (= sigma )
 
Range("B4").Activate
dbIr = ActiveCell.Value ' interest rate (= r )
 
Range("B5").Activate
dbTM = ActiveCell.Value ' time to maturity (= T )
 
 
 
CulculationDelta1Function
 
MsgBox ("Your dbDelta1 is " & dbDelta1)
 
 
 
End Sub
 
_______________________________________________
Sub CulculationDelta1Function()
 
Dim dbDelta1 As Double
 
'Const curCSP = 51
'Const curSP = 50
'Const dbSV = 0.6
'Const dbIr = 0.05
'Const dbTM = 0.164
 
 
dbDelta1 = Round((Log(curCSP / curSP) + (dbIr + 0.5 * dbSV ^ 2) * dbTM) / (dbSV * Sqr(dbTM)), 3)
 
 
 
MsgBox ("Your dbDelta1 is " & dbDelta1) ' debugging line
 
 
End Sub

Если поменять переменные на константы (см. то что закоментено) то все, ок.
Пробовал менять переменные на double, single, long ... все равно ошибка не пропадает.
Что делать ?

Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2012, 13:03
Ответы с готовыми решениями:

Проблема при обработке данных через VBA MS Access (Run Time Error 2004: Недостаточно памяти)
Ребята, проблема в следующем: при фильтровании данных через форму выводится ошибка Run Time Error...

Проблема с формулами в VBA Excel: Run-time error 1004. Application defined or object-defined error
Здравствуйте. Я столкнулся с такой проблемой: я пишу вот такой код ...

Ошибка run time error 6 overflow, что не так? (без cost.Text = c6 вроде сначала робил, а потом удалял и всё равно ошибка
Dim h, w, l, wr, lr, p, a As String Private Sub CommandButton1_Click() h = InputBox("Введите...

проблема DLL: Run-time error '453':
Я написал программу DLLна VB6 по всем правикам, а также программу на VB6, которая вызывает функции...

7
15137 / 6411 / 1730
Регистрация: 24.09.2011
Сообщений: 9,999
01.02.2012, 14:09 2
Посмотрите, чему равны переменные: View - Locals Window. Или просто наводите курсор на на переменные.
Или выделите выражение и наведите на него курсор.
У меня все переменные =0, т.к. я вставил код в пустую книгу.
Миниатюры
Проблема с типами данных. Run-time error '6': OverFlow  
1
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
01.02.2012, 19:37  [ТС] 3
Цитата Сообщение от Казанский Посмотреть сообщение
Посмотрите, чему равны переменные: View - Locals Window. Или просто наводите курсор на на переменные.
Или выделите выражение и наведите на него курсор.
У меня все переменные =0, т.к. я вставил код в пустую книгу.
Нет у меня не ноль, не в этом проблема. В этом легко убедиться если в соответствующие клетки подставить значения. У меня была идея, что мож значение при умножении и других манипуляциях выходят за декларированный (типом данных) диапазон. Но версия эта отпала после того как я подставил значения в качестве констант (см. закомментирование строки).

Если отбросить вторую часть формулы и оставить только логарифм, тоже не работает. А если убрать логарифм и отставить только произведение, то все работает. Мистика =(

Есть какие нибудь догадки? Пожалуйста.
0
здесь больше нет...
3372 / 1670 / 184
Регистрация: 03.02.2010
Сообщений: 1,219
01.02.2012, 20:47 4
Лучший ответ Сообщение было отмечено как решение

Решение

вместо того, чтобы людям перебирать бесконечное количество вариантов с 5-ю переменными, дал бы конкретную xl-книгу с указанием, что ты делаешь и где у тебя ошибка.

Цитата Сообщение от Leeto Посмотреть сообщение
А если убрать логарифм и отставить только произведение, то все работает
https://www.cyberforum.ru/cgi-bin/latex.cgi?\lim_{x\rightarrow 0} \ln x = \propto

вот такие догадки у меня...
3
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
03.02.2012, 16:35  [ТС] 5
Цитата Сообщение от аналитика Посмотреть сообщение
вместо того, чтобы людям перебирать бесконечное количество вариантов с 5-ю переменными, дал бы конкретную xl-книгу с указанием, что ты делаешь и где у тебя ошибка.


https://www.cyberforum.ru/cgi-bin/latex.cgi?\lim_{x\rightarrow 0} \ln x = \propto

вот такие догадки у меня...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Option Explicit
Dim curCSP As Currency, curSP As Currency, dbGamma As Double, dbNDFd1 As Double, dbDelta As Double, dbCNF As Double, dbNDF As Double, dbSV As Double, dbIr As Double, dbTM As Double, dbCNF_d1 As Double, dbCNF_d2 As Double, dbDelta_two As Double, dbDelta1 As Double, dbNDF1 As Double
 
Sub CallOptionCalculator()
 
Dim curValue As Currency
 
Range("B1").Activate
curCSP = ActiveCell.Value ' current stock price (= S )
 
Range("B2").Activate
curSP = ActiveCell.Value ' strike price (= K )
 
Range("B3").Activate
dbSV = ActiveCell.Value ' stock volatility (= sigma )
 
Range("B4").Activate
dbIr = ActiveCell.Value ' interest rate (= r )
 
Range("B5").Activate
dbTM = ActiveCell.Value ' time to maturity (= T )
 
 
 
           Dim A As Currency
 
 
            
             CulculationDelta1Function
            
                                                                   ' MsgBox ("Your dbDelta1 is " & dbDelta1) ' debugging line
 
             CulculationNormalDensityFunction (1) ' = n(x)
          
                                                                  '  MsgBox ("Your n(x) is " & CulculationNormalDensityFunction(dbDelta1)) ' debugging line
             
             dbNDF = CulculationNormalDensityFunction(dbDelta1)
             
            
 
             
             dbDelta = dbDelta1
             
                                                                   MsgBox ("Your (dbNDF_d1)=n(x) is " & dbNDF)
             
                                                                   MsgBox ("Your dbDelta = dbDelta1 is " & dbDelta)
                        
                                                                   MsgBox ("Your (CNF) is " & dbCNF)  ' debugging line
 
             CulculationCumulativeNormalFunction
                        
                         
                         
                          
 
End Sub
 
 
Sub CulculationCumulativeNormalFunction()
 
 
 
Const factorGamma = 0.2316419
Const factorA1 = 0.31938153
Const factorA2 = -0.356563782
Const factorA3 = 1.781477937
Const factorA4 = -1.821255978
Const factorA5 = 1.330274429
 
Dim factorK As Double
 
 
            factorK = 1 / (1 + factorGamma * dbDelta)
            dbCNF = Round(1 - dbNDF * (factorA1 * factorK + factorA2 * (factorK ^ 2) + factorA3 * (factorK ^ 3) + factorA4 * (factorK ^ 4) + factorA5 * (factorK ^ 5)), 6)
 
 
 
End Sub
 
Function CulculationNormalDensityFunction(dbX As Double) ' = n(x)
 
    Const PI = 3.14159265358979
 
          CulculationNormalDensityFunction = Round((1 / Sqr(2 * PI)) * Exp(-(dbX ^ 2) / 2), 6)
 
End Function
 
Sub CulculationDelta1Function()
 
         dbDelta1 = Round((Log(curCSP / curSP) + (dbIr + 0.5 * dbSV ^ 2) * dbTM) / dbSV * Sqr(dbTM), 6)
 
End Sub
Заранее спасибо
Вложения
Тип файла: xls OptionCalculator_without1.xls (44.5 Кб, 22 просмотров)
0
здесь больше нет...
3372 / 1670 / 184
Регистрация: 03.02.2010
Сообщений: 1,219
03.02.2012, 16:59 6
Лучший ответ Сообщение было отмечено как решение

Решение

1) у меня ошибок не возникло
2) твой код написан в стиле #не допущено цензурой#

3) замени начало на:
Visual Basic
1
2
3
4
5
    curCSP = Range("B1")    ' current stock price (= S )
    curSP = Range("B2")    ' strike price (= K )
    dbSV = Range("B3")    ' stock volatility (= sigma )
    dbIr = Range("B4")    ' interest rate (= r )
    dbTM = Range("B5")    ' time to maturity (= T )
4) процедура с названием ...Function заставляет задуматься о вменяемости кода
5) переменные уровня модуля (в таком количестве) - это очень "не здоровье"

6) = 1) ошибок не возникло
3
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
03.02.2012, 18:03  [ТС] 7
Цитата Сообщение от аналитика Посмотреть сообщение
1) у меня ошибок не возникло
2) твой код написан в стиле #не допущено цензурой#

3) замени начало на:
Visual Basic
1
2
3
4
5
    curCSP = Range("B1")    ' current stock price (= S )
    curSP = Range("B2")    ' strike price (= K )
    dbSV = Range("B3")    ' stock volatility (= sigma )
    dbIr = Range("B4")    ' interest rate (= r )
    dbTM = Range("B5")    ' time to maturity (= T )
4) процедура с названием ...Function заставляет задуматься о вменяемости кода
5) переменные уровня модуля (в таком количестве) - это очень "не здоровье"

6) = 1) ошибок не возникло
Спасибо за критику кода .

Странно эта ошибка ликвидировалась когда я @#$@#$ всякую по удалял. Вот в этом файле ошибка точно есть.
Вложения
Тип файла: xls OptionCalculator_111.xls (66.5 Кб, 38 просмотров)
1
15137 / 6411 / 1730
Регистрация: 24.09.2011
Сообщений: 9,999
03.02.2012, 22:05 8
Вызвал подпрограмму наугад - получил Overflow, опять же потому что все переменные =0.
Переменные считываются из ячеек только в Sub CallOptionCalculator(), соответственно, в начале каждой подпрограммы следовало бы вызывать ее (но, конечно, не из тех, которые вызывает она сама, иначе произойдет зацикливание).

В Sub CulculationDeltaFunction() - неопределенное имя dbCNF_d1

Добавлено через 8 минут
Цитата Сообщение от аналитика Посмотреть сообщение
4) процедура с названием ...Function заставляет задуматься о вменяемости кода
Вообще-то это обычный метод объявления процедуры без параметров, но которая не видна из окна Alt+F8.
Альтернативы: Private - но тогда она не видна из других модулей,
Property Get - слишком вычурно
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2012, 22:05
Помогаю со студенческими работами здесь

Run-time error при сжатии базы данных
Добрый день! Подскажите, пожалуйста, как упредить ошибку 3045, возникающую при запуске команды...

SQL-запрос в Access, ошибка: Run-time error 3464 Несоответствие типов данных в выражении условия отбора.
Добрый день! Помогите решить проблему. Есть поле regdate в Access-таблице типа Дата/время, где я в...

Ошибка 'Run-time error '-2147217842(80040e4e)' Automation error'.
На VB6.0 сделал несколько форм для вывода данных из базы Access на экран.Выложил на сервер, со...

Ошибка в VB6.0 и Access: 'Run-time error -2147217842(80040e4e) Automation error'.
На Visual Basic 6.0 сделал форму которая выводит на экран данные из таблиц Access.Сделал .EXE и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru