1. 程式人生 > 其它 >解決VBA執行時錯誤13 型別不匹配問題

解決VBA執行時錯誤13 型別不匹配問題

技術標籤:經驗分享

解決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

我試了下,解決方案有二:

  1. Val(Cells(i, 6)) 也就是給Cells(i, 6) 穿馬甲
  2. 或者, 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程式碼刪掉,想再看看報錯效果

然後,竟然不再報錯說什麼 執行時錯誤13了

只能風中凌亂………………