作者fumizuki (蒙面加菲狮)
看板Visual_Basic
标题Re: [VBA ] IIF指令的溢位
时间Sat Apr 25 15:45:56 2009
※ 引述《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