다른 파일의 첫 번째 파일에서 한 열의 값을 비교하는 매크로를 작성하고 있습니다. 다른 파일의 값을 찾지 못하면 매크로는 행을 삽입 한 다음 누락 된 값을 복사해야합니다. 현재 디버거가 응용 프로그램 또는 개체 정의 오류를 표시하면서 문제가 발생합니다. 어떤 아이디어가 문제 일 수 있겠습니까?VBA 매크로 2 파일 비교
나는 순간이 코드는 이것이다 :
Sub CheckC()
Dim i As Integer
Dim sh1 As Variant
Dim sh2 As Variant
i = 6
sh1 = Application.Workbooks("workbookc.xlsx").Worksheets("sheet name").Range(Cells(6, 3), Cells(6, 3).End(xlDown)).Value
sh2 = Application.Workbooks("workbookm.xlsm").Worksheets("Sheet1").Range(Cells(6, 3), Cells(6, 3).End(xlDown)).Value
For Each val_sh1 In sh1
flag = False
For Each val_sh2 In sh2
i = i + 1
If val_sh1 = val_sh2 Then
flag = True
Exit For
End If
Next val_sh2
If flag = False Then
Workbooks("workbookm.xlsm").Worksheets("Sheet1").Range(Cells(i, 1), Cells(i, 9)).Select
Selection.Insert Shift:=xlUp, CopyOrigin:=xlFormatFromLeftOrAbove
Workbooks("workbookc.xlsx").Worksheets("sheet name").Range(Cells(i, 1), Cells(i, 9)).Copy Destination:=Workbooks("workbookm.xlsm").Worksheets("Sheet1").Range(Cells(i, 1), Cells(i, 9))
End If
Next val_sh1
End Sub
편집 업데이트 : 가 나는 당신의 제안을 사용하여, 몇 가지 해결책을 온, 귀하의 답변에 대한 여러분 모두 감사합니다. 최종 코드는 다음과 같습니다.
Sub CheckC()
Dim i As Long
Dim ws1 As Excel.Worksheet
Set ws1 = Workbooks("workbookc.xlsx").Worksheets("sheet name")
Dim ws2 As Excel.Worksheet
Set ws2 = Workbooks("workbookm.xlsm").Worksheets("Sheet1")
Dim sh1 As Range
Dim sh2 As Range
i = 5
counter = 0
ws1.Activate
Set sh1 = ws1.Range(Cells(6, 3), Cells(6, 3).End(xlDown))
ws2.Activate
Set sh2 = ws2.Range(Cells(6, 3), Cells(6, 3).End(xlDown))
For Each val_sh1 In sh1
flag = False
i = i + 1
For Each val_sh2 In sh2
If val_sh1 = val_sh2 Then
flag = True
Exit For
End If
Next val_sh2
If flag = False Then
ws2.Range(Cells(i, 1), Cells(i, 9)).Select
Selection.Insert Shift:=xlDown
ws1.Activate
ws1.Range(Cells(i, 1), Cells(i, 9)).Select
Selection.Copy
ws2.Activate
ws2.Range(Cells(i, 1), Cells(i, 9)).Select
ActiveSheet.Paste
counter = counter + 1
End If
Next val_sh1
MsgBox counter & " new rows were added to workbookm"
ws2.Activate
Range("A1").Value = "workbookm updated on " & Now()
End Sub
정상적으로 작동합니다.
나머지 코드에 대해서는 잘 모르겠지만 현재 변수 'sh1'과'sh2'는 시트 나 범위가 아니라 범위에서 선택된 셀 중 하나의 값입니다. 물론 루프를 통해 문제를 일으킬 수 있습니다. – SCB
미안하지만 프로그래밍에 익숙하지 않습니다. 이 두 변수의 선언을 범위로 변경하면 여전히 동일한 문제가 발생합니다. 마치 프로그램이 다른 통합 문서에 액세스 할 수없는 것입니다. – Jakub
활성화되지 않은 시트를 선택하려고하면 오류가 발생합니다. 시트를 클릭하여 활성화 한 다음 실행 해보십시오. –