2011-08-15 37 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

谢谢,如果我的陈述清单很大,那看起来是首选选项。 –