解決VBA執行時錯誤13 型別不匹配問題
阿新 • • 發佈:2021-02-12
技術標籤:經驗分享
解決VBA執行時錯誤13 型別不匹配問題
先說解決方法:找到出錯的語句以後給裡面的引數改型別,使其互相相容。
- 比如:給單元格Cells()外面套個馬甲 Val()
- 比如:給數字外面套個馬甲Int()
詳細的排查過程後面會慢慢講……這是一個翻轉靈異的奇怪問題。
我這邊出問題的例子參見楊洋老師的書《深入淺出Excel VBA》第3章,3.2.1節,我原樣敲僅VBE裡面執行就報錯了:
Sub Scores()
Dim i
For i = 3 To 5
Cells(i, 6) = Cells(i, 3) + Cells(i, 4) + Cells( i, 5)
Cells(i, 7) = Cells(i, 6) / 3 '報錯就在這一行
Next i
End Sub
我試了下,解決方案有二:
- Val(Cells(i, 6)) 也就是給Cells(i, 6) 穿馬甲
- 或者, In(3)—— 強調下3不是字串是整數()
解決歸解決,但是要搞清楚之前死在哪裡才行,於是我在程式碼里加了一句顯示資料型別的程式碼
Sub Scores()
Dim i
For i = 3 To 5
Cells(i, 6) = Cells(i, 3) + Cells(i, 4) + Cells(i, 5)
MsgBox MsgBox TypeName( Cells(i, 6))
'讓EXCEL給我跳個彈窗看看這單元格里面到底什麼資料格式
MsgBox MsgBox TypeName(3)
'再看看一個數字3還能是什麼形式……
Cells(i, 7) = Cells(i, 6) / 3
Next i
End Sub
果然,Cells(i,6)的資料型別不是正常的變數或者整數,而是range
而3就是平平無奇的integer
那麼問題來了,Range不能被integer除可以理解,給range套上Val()完全可以理解,variant和一切都搭嘛……但為什麼給本來就是integer的3外面套上一層Int()也可以解決問題不再報錯呢???
看到這裡只是一般奇怪哈,更奇怪的是
當我把兩條MsgBox程式碼刪掉,想再看看報錯效果