VBA - оценивать все утверждения, когда больше 1 - PullRequest
0 голосов
/ 15 августа 2011

Я хочу оценить список операторов для ячейки (например, имеет верхнюю границу, нижнюю границу и т. Д.) И передать результаты в объект коллекции.Однако, если / elseif прекратит оценку, когда найдет первое истинное утверждение, то же самое относится и к Select Case.

Есть ли другой способ, который я могу использовать для этого?

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

Ответы [ 4 ]

6 голосов
/ 15 августа 2011

Не можете просто использовать

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 голосов
/ 15 августа 2011

Просто измените elseif на if.У вас будет N блоков if / endif (где N - количество оцениваемых вами свойств).Затем, когда кто-то успешен, он просто перейдет к следующему.

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

и т. Д.

3 голосов
/ 15 августа 2011

Я бы предложил вам использовать серию операторов If-Then, по одному для каждой вещи, которую вы хотите проверить.

1 голос
/ 16 августа 2011

Вам это помогает?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...