2013-07-30 138 views
0

我在嘗試提交用戶表單時收到「運行時錯誤13」。運行時錯誤'13':類型不匹配 - excel用戶表格

dTotal1 = CDbl(sval1) + CDbl(sval2) + CDbl(sval3) + CDbl(sval4) + CDbl(sval6) 

這裏是完整的代碼。請幫忙。

Private Sub AddTextBox() 

Dim sval1 As Variant 
Dim sval2 As String 
Dim sval3 As String 
Dim sval4 As String 
Dim sval5 As String 
Dim sval6 As String 
Dim sval7 As String 
Dim sval8 As String 
Dim sval9 As String 
Dim sval10 As String 
Dim sval11 As String 
Dim sval12 As String 
Dim sval13 As String 
Dim sval14 As String 
Dim sval15 As String 
Dim sval16 As String 
Dim sval17 As String 
Dim sval18 As String 
Dim sval19 As String 
Dim sval20 As String 
Dim sval21 As String 
Dim sval22 As String 
Dim sval23 As String 
Dim sval24 As String 
Dim sval25 As String 

Dim sval100 As String 
Dim sval101 As String 
Dim sval102 As String 
Dim sval103 As String 
Dim sval104 As String 

Dim sval105 As String 
Dim sval106 As String 
Dim sval107 As String 
Dim sval108 As String 

Dim sval109 As String 
Dim sval110 As String 
Dim sval111 As String 
Dim sval112 As String 

Dim sval113 As String 
Dim sval114 As String 
Dim sval115 As String 

Dim sval116 As String 
Dim sval117 As String 



Dim sval31 As String 
Dim sval32 As String 
Dim sval33 As String 
Dim sval34 As String 
Dim sval35 As String 
Dim sval36 As String 
Dim sval37 As String 
Dim sval38 As String 
Dim sval39 As String 
Dim sval40 As String 
Dim sval41 As String 
Dim sval42 As String 
Dim sval43 As String 
Dim sval44 As String 
Dim sval45 As String 
Dim sval46 As String 
Dim sval47 As String 
Dim sval48 As String 




Dim dTotal1 As String 
Dim dTotal2 As String 
Dim dTotal3 As String 
Dim dTotal4 As String 
Dim dTotal5 As String 
Dim dTotal6 As String 
Dim dTotal11 As String 
Dim dTotal12 As String 
Dim dTotal13 As String 
Dim dTotal14 As String 
Dim dTotal15 As String 
Dim dTotal16 As String 
Dim dTotal17 As String 

With Me 

    sval1 = .CB1.Value 
    sval2 = .CB2.Value 
    sval3 = .CB3.Value 
    sval4 = .CB4.Value 
    sval6 = .CB6.Value 
    sval100 = .CB1.Value 
    sval101 = .CB2.Value 
    sval102 = .CB3.Value 
    sval103 = .CB4.Value 
    sval104 = .CB6.Value 
    sval31 = .CB1.Value 
    sval32 = .CB2.Value 
    sval33 = .CB3.Value 
    sval34 = .CB4.Value 
    sval35 = .CB6.Value 



    sval7 = .CB7.Value 
    sval8 = .CB8.Value 
    sval9 = .CB9.Value 
    sval10 = .CB10.Value 
    sval105 = .CB7.Value 
    sval106 = .CB8.Value 
    sval107 = .CB9.Value 
    sval108 = .CB10.Value 
    sval36 = .CB7.Value 
    sval37 = .CB8.Value 
    sval38 = .CB9.Value 
    sval39 = .CB10.Value 



    sval11 = .CB11.Value 
    sval12 = .CB12.Value 
    sval13 = .CB13.Value 
    sval14 = .CB14.Value 
    sval109 = .CB11.Value 
    sval110 = .CB12.Value 
    sval111 = .CB13.Value 
    sval112 = .CB14.Value 
    sval40 = .CB11.Value 
    sval41 = .CB12.Value 
    sval42 = .CB13.Value 
    sval43 = .CB14.Value 



    sval15 = .CB15.Value 
    sval16 = .CB16.Value 
    sval17 = .CB17.Value 
    sval113 = .CB15.Value 
    sval114 = .CB16.Value 
    sval115 = .CB17.Value 
    sval44 = .CB15.Value 
    sval45 = .CB16.Value 
    sval46 = .CB17.Value 


    sval18 = .CB18.Value 
    sval19 = .CB19.Value 
    sval116 = .CB18.Value 
    sval117 = .CB19.Value 
    sval47 = .CB18.Value 
    sval48 = .CB19.Value 


    If sval1 = "" Or sval1 = "NA" Then sval1 = 0 
    If sval2 = "" Or sval2 = "NA" Then sval2 = 0 
    If sval3 = "" Or sval3 = "NA" Then sval3 = 0 
    If sval4 = "" Or sval4 = "NA" Then sval4 = 0 
    If sval6 = "" Or sval6 = "NA" Then sval6 = 0 
    If sval100 = "NA" Then sval100 = 0 Else sval100 = 5 
    If sval101 = "NA" Then sval101 = 0 Else sval101 = 3 
    If sval102 = "NA" Then sval102 = 0 Else sval102 = 3 
    If sval103 = "NA" Then sval103 = 0 Else sval103 = 4 
    If sval104 = "NA" Then sval104 = 0 Else sval104 = 5 
    If sval7 = "" Or sval7 = "NA" Then sval7 = 0 
    If sval8 = "" Or sval8 = "NA" Then sval8 = 0 
    If sval9 = "" Or sval9 = "NA" Then sval9 = 0 
    If sval10 = "" Or sval10 = "NA" Then sval10 = 0 
    If sval105 = "NA" Then sval105 = 0 Else sval105 = 7 
    If sval106 = "NA" Then sval106 = 0 Else sval106 = 3 
    If sval107 = "NA" Then sval107 = 0 Else sval107 = 2 
    If sval108 = "NA" Then sval108 = 0 Else sval108 = 2 
    If sval11 = "" Or sval11 = "NA" Then sval11 = 0 
    If sval12 = "" Or sval12 = "NA" Then sval12 = 0 
    If sval13 = "" Or sval13 = "NA" Then sval13 = 0 
    If sval14 = "" Or sval14 = "NA" Then sval14 = 0 
    If sval109 = "NA" Then sval109 = 0 Else sval109 = 5 
    If sval110 = "NA" Then sval110 = 0 Else sval110 = 3 
    If sval111 = "NA" Then sval111 = 0 Else sval111 = 8 
    If sval112 = "NA" Then sval112 = 0 Else sval112 = 10 
    If sval15 = "" Or sval15 = "NA" Then sval15 = 0 
    If sval16 = "" Or sval16 = "NA" Then sval16 = 0 
    If sval17 = "" Or sval17 = "NA" Then sval17 = 0 
    If sval113 = "NA" Then sval113 = 0 Else sval113 = 8 
    If sval114 = "NA" Then sval114 = 0 Else sval114 = 10 
    If sval115 = "NA" Then sval115 = 0 Else sval115 = 10 
    If sval18 = "" Or sval18 = "NA" Then sval18 = 0 
    If sval19 = "" Or sval19 = "NA" Then sval19 = 0 
    If sval116 = "NA" Then sval116 = 0 Else sval116 = 5 
    If sval117 = "NA" Then sval117 = 0 Else sval117 = 7 




    dTotal11 = CDbl(sval100) + CDbl(sval101) + CDbl(sval102) + CDbl(sval103) + CDbl(sval104) 
    dTotal12 = CDbl(sval105) + CDbl(sval106) + CDbl(sval107) + CDbl(sval108) 
    dTotal13 = CDbl(sval109) + CDbl(sval110) + CDbl(sval111) + CDbl(sval112) 
    dTotal14 = CDbl(sval113) + CDbl(sval114) + CDbl(sval115) 
    dTotal15 = CDbl(sval116) + CDbl(sval117) 





    dTotal1 = CDbl(sval1) + CDbl(sval2) + CDbl(sval3) + CDbl(sval4) + CDbl(sval6) 
    dTotal2 = CDbl(sval7) + CDbl(sval8) + CDbl(sval9) + CDbl(sval10) 
    dTotal3 = CDbl(sval11) + CDbl(sval12) + CDbl(sval13) + CDbl(sval14) 
    dTotal4 = CDbl(sval15) + CDbl(sval16) + CDbl(sval17) 
    dTotal5 = CDbl(sval18) + CDbl(sval19) 



    .TextBox1 = Format(dTotal1, "0") 
    .TextBox8 = Format(dTotal11, "0") 
    .TextBox2 = Format(dTotal2, "0") 
    .TextBox9 = Format(dTotal12, "0") 
    .TextBox3 = Format(dTotal3, "0") 
    .TextBox10 = Format(dTotal13, "0") 
    .TextBox4 = Format(dTotal4, "0") 
    .TextBox11 = Format(dTotal14, "0") 
    .TextBox5 = Format(dTotal5, "0") 
    .TextBox12 = Format(dTotal15, "0") 


    End With 



With Me 
    If dTotal1 = "" Then dTotal1 = 0 
    If dTotal2 = "" Then dTotal2 = 0 
    If dTotal3 = "" Then dTotal3 = 0 
    If dTotal4 = "" Then dTotal4 = 0 
    If dTotal5 = "" Then dTotal5 = 0 


    If dTotal11 = "" Then dTotal11 = 0 
    If dTotal12 = "" Then dTotal12 = 0 
    If dTotal13 = "" Then dTotal13 = 0 
    If dTotal14 = "" Then dTotal14 = 0 
    If dTotal15 = "" Then dTotal15 = 0 




    dTotal6 = CDbl(dTotal1) + CDbl(dTotal2) + CDbl(dTotal3) + CDbl(dTotal4) + CDbl(dTotal5) 
    dTotal16 = CDbl(dTotal11) + CDbl(dTotal12) + CDbl(dTotal13) + CDbl(dTotal14) + CDbl(dTotal15) 


     .TextBox6 = Format((dTotal6/dTotal16), "Percent") 

    End With 

End Sub 
+0

您是否聽說過陣列? –

回答

0

此代碼是一個很大的混亂......你可以使用數組,但是,更重要的則是,你應該關心的類型!

無論如何,你的問題應該是CDbl(...)應用於一個空字符串。

編輯:改進建議

  1. 聲明你的數值變量爲Double,而不是String
  2. 更換你塊svalX = .CBX.ValueIf svalX="" Then svalX=## Else svalX=##If IsNumeric(.CB#.Value) Then sval#=.CB#.Value Else sval#=#
  3. 您可以用您dTotal#=CDbl(sval#)+...,但CDbl將不再需要了。
+0

是的,我知道這是一團糟。我對VBA知之甚少。我該如何解決它?我能夠以用戶形式輸入值,它確實顯示了總計和百分比,但是當我提交時,我收到了錯誤消息。 – user2634232

+0

它的工作,但現在我收到一個錯誤消息「運行時錯誤6 - 溢出」的訂單項.TextBox6 =格式(((dTotal6)/(dTotal16)),「百分比」) – user2634232

+0

調試時,請檢查'dTotal16'值。溢出可能來自一個非常小的'dTotal16',因此'dTotal6/dTotal16'非常大。 –

0

你或許可以通過用Val()替換所有的CDbl()調用來修復它,但這並不能真正解決底層問題。

正如LS_Dev所說:介意你的數據類型。儘量避免使用變體,並且不要將數值存儲在字符串變量中,以便將它們再次用作數字。

無論如何,你可能會調用一個包含非數字的字符串的CDbl。 你試圖避免更高的,但你必須失去一些東西。 例如,所有「不適用」都是用大寫字母寫的嗎?除了空字符串和「NA」之外沒有其他特殊情況嗎?

+0

我按照LS_Dev的建議進行了更改。現在,我收到了訂單項.TextBox6 =格式(((dTotal6)/(dTotal16)),「Percent」)的錯誤消息「Run time error 6 - Overflow」 – user2634232

相關問題