2017-03-15 21 views
1

我想從我的Inv變量中獲得最小值。但是,我認爲我可能能夠將i = y添加到如果Tmp ...聲明一旦適用於Tmp <有趣的是它可以將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

'y'在最後是0,因爲你從未將'y'設置爲任何東西 - 所以它只給出默認值'0'。 –

+0

「然後Fun = Tmp和i = y」我也嘗試過y = i,但它仍然給我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轉換爲數字時。我們假設它是0並將其放回表達式:Temp And 0。這是執行一個二進制和操作。然後將結果分配給Temp。這是唯一被設置的東西。

猜測你的意圖是這樣的......

If Tmp <> 0 And Tmp <> "" And Tmp < Fun Then 
    Fun = Tmp 
    i = y 
End If 

...雖然分配給您的循環計數器是一個壞主意。

相關問題