2011-08-15 40 views
0

我想評估一個單元格的語句列表(例如,有頂部邊框,底部邊框等)並將結果傳遞給一個集合對象。但是,如果/ elseif在找到第一個true語句時停止計算,則對於Select Case也是如此。VBA - 當所有的語句超過1時,評估所有語句

有沒有其他方法可以用來做到這一點?

Dim BorderColl As Collection 
Set BorderColl = New Collection 

If RngCell.Borders(xlDiagonalDown).LineStyle <> xlNone Then 

    BorderColl.Add "xlDiagonalDown", LCase("xlDiagonalDown") 

ElseIf RngCell.Borders(xlDiagonalUp).LineStyle <> xlNone Then 

    BorderColl.Add "xlDiagonalUp", LCase("xlDiagonalUp") 

ElseIf RngCell.Borders(xlEdgeBottom).LineStyle <> xlNone Then 

    BorderColl.Add "xlEdgeBottom", LCase("xlEdgeBottom") 

ElseIf RngCell.Borders(xlEdgeLeft).LineStyle <> xlNone Then 

    BorderColl.Add "xlEdgeLeft", LCase("xlEdgeLeft") 

ElseIf RngCell.Borders(xlEdgeRight).LineStyle <> xlNone Then 

    BorderColl.Add "xlEdgeRight", LCase("xlEdgeRight") 

ElseIf RngCell.Borders(xlEdgeTop).LineStyle <> xlNone Then 

    BorderColl.Add "xlEdgeTop", LCase("xlEdgeTop") 

End If 

回答

3

只需將elseif更改爲if即可。你將有N個if/endif塊(其中N是你正在評估的屬性的數量)。那麼當一個人成功時,它就會轉向下一個人。

if someproperty then: do something 
if someOtherProperty then: do something else 

等等等等

+1

有時答案是如此明顯,但頭腦已停止工作......非常感謝! –

+1

雖然這是一個非常好的解決方案,但我會推薦使用「:」,因爲它會阻止您在兩個部分之間放置一個斷點,使其更難調試。 – aevanko

+0

Issun,完全正確,我只是在這些情況下使用它,因爲邏輯非常簡單,查看集合的最後會告訴你什麼出了問題(如果有的話)。 –

6

廣東話你只是用

Dim BorderColl As Collection 
Set BorderColl = New Collection 

If RngCell.Borders(xlDiagonalDown).LineStyle <> xlNone Then 
    BorderColl.Add "xlDiagonalDown", LCase("xlDiagonalDown") 
End If 
If RngCell.Borders(xlDiagonalUp).LineStyle <> xlNone Then 
    BorderColl.Add "xlDiagonalUp", LCase("xlDiagonalUp") 
End If 
. 
. 
. 

3

我建議你使用一系列的If-Then語句,每個要檢查的東西之一。

1

這是否幫助你嗎?

Dim rngcell As Range, lBorder As Long, sStyles As Variant 

    sStyles = Split(",,,,XLDIAGONALDOWN,XLDIAGONALUP,XLEDGELEFT,XLEDGETOP,XLEDGEBOTTOM,XLEDGERIGHT,XLINSIDEVERTICAL,XLINSIDEHORIZONTAL", ",") 

    Set rngcell = Range("A1") 
    For lBorder = 5 To 12 
     If rngcell.Borders(lBorder).LineStyle <> xlNone Then 
      Debug.Print lBorder, sStyles(lBorder - 1) 
     End If 
    Next 
+0

謝謝,如果我的陳述清單很大,那看起來是首選選項。 –