2017-04-02 116 views
1

這裏是我想做的事:Excel的VBA宏複製特定的行並刪除它

  • 我有2個工作表名爲待定&記錄。
  • 列在 「待定」 工作表:A:日期,B:貨到,C:貨到辦公室,d:交付經理,E:主題,F:日期& G:信號
  • 列在「記錄「工作表:A:日期,B:Letter No. & C:主題。
  • 在「Pending」工作表的單元格G(Letter No.)中輸入數字時,下面的單元格將複製到「Records」工作表中指定的單元格中。
  • 「待定」工作表中的E(主題)位於「記錄」工作表的C(主題)中。
  • 「待定」工作表中的F(日期)位於「記錄」工作表的A(日期)中。
  • 「等待」工作表中的G(Letter No.)位於「記錄」工作表的B(Letter No.)中。
  • 刪除在「待定」工作表中複製的行。
  • 根據信函編號(C列)對「記錄」工作表中的行進行排序。

這是我想做的事情(不工作好),我寫的代碼和一些截圖:

Private Sub Worksheet_Change(ByVal Target As Range) 

If Target.Column = 6 Then 
    If Len(Target.Value) > 0 Then 
     Dim r As Range 
     Dim a As String 
     Dim b As String 

     b = "sheet3!A" & Sheet1.Cells(1, 9) + 3 & ":C" & Sheet1.Cells(1, 9) + 3 
     a = "E" & Target.Row & ":G" & Target.Row 
     Dim r1, r2 As Range 
     r1 = Sheet1.Range(a) 
     Sheet2.Range(b).Value = r1 
     Sheet1.Range(a).EntireRow.Delete 
    End If 
End If 

End Sub 

picture 1 picture 2

+1

根據您的文章要以列「G」的值更改運行此代碼,但在你的代碼你lookng爲'Target.Column = 6' - 這是列「F」,而不是列「G」 –

+0

它的工作非常感謝 – Pourmalla

回答

1

把下面的代碼在「待定」工作表模塊,在Worksheet_Change事件下。

首先,您應該學會享受Target變量的好處。例如,如果要從列「G」(您的Target)的同一行復制「F」列的值,則可以使用Target.Offset(, -1).Copy

如果要在複製後刪除整個行Target,只需使用Target.EntireRow.Delete

另一件事,根據你的屏幕截圖(和你的文章的第一部分)「Letter No」位於「記錄」表中的「B」欄。因此,Sort根據「B」欄完成。

代碼

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As range) 

Dim RecSht  As Worksheet 
Dim NextRow  As Long 

Application.ScreenUpdating = False 
Application.EnableEvents = False 

If Target.Column = 7 Then ' Column "G" 
    If Target.Value <> "" Then 
     Set RecSht = Worksheets("Records") 
     NextRow = RecSht.Cells(RecSht.Rows.Count, "A").End(xlUp).Row + 1 ' <-- get next empty row at Column A in "Records" sheet 

     RecSht.Range("B" & NextRow).Value = Target.Value ' column "G" 
     RecSht.Range("A" & NextRow).Value = Target.Offset(, -1).Value ' column "F" 
     RecSht.Range("C" & NextRow).Value = Target.Offset(, -2).Value ' column "E" 

     Target.EntireRow.Delete ' <-- Delete entire row that was copied 

     '--- Sort Section --- 
     RecSht.Range("A2:C" & NextRow).Sort key1:=RecSht.Range("B2:B" & NextRow), _ 
             order1:=xlAscending, Header:=xlYes 
    End If 
End If 

Application.EnableEvents = True 
Application.ScreenUpdating = True 

End Sub