VBA代碼由于簡單實用,大家都很喜歡,但有些代碼怎么看都沒有問題,調試時卻總是出錯?
究竟是為什么呢,其實代碼本身沒有錯,在正常情況下都沒有問題,錯在運行環境本身出了問題,下面舉例予以說明:
1、微軟在定義屬性時,進行了長度限制
比如:區域的Address屬性,雖然是字符串,卻是定長字符串,不能超過256個字符。
如果用它來獲取單元格地址,只能獲取前256個字符。
(一般情況下不會出問題,但如果單元格區域是很零散的單元格區域,就可能出錯)
2、VBA中屬性解釋與實際不符
比如:Cells.SpecialCells(xlCellTypeLastCell),微軟幫助中:用于獲取“已用區域中的最后一個單元格”,但實際上是獲取“已用區域中的最后一個可見單元格”,
如果已用區域最后一個單元格正好被隱藏,就與該屬性的定義產生偏差,導致代碼達不到預期效果。
3、兼容32位環境的限制
在VB環境中,長整型變量是long,最大支持 2,147,483,647,約21億,似乎很大了,
在excel2000/2003沒有問題,但在excel2007及以上版本中就可能出問題,
如果你執行這一句:MsgBox Cells.Count,肯定會出錯,因為現在支持1048576行*16384列,已經21億,超過了長整型的限制。
而且Rows.count*Columns.count也會出錯,其原因也是一樣,雖然單個都沒有超上限,但結果超長整型上限也不行。
4、VBA代碼在VSTO中,由于環境變化,也會出現異常
比如:ActiveSheet.HPageBreaks.add,在VBA、COM中都正常,在VSTO中會導致下一行內容丟失。
因此,在編寫代碼時預先考慮到以上等情況,可以減少你調試的難度,避免走彎路。