1. 程式人生 > >按鍵精靈除錯三天,氣到吐血!!快速開發指令碼程式碼常見錯誤!絕對乾貨!

按鍵精靈除錯三天,氣到吐血!!快速開發指令碼程式碼常見錯誤!絕對乾貨!

                                                                         來源:按鍵學院   【按鍵精靈】

還記不記得,那些天,急著交指令碼的時候出bug了。通宵了三天三夜,調試出錯。邏輯檢查了一邊又一邊,萬行程式碼反反覆覆翻來覆去推敲了無數遍。結果……

不要告訴我是中英文符號寫錯了,變數定義出錯了,我保證不打死我自己……

1:定義變數時直接賦值

報錯提示:沒有找到合法的符號

//(錯誤程式碼0)沒有找到合法的符號

Dim a = 1

正確程式碼:定義變數時不能直接賦值哦~

Dim a

a = 1

2:迴圈語句未設定迴圈次數

報錯提示:沒有找到合法的符號

//第0行:無法計算取值。錯誤附加碼=775:0

For '(錯誤碼0)沒有找到合法的符號。

MessageBox a

Next

正確程式碼:迴圈語句,需要在for迴圈後面,加上迴圈次數哦~不然電腦那麼笨……

For 5

        MessageBox a

Next

3:語句書寫不全

報錯提示:無法計算取值。錯誤附加碼=775:0

//語句書寫不全

For i = 0 To 10 step

Next

正確程式碼:迴圈語句,在步徑step後,需要指定具體的數值:如step 2 ,每次迴圈結束的時候變數+2;step 1,每次迴圈結束變數+1。

For i = 0 To 10 step 1        

Next

4:未設定迴圈條件

報錯提示:無法計算取值。錯誤附加碼=775:0

//語法錯誤:指令碼 11-12 ,第21行,第7個字元:(錯誤碼0)沒有找到合法的符號。

//語義錯誤:指令碼 11-12 ,第0行:無法計算取值。錯誤附加碼=775:0

While 

Wend

正確程式碼:親,沒有定義變數,也沒有設定while的迴圈條件哦(while後面加一個引數:迴圈條件)

Dim a

a = 1

While a = 1

Wend

5:變數名與子程式、子函式重名

報錯提示:名稱有重複。錯誤附加碼=3102:0

//語義錯誤:指令碼 11-12 ,第60行:名稱有重複。錯誤附加碼=3102:0

Dim 找字

Sub 找字()

End Sub

正確程式碼:定義的變數名稱,不能與已有的子程式或者子函式重名哦~不然按鍵無法判斷你想呼叫的是誰~

6:取陣列元素下標超出範圍

報錯提示:下標越界: '[number: 11]'

//指令碼 **.Q ,第**行:下標越界: '[number: 11]', 

Dim a(9)

MessageBox a(11)

正確程式碼:在按鍵精靈中,定義陣列時dim a(9),意味著陣列a的最大下限是a(9)。而在呼叫的時候,記得千萬不能超過定義的陣列下限哦·~~

7:錯誤型別作大小比較

報錯提示:型別不匹配: 'A'

//指令碼 11-12.Q ,第37行:型別不匹配: 'A', 

Dim a

a = "a"

If a > 1 Then 

        MessageBox "a大於1"

End If

正確程式碼:“If a > 1”,左邊是字串,右邊是數值,無法進行比較~若需要將其作比較可先將字串轉換成ANSI程式碼後比較

Dim a

a = "a"

//得到"a"的ANSI字元程式碼後作大小比較

If Asc(a) > 1 Then 

        MessageBox "a大於1"

End If

8:使用陣列未先定義

報錯提示:型別不匹配: 

//指令碼 11-12.Q ,第52行:型別不匹配: 'MYARRAY', 

//指令碼 11-12.Q ,第53行:型別不匹配: 'A', 

W1 = Clng(MyArray(0))

w1=clng(a(1))

正確程式碼:又是一個呼叫變數的時候,沒有好好定義的憂桑錯誤:

Dim MyArray(5)

Dim a(5)

W1 = Clng(MyArray(0))

w1=clng(a(1))

9:延時命令不合理

Delay 6000

//上面語句可用下面的限定次數迴圈語句取代,可解決按停止鍵停不下來的情況。

For 60

        Delay 100

Next

報錯提示:根本停不下來啊啊啊……

10:子程式使用錯誤

報錯提示:無法計算取值。

//指令碼 常見指令碼錯誤 ,第66行:無法計算取值。錯誤附加碼=775:120

TracePrint prints("ss")

Sub prints(str1)

        prints = str1

End Sub

正確程式碼:sub子程式無返回值,若想輸出返回值使用Function函式哦~

TracePrint prints("ss")

Function prints(str1)

        prints = str1

End Function