2017-12-22 43 views
1

매크로를 개발했습니다. 워크 시트 내에서 버튼을 눌러 행을 복사하여 붙여 넣을 수 있습니다. 특정 기준이 특정 컬럼 내에서 충족 될 때 다른 워크 시트.매크로를 복사하여 페이지 아래로 붙여 넣지 않고 다른 워크 시트에 붙여 넣기하는 매크로

문제는 매크로가 실행되면 다른 스프레드 시트에 복사하여 붙여 넣기를 수행하지만 평균적으로 평균 150-200 개의 작업이 있더라도 8000 번째 행에 붙여 넣기한다는 것입니다. 대상 시트.

또한 여기에 추가하면 8000 번째 행에 붙여 넣어서 행에 이미있는 항목을 덮어 씁니다.

매크로를 동시에 실행하여 매번 다음 사용 가능한 행에 붙여 넣기 만하면 다른 행을 덮어 쓰지 않고 다음 새 행을 계속 찾습니다.

내 로그에는 서식 지정이 있지만 테두리 및 두 개의 데이터 유효성 검사 드롭 다운 목록 만 있습니다.

내가 개발 한 코드

은 다음과 같습니다 :

Dim xRg As Range 
Dim xCell As Range 
Dim I As Long 
Dim J As Long 
Dim K As Long 
I = Worksheets("Demand Log").UsedRange.Rows.Count 
J = Worksheets("Change Log").UsedRange.Rows.Count 
If J = 1 Then 
    If Application.WorksheetFunction.CountA(Worksheets("Change Log").UsedRange) = 0 Then J = 0 
End If 
Set xRg = Worksheets("Demand Log").Range("O5:O" & I) 
On Error Resume Next 
Application.ScreenUpdating = False 
For K = 1 To xRg.Count 
    If CStr(xRg(K).Value) = "Change Team" Then 
     xRg(K).EntireRow.Copy Destination:=Worksheets("Change Log").Range("A" & J + 0) 
     xRg(K).EntireRow.Delete 
    End If 
Next 
Application.ScreenUpdating = True 

사람이 많이 주시면 감사하겠습니다이 매크로의 발전에 도움이 할 수 있습니다.

매크로가 대상 스프레드 시트에 복사하여 붙여 넣을 수있을뿐만 아니라 원본 시트에서 행을 삭제하기 전에 행을 세 번째 스프레드 시트에 복사하는 것이 좋습니다.

많은 감사

+0

다음과 같이 J + 0은 무엇을 달성할까요? 아무것도. 그것은 J입니다. 그리고 J = 0 일 때 어떻게됩니까? 내가 존재하지 않는 행 0으로 작업하려고 할까봐 걱정됩니다. – QHarr

+1

나는 오류 재개를 의심한다. 다음은 닫히지 않는 것은 오류를 숨기는 것이고, 나는 행을 결정하기 위해 UsedRange를 사용하는 것에주의해야한다. – QHarr

+0

그리고 행을 거꾸로 삭제해야합니다. 그렇지 않으면 잘못 삭제 될 수 있습니다. – QHarr

답변

1

당신이 "사용"인 것으로 생각하고 싶지 않은 포맷 세포가 특히, 스프레드 시트에서 마지막으로 사용한 행을 찾을 UsedRange를 사용하지 마십시오.

더 신뢰할 수있는 방법이 될 것 같은 뭔가 :

J = Worksheets("Change Log").Cells(Worksheets("Change Log").Rows.Count, "A").End(xlUp).Row 


귀하의 코드는 (당신이 항상 "사용"행의 데이터가 포함됩니다 뭐든지 열이 "A" 대체) J을 한 번 계산 한 다음 그 J 번째 행에 새로운 정보를 지속적으로 붙여 넣습니다. 행을 대상에 쓸 때마다 J를 증가시켜야합니다.

아마도 사용

J = J + 1 

단지에서 해결 될 수있는 문제에 언급되지 않은 행 삭제와의 문제가 발생할 수 (

xRg(K).EntireRow.Copy Destination:=Worksheets("Change Log").Range("A" & J) 

전에 그 문제를 해결할 수 없다면 또 다른 질문입니다.하지만 Stack Overflow에 관한 많은 질문/답변이 해당 문제를 해결할 것입니다.)

+0

그래서 당신이 조언 한 내용을 통합하기 위해 VBA를 편집했습니다. 그러나 4 개의 작업을 가로 질러 붙이기가 필요하다면 두 작업을 없애고 하나만 붙이면됩니다. 내 코드에 이것이 일어날 것이라고 제안하는 것이 있습니까? – Adamlh77

+0

@ Adamlh77 예, 반대 방향 대신 첫 번째 행에서 마지막 행까지 삭제를 처리한다는 사실입니다. 죄송합니다 - 아니요 - 모든 내용이 복사/삭제되지는 않지만 일부 내용은 복사되지 않고 삭제되지는 않습니다. – YowE3K

+0

답장을 보내 주셔서 감사합니다. 어떻게 바꾸시겠습니까? – Adamlh77