2016-04-20 6 views
-1

Новое в использовании VBA и об этом мало известно. Использование его для проекта Engineering для решения проблем с устойчивостью к сильному склоне. При входе в первые 7 вычислений VBA правильно решает их в пользовательской форме. Но когда я пытаюсь вычислить 8-ю формулу (AVHS8), она дает мне ошибку, ведь ошибка времени «Ошибка 13» не совпадает. Я не уверен, в чем проблема, формулы работают отлично. если кто-то мог бы помочь, это было бы очень признательно. Проблема ниже.vba error 13 type missmatch, VBA

BES = 2,5 РАД = 18,58 ЗСЦП = 7,5 и ОН = 17, это просто цифры, которые устанавливаются и не изменяют

Private Sub Calculate_Click() 
RAD = Sqr(DTCP^2 + OH^2) 
BES = DTCP/3 
AVHS1 = (0) 
AVHS2 = (Sqr(RAD^2 - (DTCP - BES)^2) - OH) 
AVHS3 = (Sqr(RAD^2 - (DTCP - BES - BES)^2) - (OH) + (Tan(30 * 3.14/180) * BES)) 
AVHS4 = (Sqr(RAD^2 - (DTCP - BES - BES - BES)^2) - (OH) + (Tan(30 * 3.14/180) * BES * 2)) 
AVHS5 = (Sqr(RAD^2 - (DTCP - BES - BES)^2) - (OH) + (Tan(30 * 3.14/180) * BES * 3)) 
AVHS6 = (Sqr(RAD^2 - (DTCP - BES)^2) - (OH) + (Tan(30 * 3.14/180) * BES * 4)) 
AVHS7 = (Sqr(RAD^2 - (DTCP)^2) - (OH) + (Tan(30 * 3.14/180) * BES * 5)) 
'VBA can solve all the above code. it cant solve the code below (AVHS8) 
AVHS8 = (Sqr(RAD^2 - (DTCP + BES)^2) - (OH) + (Tan(30 * 3.14/180) * BES * 6)) 
+0

Какие типы переменных задекларирован как? ваши значения выборки дают AVHS8 == 7.31540576925892 для меня, когда удваивается –

+0

Звучит как проблема 'Dim'. Ни одна из переменных, которые вы использовали, не объявлена ​​в вашем коде. Итак, VBA принимает решение для вас и объявляет переменные для вас. OH (например) назначается 17 и может быть объявлено как «Целое число». Тем не менее, Integer не хватило бы, чтобы провести какой-либо промежуточный результат от последнего вычисления. Попробуйте «Dim» все переменные как «Double» (просто проверить эту теорию) и повторите попытку. – Ralph

+0

@Ralph без явных деклараций, они являются типами «Вариант». Тип 'Variant' для' OH' будет первоначально VT_I4, но станет VT_R8, если он станет дробным. – Bathsheba

ответ

0

Я предполагаю, что те элементы управления на форме, а не переменные, которые были бы объясните проблему. В качестве элементов управления содержимое является текстовым, и когда вы используете (DTCP + BES), который фактически возвращает 7.52.5, а не 10, потому что + также будет работать как оператор конкатенации. Измените последнюю строку на:

AVHS8 = (Sqr(RAD^2 - (CDbl(DTCP) + CDbl(BES))^2) - (OH) + (Tan(30 * 3.14/180) * BES * 6)) 
+0

Это dang раздражает, вы можете использовать -, /, * и т. Д., Но как только вы появляетесь в +, все идет в банк! –

0
Sub Leverage() 

Dim i As Long 
Dim counter_less As Long 
Dim count_pos As Long 

Dim row_count As Long 
Dim num As Variant 

num = InputBox("Enter threshold") 


row_count = Cells(1, 1).CurrentRegion.Rows.Count - 2 

counter_pos = 0 
counter_less = 0 

For i = 1 To row_count 

If Abs(Cells(i + 2, 3)) > num And Cells(i + 3, 3) <> "" Then 

counter_less = counter_less + 1 
     If Cells(i + 3, 3) < 0 And i Then 
      counter_pos = counter_pos + 1 
    End If 
    End If 
    Next 
counter_pos = counter_pos/(counter_less) 
counter_less = counter_less/row_count 
MsgBox counter_pos & " %"`enter code here` 
End Sub 

I get error 6: Overflow. Anyone has any suggestions?