看板 Visual_Basic 關於我們 聯絡資訊
※ 引述《mindscold (********)》之銘言: : 請問一下以下做同一件事的2種程式寫法: : (一) : sht2.Cells(5, i + 1) = IIf(sht2.Cells(4, i + 1) = 0, "0", sht1.Cells(5, i + 1) : / sht2.Cells(4, i + 1)) : (二) : If sht2.Cells(4, i + 1) = 0 Then : sht2.Cells(5, i + 1) = 0 : Else : sht2.Cells(5, i + 1) = sht1.Cells(5, i + 1) / sht2.Cells(4, i + 1) : End If : ====我是分隔線===== : 請問一下這2行明明都是去判斷sht2.cells(4,i+1)這個欄位是否為0,一但為0則直接指 : 定sht2.cells(5,i+1)為0,否則計算sht1.cells(5,i+1) / sht2.cells(4,i+1)後傳入。 : 但是一但sht2.cells(4,i+1) = 0且sht1.cells(5,i+1)為空白時,方法(一)即馬上出現 : 溢位的錯誤,而方法(二)卻能正確執行。 : 為什麼會這樣呢?謝謝 If是陳述式,選擇性執行,條件成立才會執行 IIf是函數,傳入參數後判斷要回傳哪一個結果 以下示範2種寫法的執行流程有何不同... a = 0 b = 0 If a = 0 Then b = b + 1 Else b = b + 2 -> a = 0 指派 -> b = 0 指派 -> a = 0 比較,得到 True -> b + 1 運算,因為上面是 True,所以執行此行 -> b = 1 指派,前一個運算結果指派給 b 變數 a = 0 b = 0 b = IIf(a = 0, b + 1, b + 2) -> a = 0 指派 -> b = 0 指派 -> a = 0 比較,得到 True -> b + 1 運算 -> b + 2 運算 -> IIf(True, 1, 2) 呼叫函數,並傳入參數 -> b = 2 獲得函數的傳回值為2,並指派給 b 變數 雖然覺得 IIf 函數很方便,但並不喜歡這寫法,因為無法選擇性執行 題外話,覺得basic在這點就比c/c++/c#/java弱了 c之類語言的寫法 a = 0; b = 0; b += ((a == 0) ? 1 : 2); -- 變數宣告我是故意省略不打的:p -- VB 程式設計 倉木麻衣 PTT 星爺板 行列輸入法 ====================================================== Visual_Basic MaiKuraki Stephen Array -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.194.106.250