我试图从我的Inv变量中获取最小值..但是我认为我可以将i = y添加到If Tmp ...语句的末尾,所以一旦它适用于Tmp&lt ;有趣的是它可以将i计数设置为y,然后我可以稍后再去使用(Inv(y))对象。不确定这是否会起作用它现在在我的头脑中是有道理的。总结我的问题...为什么msgbox y最终给我的值为0,即使我不是。任何反馈都会很棒,非常感谢您提前
Dim Fun As Variant
Dim Tmp As Variant
Dim Inv() As String
Dim i As Integer
Dim y As Integer
Inv = Split("NBInv NEBInv EBInv SEBInv SBInv SWBInv WBInv NWBInv")
Fun = 1000
For i = 0 To UBound(Inv)
Tmp = Val(ActiveSheet.OLEObjects(Inv(i)).Object.Value)
If Tmp <> 0 And Tmp <> "" And Tmp < Fun Then Fun = Tmp And i = y
Next i
Smallest = Fun
MsgBox y
答案 0 :(得分:1)
让我们将您的If
语句拆开,看看它实际上 做了什么 :
将条件表达式拉入其块:
If Tmp <> 0 And Tmp <> "" And Tmp < Fun Then
Fun = Tmp And i = y
End If
在赋值右侧添加隐含括号:
If Tmp <> 0 And Tmp <> "" And Tmp < Fun Then
Fun = (Tmp And i = y)
End If
将隐含括号添加到And
:
If Tmp <> 0 And Tmp <> "" And Tmp < Fun Then
Fun = (Tmp And (i = y))
End If
现在查看表达式i = y
- 因为它位于右侧,所以评估为Boolean
,因此它是0
或{ {1}}投射到数字时。我们假设它是-1
并将其放回表达式:0
。这是执行二进制和操作。然后,您将结果分配给Temp And 0
。这是唯一可以设置的东西。
我猜测你的意图是......
Temp
...虽然分配给你的循环计数器是一个坏主意。