2011-08-15 3 views
0

セルのステートメントのリストを評価し、その結果をコレクションオブジェクトに渡すことができます。しかし、最初の真の文が見つかったときにIf/elseifが評価を停止すると、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

これは完全に良い解決策ですが、私は2つの部分の間にブレークポイントを置かないようにするために ":"を使用することをお勧めします。 – 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

私はあなたがチェックしたいものごとに1つの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

ありがとう、私のステートメントのリストが巨大だった場合、それは好ましいオプションに見えます。 –

関連する問題