2014-07-24 1 views
0

매크로를 사용하여 선택한 셀 범위에 서식을 추가하고 있습니다. (Excel 2007) 선택한 범위의 열과 행 수는 항상 다릅니다. 또한 선택한 영역이 항상 같은 워크 시트에있는 것은 아닙니다.선택한 매크로 범위의 마지막 두 번째 행에 서식을 적용하는 Excel 매크로

매크로를 기록하고 코드를 약간 변경했지만, 선택한 범위의 끝에서 두 번째 행의 셀에 서식을 적용 할 수있는 방법을 알아낼 수 없었습니다.이 경우 두 줄 밑줄 .

Sub feladat() 

Application.ScreenUpdating = False 

Application.CutCopyMode = False 
With Selection 
    .HorizontalAlignment = xlCenter 
End With 

Selection.Borders(xlDiagonalDown).LineStyle = xlNone 
Selection.Borders(xlDiagonalUp).LineStyle = xlNone 
With Selection.Borders(xlEdgeLeft) 
    .Weight = xlMedium 
End With 
With Selection.Borders(xlEdgeTop) 
    .Weight = xlThin 
End With 
With Selection.Borders(xlEdgeBottom) 
    .Weight = xlMedium 
End With 
With Selection.Borders(xlEdgeRight) 
    .Weight = xlMedium 
End With 
With Selection.Borders(xlInsideVertical) 
    .Weight = xlThin 
End With 
With Selection.Borders(xlInsideHorizontal) 
    .Weight = xlThin 
End With 

Selection.SpecialCells(xlCellTypeFormulas, 23).Select 
Selection.Font.Bold = True 

Application.ScreenUpdating = True 

End Sub 

I 오프셋을 사용하여 끝에서 두 번째 행을 발견했지만, 현재 셀은 항상 다른 장소에있는 매크로를 실행 한 후 이후 행운과 함께했습니다.

답변

0

첫째, 단지 몇 가지 조언 : 당신이 정말로 선택에 서식을 적용해야하는 경우, it'ok가 .Select를 사용합니다. 그러나 우선 VBA에 대해 배워야합니다 : 선량하고 효율적인 코드를 작성하려면 선택 및 활성화를 피해야합니다. 그런 다음 추가

TheRow = Selection.Rows.Count-1 + Selection(1).Row 
With Workbooks("NameOfYourWorkbook").Worksheets("NameOfYourWorksheet").Rows(TheRow) 
    ' Your formatting here WITHOUT writing Selection 
    ' For example: .Borders(xlDiagonalDown).LineStyle = xlNone 
End With 

이 선택의 행 수를 얻을 것이다 1. 빼기 : 선택한 범위의 끝에서 두 번째 행의 선택을 얻기 위해

어쨌든, 당신은 명령의 간단한 쌍을 사용할 수 있습니다 첫 번째 셀의 행, 그래서 당신은 명확한 절대 행 주소를 얻을.
완료하면 서식을 적용 할 수 있습니다. 이것도 새로운 선택이 필요하지 않습니다.

+0

고마워요! 오늘 저는 새로운 것을 배웠습니다 :). – vargap

+0

통합 문서의 워크 시트에서 작업하고 Selection.Rows.Count 뒤에 "-2"를 넣으려면 코드를 약간 조정했는데 그렇지 않으면 완벽하게 작동합니다! – vargap

+0

:) 듣기에 행복합니다! – Noldor130884

0

시도해 두 번째 끝의 행을 찾아 서식을 적용하십시오. 매크로를 실행하기 전에 범위를 선택하십시오. 모든 편집

Sub NewMacro() 
ShtNm = ActiveSheet.Name 
Var = Split(Selection.Address, "$") 
Rwcnt = Var(UBound(Var)) 
NewRng = Var(1) & (Rwcnt-1) & ":" & Var(3) & (Rwcnt-1) 
Sheets(ShtNm).Range(NewRng).Select 
Call feladat 'Call your function 
End Sub 
+0

감사! 나는 그것을 시도했지만 불행히도 제대로 작동하지 않았다. 끝에서 두 번째 행을 찾았지만 원래 셀렉션 이외의 셀도 선택했습니다. (아마도 열에 다른 데이터가 있기 때문일 수 있습니다). 선택 후에는 원래 매크로를 호출했지만 원래의 매크로가 아닌 새롭게 선택된 범위에서 실행되었습니다. – vargap

+0

선택한 영역이 동일한 워크 시트에 있지 않음을 언급하지 않았으므로 원래 게시물을 편집합니다. – vargap

+0

귀하의 논리에 따라 편집했습니다. 확인 해봐. –