2016-04-20 16 views
-1

VBAを使い慣れていて、それについてほとんど知らない。エンジニアリングプロジェクトに使用して、斜面の安定性の問題を解決します。最初の7つの計算に入ると、VBAはこれらをユーザーフォームで正しく解決します。しかし、私が8番目の公式(AVHS8)を計算しようとすると、それは私にエラーを与えます、魔女はランタイムエラー "13"タイプの不一致です。私は問題が何であるか分かりません。数式は完璧に優れています。もし誰かがそれを助けることができればそれは大いに感謝されるでしょ問題は以下の通りです。vbaエラー13タイプミスマッチ、VBA

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)) 
+0

どのような種類の変数として宣言されます。最後の行を次のように変更しますか?倍増すると私のサンプル値はAVHS8 == 7.31540576925892になります。 –

+0

「Dim」問題のような音がします。使用した変数はコード内で宣言されていません。したがって、VBAはあなたのための決定を下し、変数を宣言します。 OH(例えば)は17に割り当てられ、「整数」として宣言されるかもしれません。しかし、Integerは最後の計算の中間結果を保持するのに十分ではありません。すべての変数を 'Double'(単にこの理論をテストする)として' Dim 'して、やり直してみてください。 – Ralph

+0

@Ralph明示的な宣言なしでは、それらは 'Variant'型です。 「OH」の「バリアント」のタイプは最初はVT_I4になりますが、分数になるとVT_R8になります。 – Bathsheba

答えて

0

を変更しないだけで数字はどのだろう、です問題を説明してください。コントロールとして、内容はテキストで、実際に7.52.5(10ではなく)を返す(DTCP + BES)を使用すると、+は連結演算子としても機能するためです。

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

それはダン迷惑なのですが、 - 、/、*などを使うことができますが、ポップアップするとすべてがポットになります! –

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? 
関連する問題