tft每日頭條

 > 生活

 > excelvba開啟失敗

excelvba開啟失敗

生活 更新时间:2024-12-23 22:07:07

編寫代碼總會出現意想不到的錯誤,VBA中對這些錯誤有怎樣的功能提供給代碼編寫者?

一、On Error Resume Next 忽略錯誤繼續執行語句下一條。此語句執行後,其後面的語句産生的錯誤都會被忽略(且不會給出任何提示),堅定地繼續執行下一語句。如果有Do Loop循環語句,極易産生死循環。所以此語句用起來最簡單,但也極易産生大問題。

二、On Error Goto “标簽” VBA提供的更為良性的錯誤處理語句。發生錯誤後跳轉到“标簽”的語句,标簽後面的語句寫上應對不同錯誤的代碼。那麼怎麼知道出現的錯誤是哪個類别的呢?

VBA提供了1個Err 對象。Err 對象 代表最近一次發生的程序運行時的錯誤。

Err.Number 屬性:指錯誤代碼。就是下圖中的“13”。

excelvba開啟失敗(EXCELVBA學習筆記錯誤處理語句)1

VBA的錯誤都有類似的代碼,隻是同樣的錯誤代碼,有時指示的意思有很大差别,讓人很難搞清是哪裡的代碼出問題了。Err.Number 是個可寫的屬性,可以Goto 到錯誤處理語句,執行完語句後,将Err.Number=0 0代表沒有産生錯誤,大于0就表示有錯誤産生。

Err.Description 屬性:該錯誤的描述。如上圖的“類型不匹配”,此描述對于判斷錯誤原因基本沒什麼用。

Err.Clear 方法:将Err的内容清空。

例句:

On Error GoTo wrong n = 0 \ 0 '執行此句,會産生錯誤,就會跳轉到wrong: 标簽。因上面語句,不會産生彈窗。 Exit sub '此句用于隔離 錯誤處理語句與主語句。避免主語句執行完後,還要運行錯誤處理語句 wrong: IF Err.Number > 0 Then Msgbox “産生了未知的錯誤,請檢查” End if Resume Next '返回産生錯誤的語句,并執行其下一條語句

三、On Error Goto 0 恢複默認的VBA處理錯誤的方式,即彈出錯誤提示,并中斷程序運行。

下面介紹幾種錯誤的産生原因,及處理辦法:

1、類型不匹配,錯誤代碼“13”

excelvba開啟失敗(EXCELVBA學習筆記錯誤處理語句)2

(1)賦值與聲明類型不符合。在數組應用中,此錯誤極易遇上。

dim arr() As String arr = Range("A1:B2") '此時會産生 類型不匹配 錯誤 //單元格賦值給數組時,不可以對arr() 聲明具體類型。隻能 Dim arr() 或 Dim arr() As Variant,就是變體類型,否則必報“13”号錯誤。 //因為VBA認為單元格裡會存儲任何類型的數據(不管現在單元格裡實際存儲數據的類型),所以對接的變量也應該具有任何類型。

(2)但是在下面示例中,又必須聲明為具體的類型

excelvba開啟失敗(EXCELVBA學習筆記錯誤處理語句)3

需要 Dim arr() As String 。更好的解決辦法,Dim arr ,将arr 聲明為變體變量,對于聲明為數組适用性更廣。

(3)用For Each 循環中。For Each s In "集合",不管這個集合的數據具體是什麼類型,變量s 都要是變體類型的。否則報"13"錯。

2、 錯誤代碼:91。描述:對象變量或With塊變量未設置。原因(1)賦值時沒寫SET。将對象賦值給變量時,前面需寫上Set 。

(2)引用了“空對象"。如:Dim sh1 as Worksheet sh1.range("A1")=0

Dim sh1 as Worksheet sh1.range("A1")=0 '這裡會報錯,因為sh1還沒被賦值,是個空對象

3、 錯誤代碼:1004。描述:無具體說明。原因:向Excel發出了不能完成的指令。

例:Cells(i,1).value=0 如果i值為0,Excel根本沒有0行,所以報錯。要注意變量的值是否可能為0。

例2:

Sheets(1).Activate Sheets(2).Range("B2")=10 '此句沒有問題 Sheets(2).Range(Cells(1,1),Cells(3,3)).Value=9 '此句會報 1004 錯。 //要寫成 Sheets(2).Range(Sheets(2).Cells(1,1), Sheets(2).Cells(3,3)).Value=9

這是因為VBA會将Cells()單元格,認為是當前激活狀态下工作表的Cells(),于是就産生了錯誤。

在跨工作表複制時,雖沒報錯,但常有這種混亂産生。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved