2016-06-28 1 views
0

열 (V)이 "예"로 표시되면 보관 통합 문서를 만들려고합니다. 매크로 기능이 있었지만 오늘 오후에 다시 테스트했을 때 범위 이탈 오류가 발생했습니다. 내 통합 문서/워크 시트의 이름을 확인했는데 올바른 것이며 두 통합 문서가 같은 폴더에 있습니다. 문제를 해결하려고 시도했지만 두 통합 문서가 모두 열려있을 때만 실행된다는 것을 발견했습니다. 이 아카이브 통합 문서가 열려없이 실행할 수있는 방법이 있나요? (내가 VBA에 새로운 브랜드있어 자신을 가르치고, 그래서 어떤 도움에 감사드립니다!)VBA의 다른 통합 문서에 보관

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Column = 22 Then 
    If Target = "Yes" Then 
Application.EnableEvents = False 
    nxtRow = Workbooks("FPPE Archive.xlsm").Worksheets("EUHM Onboard").Range("V" & Rows.Count).End(xlUp).Row + 1 
    Target.EntireRow.Copy _ 
Destination:=Workbooks("FPPE Archive.xlsm").Worksheets("EUHM Onboard").Range("A" & nxtRow) 
    Target.EntireRow.Delete 
End If 
End If 
Application.EnableEvents = True 
End Sub 
+0

어떻게 매크로 실행 책이이 닫혀 들고한다면 (기능 모두에 대해 인터넷을 통해이있다)? – findwindow

답변

1

방법이 문제의 코드는 서면으로 작성하려면 아카이브 통합 문서가 작동하도록 열려 있어야합니다.

아래의 리팩터링 코드는 필요한 것을 제공합니다. 필요할 때마다 보관 워크 북을 열고 업데이트 한 다음 닫습니다.

먼저 통합 문서가 열려 있는지 먼저 확인하여 조금 더 멋지게 만들 수 있습니다.

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Target.Column = 22 and Target = "Yes" Then 

     Application.EnableEvents = False 

     Dim wb as Workbook 
     Set wb = Workbooks.Open(ThisWorkbook.Path & "\FPPE Archive.xlsm" 

     Dim ws as Worksheet 
     Set ws = wb.Worksheets("EUHM Onboard") 

     nxtRow = ws.Range("V" & Rows.Count).End(xlUp).Row + 1 

     Target.EntireRow.Copy Destination:=ws.Range("A" & nxtRow) 

     Target.EntireRow.Delete 

     wb.Close True 

     Application.EnableEvents = True  

    End If 

End Sub 
+0

Scott, 다른 것들에 약간의 꼬임을 만들 때 코드를 사용했습니다. 오늘 오후에 다시 테스트하여 범위를 벗어난 오류를 받았습니다. 내 통합 문서/워크 시트의 이름을 확인했는데 정확합니다. 문제를 해결하려고했지만 V 열에서 "예"를 선택하면 매크로가 전혀 등록되지 않습니다. 무엇이 문제 일 수 있습니까? 강조 표시된 행은 "Set wb = ..." –

+0

'매크로가 전혀 등록되지 않습니다 .' -'Application.EnableEvents = True'를 확인하십시오. 직접 실행 창을 사용하여이를 다시 설정할 수 있습니다. 코드가 중간 스트림을 깨면 다시 켜지 않았을 수 있습니다. 오류가 발생하면 통합 문서 경로와 이름이 디렉터리에서 유효한지 확인하십시오. –