2014-10-01 2 views
0

엑셀 2007 vba에서 첫 발을 내딛고 있습니다. 내가 뭘 하려는지 내 마지막과 내 두 번째 마지막 엑셀 시트를 비교하고 마지막 하나의 차이점을 강조 매크로를 코딩하는 것입니다. 아래에서 볼 수 있듯이 디버깅 모드를 사용할 때 Excel은 다음과 같은 코드를 작성하고 Excel에서 오류를 표시하지 않지만 변경이 수행 된 셀은 표시하지 않습니다. 누구든지 모양을 가지고 아래 코드에서 실수를 수정할 수 있습니까? 고맙습니다.두 엑셀 시트 비교하기, 동일한 통합 문서, 강조 표시 차이점

Sub compare() 
Dim sh1 As Worksheet, sh2 As Worksheet 
Dim rCount As Long, cCount As Long 
Set sh1 = Worksheets(Sheets.Count - 1) 
Set sh2 = Worksheets(Sheets.Count) 
rCount = sh1.Cells(Rows.Count, 1).End(xlUp).Row 
cCount = sh1.Cells(Rows.Count, 1).End(xlUp).Row 
Dim r As Long, c As Integer 
For r = 1 To rCount 
    For c = 1 To cCount 
     If sh1.Cells(r, c) <> sh2.Cells(r, c) Then 
      sh2.Cells(r, c).Interior.ColorIndex = 3 
     End If 
    Next c 
Next r 

최종 하위

+0

귀하의 cCount는 rCount과 동일하지만 표시되지 않은 세포를 설명하지 않습니다. rCount의 가치를 테스트 해 보셨습니까? – Barry

답변

0

내 생각 만 SH1에서 한 행의 데이터를 가지고있다. rcount를 지정할 때 1의 값을 얻고 cCount를 할당 할 때 rcount와 같은 방식으로 할당하기 때문에 동일한 값을 얻게됩니다. 그런 다음 아마 단일 행과 단일 열을 반복하면서 하나의 셀만 비교 한 다음 서브 루틴을 종료합니다.

아마도 당신은 의미 : cCount = sh1.Cells(1, ColumnsCount).End(xltoLeft).Column

+0

행과 열에 대한 조언이 정확했습니다. 고맙습니다! Marco는 sh1 및 sh2에 대해 정의 된 이름으로 작업합니다. 그러나 그 이름은 역동적이고 내 코드로 마지막 및 두 번째 마지막 시트는 사용되지 않습니다. 어떤 아이디어? – Doozer

+0

불행하게도 왜 동적 인 '마지막 시트'로직이 작동하지 않는 지 잘 모르겠습니다. 이전에는 사용 된 적이 한번도 본 적이 없지만 보지 못했던 부분이 많아서 귀하의 상황에 적합하다고 생각했습니다. 'DataSheet1', 'DataSheet2'등과 같은 일반적인 시트 명명 규칙을 고려할 수 있습니다. 그런 다음 시트를 반복하여 오른쪽 (Worksheet.name, 1)을 선택하여 어떤 시트가 "마지막"시트인지 확인할 수 있습니다. – JNevill

관련 문제