Страницы: 1
RSS
Ошибка типа переменной (Single vs Variant vs Object)
 
есть такая рабочая функция, в которой периодически вылетает ошибка что переменная Q должна быть либо Variant либо Object, никто не знает в чем косяк? и в какую сторону копать:
Код
Function Д_ГлубинаКОНДитерации1(ДНКТ As Single, Д_г As Single, Гл As Single, Д As Single, Т As Single, Т_г As Single, П_по_в As Single, Кр_Д As Single, Кр_Т As Single, кол_итераций As Integer) As Single
Dim Pn As Single
Dim Tplast As Single
Dim Tust As Single
Dim Pust As Single
Dim L As Single
Dim Re As Single
Dim Den As Single
Dim Q As Single

Dn = ДиНКТ
Q = Д_г
Hperf = Гл
Pust = Д
Tust = Т
Tplast = Т_г
DensVoz = П_по_в
Den = в

Tn = Tsred(Tplast, Tust)
Zn = z_real(Pust / Кр_Д, Tn / Кр_Т)
Den = ((0.5173 * 10 ^ (-6) * ((1 + 0.678 * (1.104 - 0.25 * 0.678))) * (Tn / Кр_Т * (1 - 0.1038 * Tn / Кр_Т + 0.037) * (1 + (Pn / Кр_Д) ^ 2 / (30 * Tn / Кр_Т - 1)))) * 10000)
Re = 1777 * (Q * DensVoz) / (Dn * Den)
L = 1 / (4 * (Log(5.62 / Re ^ 0.9 + 7.41 / (2 * 0.03 / 10 / Dn))) ^ 2)
Pn = (((Pust ^ 2) * Exp(2 * ((Hperf * 0.03415 * DensVoz) / (Zn * Tn)))) + 0.000000000001413 * L * (Zn ^ 2 * Tn ^ 2 / Dn ^ 5) * (Exp(2 * ((Hperf * 0.03415 * DensVoz) / (Zn * Tn))) - 1) * Q ^ 2) ^ 0.5
For i = 1 To кол_итераций
    Pn = 2 / 3 * (Pn + Pust ^ 2 / (Pust + Pn))
    Zn = z_real(Pn / Кр_Д, Tn / Кр_Т)
    Д_ГлубинаКОНДитерации1 = (((Pust ^ 2) * Exp(2 * ((Hperf * 0.03415 * DensVoz) / (Zn * Tn)))) + 0.000000000001413 * L * (Zn ^ 2 * Tn ^ 2 / Dn ^ 5) * (Exp(2 * ((Hperf * 0.03415 * DensVoz) / (Zn * Tn))) - 1) * Q ^ 2) ^ 0.5
    Pn = Д_ГлубинаКОНДитерации1
Next i
End Function
 
Цитата
MEP написал: в которой периодически вылетает ошибка
Какова периодичность? При каких условиях появляется ошибка?
При вводе функции на листе что Вы указываете для аргумента Д_г ?

З,Ы, Для чего Вы в коде вводите новые переменные и присваиваете им значения аргументов? Используйте сами аргументы в вычислениях или дайте аргументам имена Ваших переменных.
Изменено: Sanja - 20.03.2016 20:43:22
Согласие есть продукт при полном непротивлении сторон
 
для аргумента Д_г обычно положительные числа (зачастую дробные) - от 0,100000 до 1000,00000

сам макрос не я составлял. думаю если так сделали значит надо было. но по вашему совету попробую переделать.
Изменено: MEP - 20.03.2016 15:11:08
 
Так в каких случаях ошибка возникает? Закономерность заметили?
По той информации, которую Вы дали сейчас, единственное предположение, что аргументу Д_г пытаетесь присвоить не Single-значение, а, например, диапазон ячеек
Согласие есть продукт при полном непротивлении сторон
 
закономерности пока не заметил. запустил файл, вылетела ошибка. причем приходится через диспетчер закрывать.
потом открываешь, вроде нормально.
я вот думаю может присвоить другой тип. но какой был бы оптимальнее?
 
Цитата
MEP написал:
я вот думаю может присвоить другой тип. но какой был бы оптимальнее?
Если не знаете тип, то вариант... имхо.
 
А какая версия и разрядность Windows и Office у Вас?
Согласие есть продукт при полном непротивлении сторон
 
Win 64 (7ка) , Office 2013 32bit
 
Попробуйте как Михаил С., посоветовал
....As Variant
Согласие есть продукт при полном непротивлении сторон
 
 спасибо. понаблюдаю )
 
Как правило ошибка может возникать при вызове функции, если в неё передаются аргументы с типами, не соответствующие объявленным в самой функции. Вот есть у Вас аргумент: ДНКТ As Single. Значит переменная, которая будет передана в функцию должна быть тоже объявлена как Single или приведена к этому типу принудительно. Или объявляйте как Variant, что не лучший вариант, конечно, раз у Вы знаете типы, которые должны быть использованы в функции.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх