2014-03-19 30 views
1

我試圖將活動行從一個工作表(Sheet1)複製到另一個工作表(Sheet3)。這兩個工作表都格式化爲從第14行開始的表格。我有下面的代碼將從一個工作表複製記錄到另一個工作表。但是,當我將表1中的一條記錄複製到表3時,第一條記錄將在第28行上進行處理,第42行中的第二條記錄會被處理。我希望從第15行開始複製記錄(即從第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

你可以分享你的工作簿?因爲它適用於我,因爲它應該。 –

+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 

這裏的(分配給CommandButton 2工作代碼)Test workbook

+0

這工作絕對好。如果可能,請你解釋一下這個改變:) – user3331363

+1

單個有價值的改變是'tbl.Range(lastRow,「B」)。Resize(,3).Value' - >'.Range(「A」&lastRow).Resize (,6).Value'。在你之前的代碼中找到'lastrow'是正確的,但是'tbl.Range(lastRow,「B」)'給了你相對錶頭的位置。例如。如果lastrow = 14,並且表格從第#14行開始,那麼比'tbl.Range(lastRow,「B」)''給出第14行_of_table_(即圖紙行#14 + 14 = 28) –

+0

絕對精彩!非常感謝!! – user3331363

相關問題