0

我正在尝试减少 If... Then... Else 语句的代码量,并尝试使用 IIf(expression, true, false) 设置变量。我遇到了一个问题,变量以某种方式设置为 0,这很烦人。

例如:

'Declarations for testing (changing currenty to work for bot and top)
xval = 15
currenty = 20

largebot = 5
largecen = 5
largetop = 5

这个有效:

largebot = IIf(xval > largebot, IIf(currenty >= -1 And currenty <= 21, xval, largebot), largebot)

但是这个没有:

largetop = IIf(xval > largetop, IIf(Range("B2").Value = "RED or BLUE", IIf(material = 18, IIf(currenty >= 41 And currenty <= 64, xval, largetop), IIf(currenty >= 26 And currenty <= 64, xval, largetop)), IIf(currenty >= 22 And currenty <= 49, largetop = xval, largetop)), largetop)

'----------COMMENTS TO EXPLAIN DESIRED OUTCOME-------
'If the xval is greater than the highest x value (largetop),
'And if this is for RED or BLUE machines,
'And if on 18 in. material,
'And within the correct range on the material, xval. (largetop should be the value of xval)
'If on 24 in. material (not 18 in.),
'And within the correct range for 24 in. material, xval. (largetop should be the value of xval)
'If not for RED or BLUE machines (GREEN machine, then),
'If within the correct range, (both 18 in. and 24 in. are in the same range)
'largetop should be the value of xval.
'The remaining false statements keep current value.
4

1 回答 1

2

好吧,所以当我发布这个问题时,我想通了。第一个工作正常,而这个没有,所以我开始怀疑这是否是我的问题,确实是这样。错误是我基本上做了一个声明

largetop = largetop = xval

以粗体显示(如果在代码中,粗体不显示):

largetop = IIf(xval > largetop, IIf(Range("B2").Value = "RED or BLUE", IIf(material = 18, IIf(currenty >= 41 And currenty <= 64, xval, largetop), IIf( currenty >= 26 And currenty <= 64, xval, largetop)), IIf(currenty >= 22 And currenty <= 49, largetop = xval , largetop)), largetop)

将其更改为xval 即可解决问题!希望有人会发现这很有用...

于 2015-10-13T15:44:44.740 回答