2015-01-23 2 views
0

Excel 작업 표에는 '작업'과 '도시'라는 두 개의 시트가 있습니다. '작업'시트의 레코드 유효성 검사 코드를 '도시'시트의 코드와 비교해야합니다. 나는 두 개의 서로 다른 통합 문서에서 동일한 작업을 수행 할 경우 두 개의 다른 Excel 통합 문서의 열을 비교하는 방법

Dim CityString As String 
Dim CityArray() As String 

'Get the last row 
'Dim lastRow As Integer 
LastRow = Sheets("Task").UsedRange.Rows.Count 
nLastRowSheet2 = Sheets("Cities").UsedRange.Rows.Count 

Dim c As Range 
Dim d As Range 
Dim e As Variant 

'Turn screen updating off to speed up macro code. 
'User won't be able to see what the macro is doing, but it will run faster. 
Application.ScreenUpdating = False 

For Each c In Worksheets("Task").Range("A2:A" & LastRow) 
    CityString = c 
    CityArray() = Split(CityString, ";") 
    For Each e In CityArray() 
     e = Trim(e) 

     Dim rngFnder As Range 
     On Error Resume Next 

      Set rngFnder = Sheets("Cities").Range("A2:A" & nLastRowSheet2).Find(e) 

      If rngFnder Is Nothing Then 
       c.Interior.Color = vbRed 
      End If 

     On Error GoTo 0 
    Next 
Next 

는 지금은 또 다른 요구 사항이 다음과 같이

나는 그것을 할 수 있어요.

('작업'과 '도시'시트는 두 개의 서로 다른 통합 문서에있는)

사람이 말해 줄 수; 위 코드에 대한 모든 변경 사항은 무엇입니까?

답변

2

"두 개의 서로 다른 엑셀 시트"라고 말하면 다른 Excel 통합 문서 파일에 있다고 생각합니까?

다음 줄을 사용하면 현재 통합 문서의 "작업"시트가 참조됩니다.

잘못된 것을 기록하지 않도록 통합 문서를 지정해야합니다. 이 워크 북을 사용하면 코드가 포함 된 통합 문서를 참조 할 수 있습니다. 통합 문서가 당신이 통합 문서에 대한 자세한 내용을 알고 싶은 경우에 당신이

dim wrk as Workbook 
set wrk = Workbooks.Open("C:\Docs\example.xls") 
wrk.Worksheets("Task").Range("A2:A" & LastRow) 

를 사용하여 열 수 있습니다 닫혀있는 경우

ThisWorkbook.Worksheets("Task").Range("A2:A" & LastRow) 

는 현재 통합 문서 사용

Workbooks("example.xls").Worksheets("Task").Range("A2:A" & LastRow) 

를 포함하여 열려있는 모든 통합 문서에 액세스하려면 VBA 당신은 그들에 대해 읽을 수 있습니다 here

0

나는 다른 wor 이름이 'Sample_Data.xlsx'인 kbook에 '도시'라는 시트가 있습니다.

그래서 아래 코드에서 다른 부분을 올바르게 수정해야합니다. 내 'Sample_Data.xlsx'통합 문서를 닫을 때. 아래 코드는 통합 문서를 엽니 다. 그러나 검증을하지 마십시오.

Dim CityString As String 
Dim CityArray() As String 

'Get the last row 
'Dim lastRow As Integer 
LastRow = Sheets("Task").UsedRange.Rows.Count 

Dim wrk As Workbook 
Set wrk = Workbooks.Open("E:\Final\Sample_Data.xlsx") 

nLastRowSheet2 = wrk.Worksheets("cities").UsedRange.Rows.Count 

Dim c As Range 
Dim d As Range 
Dim e As Variant 

'Turn screen updating off to speed up macro code. 
'User won't be able to see what the macro is doing, but it will run faster. 
Application.ScreenUpdating = False 

For Each c In Worksheets("Task").Range("A2:A" & LastRow) 
    CityString = c 
    CityArray() = Split(CityString, ";") 
    For Each e In CityArray() 
     e = Trim(e) 

     Dim rngFnder As Range 
     On Error Resume Next 

     Set rngFnder = wrk.Sheets("Cities").Range("A2:A" & nLastRowSheet2).Find(e) 

     If rngFnder Is Nothing Then 
      c.Interior.Color = vbRed 
     End If 

     On Error GoTo 0 
    Next 
Next 
+0

"For Each"줄에서는 워크 시트 ("작업") 대신 wrk.Worksheets ("작업")을 사용해야합니다. 첫 번째는 열려있는 통합 문서를 나타내고 두 번째는 현재 활성화되어있는 통합 문서를 나타냅니다. –

+0

어떤 라인이 고장입니까? 오류가 발생하면 제거하고 오류를보고 다음에 약간의 정보를 제공하십시오. – Dubison

+0

@PaulKelly Buddy; 이거 작동 안 할거야. 마찬가지로 '작업'시트의 레코드를 '도시'시트와 비교하고 있습니다. '작업'이 활성 시트입니다. Range is Task 시트에 루프를 적용 할 때마다 변경하지 않아도됩니다. 권리? – Avidan

관련 문제