VBA ошибка 13 типа несоответствие, VBA

Новичок в использовании VBA и мало что знаю об этом. Использование его для инженерного проекта для решения проблем устойчивости глубинных уклонов. При вводе в первые 7 расчетов VBA корректно решает их в пользовательской форме. Но когда я пытаюсь вычислить 8-ую формулу (AVHS8), она выдает ошибку, которая является ошибкой во время выполнения "13". Я не уверен, в чем проблема, формулы отлично работают в Excel. если кто-то может помочь, это будет высоко ценится. Проблема ниже.

BES = 2,5 RAD = 18,58 DTCP = 7,5 и OH =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))

2 ответа

Решение

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

AVHS8 = (Sqr(RAD ^ 2 - (CDbl(DTCP) + CDbl(BES)) ^ 2) - (OH) + (Tan(30 * 3.14 / 180) * BES * 6))
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?
Другие вопросы по тегам