2017-01-23 5 views
3

단일 문장으로 셀의 왼쪽과 오른쪽 테두리를 모두 설정하는 방법이 궁금하십니까? msgBox 구성과 비슷한 방법으로 결합/추가 할 수 있습니다 (예 : vbYesNo + vbQuestion). 나는 시도했다 :VBA에서 왼쪽과 오른쪽 셀 테두리를 동시에 설정

Cells(j, i).Borders(xlEdgeLeft + xlEdgeRight) 

나를 위해 오류가 발생합니다. 더 우아한 방법이 있나요

For i = 1 To 10 
    For j = 2 To 6 + numAcft 
     Cells(j, i) = "Week Start Date" 
     With Cells(j, i).Borders(xlEdgeLeft) 
      .LineStyle = xlContinuous 
      .Weight = xlMedium 
     End With 
     With Cells(j, i).Borders(xlEdgeRight) 
      .LineStyle = xlContinuous 
      .Weight = xlMedium 
     End With 
... 
... 

: 내가 가지고 올 한 내용을 여기에

... 개별적으로 국경 코드에 약간의 중복입니까? @ 에간 - 늑대와 여기 @robinmackenzie에 전체 신용와


내가 위의 질문에 대답하는 데 사용되는 전체 솔루션입니다. 제안 된대로 도우미 함수를 만들고 테두리를 설정하려는 셀을 전달하고 라인 스타일 &의 무게를 사용하여 8 줄의 코드를 훨씬 더 읽기 쉬운 단일 줄로 바꾸십시오.

setLeftAndRightEdges Cells(j, i), xlContinuous, xlMedium

Private Sub setLeftAndRightEdges(ByVal cell As Range, ByVal lineStyle As Long, ByVal weight As Long) 
     Dim edges(1) As Variant 
     Dim edge As Variant 

     edges(0) = xlEdgeLeft 
     edges(1) = xlEdgeRight 

     For Each edge In edges 
      cell.Borders(edge).LineStyle = lineStyle 
      cell.Borders(edge).weight = weight 
     Next edge 
End Sub 
+0

모든 4에 테두리를 설정할 수 있습니다 : 왼쪽, 오른쪽, 위, 아래 함께 –

+1

그냥 왼쪽과 오른쪽 원하는 모든 사 –

답변

3

좀 더 우아한 방법으로 부를 것이다 확실하지만,이 중복되지 수있는 옵션입니다하지 코드

Dim edges(1) As Variant 
edges(0) = xlEdgeLeft 
edges(1) = xlEdgeRight 
For Each edge In edges 
    ActiveCell.Borders(edge).LineStyle = xlContinuous 
Next edge 
+0

날 시도가 얼마나 그것의 깔끔한 물건을 볼 수 있다고 보겠습니다 . 감사! –

+2

당신은 좋은 도우미 함수로 그것을 확장하여 다른 테두리 모서리의 배열을 설정할 수 있습니다. 그래서 +1 –

+0

@RobinMackenzie 매우 우아합니다 - 읽기 쉬운 한 줄로 약 30 개 다른 장소에서 사용되는 동일한 코드의 8 줄로 바뀌 었습니다 선. 굉장해! –

0

방법에 대해 :

With Cells(j, i) 
    .Borders(xlEdgeLeft).LineStyle = xlContinuous 
    .Borders(xlEdgeRight).LineStyle = xlContinuous 
End With 

이것을 사용하면 추가 for 루프가 필요하지 않습니다.

rng.Offset(0, -1).Resize(1, 3).Borders(xlInsideVertical).LineStyle = xlContinuous

트릭 당신이 포함 된 범위를 얻고 싶은 것입니다 :

0

여기 rng 우리가 이미 정의한 Range 목적은 한 - 라이너로 할 수있는 약간 해키 방법 왼쪽 및 오른쪽 셀을 대상 범위로 이동 한 다음 해당 셀 그룹에 대해 안쪽 세로 경계를 설정합니다. 이것은 원래 셀의 왼손 및 오른손 경계를 설정하는 효과가 있습니다.

  • Offset(0, -1)

    대상 셀
  • Resize(1, 3)의 왼쪽 셀로 진행하여 타겟 셀
  • Borders(xlInsideVertical).LineStyle...의 행 3 열까지의 범위를 확장의 범위 내 카테고리의 포맷을 설정 3 세포.

샘플 코드 :

Option Explicit 

Sub Test() 

    Dim ws As Worksheet 
    Dim rng As Range 

    'sheet 
    Set ws = ThisWorkbook.Worksheets("Sheet1") 

    'target range 
    Set rng = ws.Range("B8") 

    'one-liner to set left and right borders 
    rng.Offset(0, -1).Resize(1, 3).Borders(xlInsideVertical).LineStyle = xlContinuous 

End Sub 

편집 : @EganWolf에 의해 지적이 열 A의 셀에 대해 작동하지 않습니다 또는, 그 문제에 관해서는 오른쪽에서 작동하지 않습니다 시트의 가장 먼 쪽 열. 이 '가장자리'경우에는 추가 코딩이 필요합니다.

+0

원래 셀이 A 열에 있으면 작동하지 않습니다. 또한 측면에 셀에 테두리가 추가됩니다. 테두리는 셀에 할당되므로 B1의 왼쪽 테두리는 A1의 오른쪽 테두리와 같지 않습니다. 이러한 셀을 이동하여 확인할 수 있습니다. –

+0

사실이지만 다른 열의 셀에서도 작동합니다! –

+0

예. 사실입니다. –

0

고양이가 말하는 것처럼 피부를 여러 가지 방법이 있습니다.에 대한 방법 :

Dim edge As Variant 

For edge = xlEdgeLeft To xlEdgeRight Step xlEdgeRight - xlEdgeLeft 
    Cells(j, i).Borders(edge).LineStyle = xlContinuous 
Next