※ 引述《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