2016-03-21 42 views
0

我一直在這裏停留一段時間,並得到運行時錯誤13 - 類型不匹配。如何知道單元格的數據類型

Dim Qty, ItemCost, Tot 
Qty = wi.Range("C" & i).Value2    'Qty 
ItemCost = wi.Range("K" & i).Value2   'Item Cost 
Tot = CInt(Qty) * CInt(ItemCost) 

當我嘗試C和K列單元格上的IsNumeric時,它們是正確的,但仍然出現該錯誤。

我也嘗試:

Tot = Qty * ItemCost 

而且

Tot = CDbl(Qty) * CDbl(ItemCost) 

而且

Tot = Qty * CInt(ItemCost) 

並將其轉換爲整數或雙數據類型的其它不同組合。

我也手動將col C和K格式化爲Numbers。

仍然錯誤仍然存​​在。我不知道該怎麼做,我錯了?

+3

如何將實際的變量聲明爲你想要的類型。現在他們被設置爲'Variant'(默認情況下不聲明**特定的**變量)。所以'Dim數量爲Double,ItemCost爲Double,Tot爲Double'(或整數而不是Double)。 –

+0

我建議你分別轉換每個值來找出導致錯誤的原因,然後找出原因,如果它們實際上應該是數字。 – Rory

+0

@ScottHoltzman我特別將它們聲明爲Double。然後,當我將值賦給'Qty'時,我得到了錯誤。這意味着col C具有Int數據類型值,我猜。 – newguy

回答

2

你需要事情:

  • 一個更好的方式,使數值變量
  • 一個更好的方式來看看是怎麼回事錯

考慮:

Sub dural() 
    Dim Qty As Long, Qty_Text As String, wi As Worksheet, i As Long 
    Set wi = ActiveSheet 
    i = 1 

    Qty_Text = Trim(wi.Range("C" & i).Text) 
    On Error GoTo wtf 
     Qty = CLng(Qty_Text) 
    On Error GoTo 0 
    Exit Sub 
wtf: 
    MsgBox wi.Name & vbCrLf & i & vbCrLf & wi.Range("C" & i).Text 
    On Error GoTo 0 
End Sub 

enter image description here

+0

'On Error GoTo wtf'的獎勵積分,但我已經看過Sub Dural()'太多次了。 :) – Jeeped

+1

@Jeeped下次我會用更多的想象力................'Sub Jeeped()'怎麼樣? –

相關問題