2014-03-19 4 views
1

하나의 워크 시트 (Sheet1)에서 다른 워크 시트 (Sheet3)로 활성 행을 복사하려고합니다. 두 워크 시트는 Row No. 14부터 시작하여 테이블로 포맷됩니다. 아래 워크 시트에서 다른 워크 시트로 레코드를 복사하는 코드가 있습니다. 그러나 시트 1에서 시트 3으로 레코드를 복사하면 첫 번째 레코드는 28 번 행에, 다음은 42 번 행에 복사됩니다. Row15부터 레코드를 복사해야합니다 (예 : 행 번호 15 이후의 첫 번째 빈). 알려 주시기 바랍니다.한 워크 시트의 행 복사 (표 형식)

Private Sub CommandButton1_Click() 
    Dim tbl As ListObject 
    Dim tblRow As ListRow 
    Dim lastRow As Long 

    If UCase(Range("F" & ActiveCell.Row)) <> "YES" Then 
     MsgBox "Value not set to 'Yes'; Record not added" 
     Exit Sub 
    End If 

    With ThisWorkbook.Worksheets("Sheet3") 

     If Not IsError(Application.Match(Range("B" & ActiveCell.Row), .Range("B:B"), 0)) Then 
      Response = MsgBox("Record already exists, add again?", vbQuestion + vbYesNo + 256) 
      If Response = vbNo Then Exit Sub 
     End If 

     Set tbl = .ListObjects(1) 
     If tbl.Range(tbl.Range.Rows.Count, "B") = "" Then 
      lastRow = Application.Min(tbl.Range(tbl.Range.Rows.Count, "B").End(xlUp).Row + 1, _ 
          Application.Max(4, .Cells(.Rows.Count, "B").End(xlUp).Row + 1)) 
     Else 
      lastRow = tbl.ListRows.Add.Range.Row 
     End If 

    End With 
    tbl.Range(lastRow, "B").Resize(, 3).Value = _ 
     Range("B" & ActiveCell.Row).Resize(, 3).Value 
    MsgBox "Record added" 

End Sub 
+1

당신은 당신의 통합 문서를 공유 할 수 있습니다 (작업 코드는 CommandButton 2에 할당)인가? 그것이해야하는대로 그것이 나를 위해 일하기 때문에. –

+0

@simoco 여기에 통합 문서를 공유하는 방법을 알려주십시오. :) – user3331363

+1

예를 들어 사용할 수 있습니다. https://www.dropbox.com 통합 문서를 업로드하고 우리에게 단지 링크를 제공 : –

답변

2

이 하나의 작품 :

여기
Private Sub CommandButton2_Click() 
    Dim tbl As ListObject 
    Dim lastRow As Long 

    If UCase(Range("E" & ActiveCell.Row)) <> "YES" Then 
     MsgBox "Value not set to 'Yes'; Record not added" 
     Exit Sub 
    End If 
    'change Sheet3 to destination sheet - where you need to paste values 
    With ThisWorkbook.Worksheets("Sheet3") 
     If Not IsError(Application.Match(Range("A" & ActiveCell.Row), .Range("A:A"), 0)) Then 
      If MsgBox("Audit already exists, add again?", vbQuestion + vbYesNo + 256) = vbNo Then Exit Sub 
     End If 

     Set tbl = .ListObjects(1) 
     If tbl.Range(tbl.Range.Rows.Count, "A") = "" Then 
      lastRow = tbl.Range(tbl.Range.Rows.Count, "A").End(xlUp).Row + 1 
     Else 
      lastRow = tbl.ListRows.Add.Range.Row 
     End If 
     .Range("A" & lastRow).Resize(, 6).Value = _ 
      Range("A" & ActiveCell.Row).Resize(, 6).Value 
     MsgBox "Record added" 
    End With 
End Sub 

Test workbook

+0

이것은 절대적으로 훌륭합니다. 가능한 경우 변경 내용을 설명해 주시겠습니까? – user3331363

+1

단일 변경 내용은 'tbl.Range (lastRow, "B"). Resize (, 3) .Value' ->'.Range ("A"& lastRow) .Resize (, 6). 값 '. 이전 코드에서'lastrow '를 찾는 것이 정확했지만'tbl.Range (lastRow, "B")'는 상대적으로 테이블 헤더를 제공합니다. 예 : 'tbl.Range (lastRow, "B")는 table_14 행 (즉, 시트 행 14+ 14 = 28) –

+0

행을 제공합니다! 고마워요 !! – user3331363

관련 문제