엑셀에서 가끔 나타나는 에러입니다.
엑셀에서 행의 마지막이 200번 이라면, 스크롤바의 박스는 아래에 위치해야 합니다.
하지만, 아래 그림과 같이 마지막 200번 행에 위치해도, 스크롤바 박스가 여전히 위에 있습니다.
이런 에러가 발생하는 이유는 엑셀에서 스크롤바를 UsedRange로 마지막셀을 잘못 인식하기 때문입니다. 그래서, 정확한 마지막 셀의 위치를 찾아 주면 됩니다.
즉, UsedRange의 마지막 셀과 find로 찾은 마지막 셀을 비교해서 잘못된 정보를 제거해 줍니다.
아래는 코드 예제 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | Sub 스크롤바_일치_시키기() Dim MR, MC As Long 'MaxRow MaxCol Dim i_used_row, i_used_col As Long '2가지 방법으로 마지막 셀의 행과 열을 구한다. '1번 방법 : find를 이용해서 마지막 셀을 찾는다(find명령은 쉬트에 값이 없으면 에러, 그래서 에러 무시명령 넣어 준다) '2번 방법 : UsedRange를 이용해서 마지막 셀을 찾는다. '2번 방법으로(UsedRange) 정해진 셀의 마지막을 기준으로 스크롤바가 생성된다. '그래서, find로 찾은 셀주소와 비교해서 불필요한 영역을 삭제해준다. On Error Resume Next MR = Cells.Find("*", , , , xlByRows, xlPrevious).row If Err.Number = 0 Then Err.Clear Else MR = 1 End If On Error GoTo 0 On Error Resume Next MC = Cells.Find("*", , , , xlByColumns, xlPrevious).Column If Err.Number = 0 Then Err.Clear Else MC = 1 End If On Error GoTo 0 i_used_row = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).row i_used_col = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column '1번과 2번을 비교해서 데이터가 없는 영역을 삭제 If MR < i_used_row Then Range(Rows(MR + 1), Rows(i_used_row)).EntireRow.Delete If MC < i_used_col Then Range(Columns(MC + 1), Columns(i_used_col)).EntireColumn.Delete 'UsedRange를 재 활성화 ActiveSheet.UsedRange End Sub | cs |