2017-06-14 53 views
0

工作表1中单元格中的数据(A2:C4)列D中的简单表格为空。我想选择整行,将它剪切并粘贴到sheet2中,当时间被添加到列表D中。 当我单击注销按钮时,它将在列D中添加一个时间打孔。 我希望整行是选中,然后剪切并粘贴到sheet2中。 我还想安排剩余的条目向上移动,以便两者之间没有空格。如何从工作表1中选择和切割整行并将其粘贴到工作表2中

Screenshot

Dim CM As Boolean 

Private Sub cmdMove_Click() 

Dim myLog As Worksheet 
Dim myLogSheet As Range 
Dim i As Long: i = 1 

Set myLog = Sheets("Sheet1") 
Set myLogSheet = myLog.Range("B:B").Find(txtID.Value, , , xlWhole) 

'Dim LastRow As Long 
'LastRow = Sheets("Sheet2").Range("A65536").End(xlUp).Row + 1 
If Not myLogSheet Is Nothing Then 
myLogSheet.Offset(0, 2) = Format(Now, "hh:mm:ss") 

With ActiveSheet 
For n = nLastRow To nFirstRow Step -1 
     If .Cells(n, "D") = "" Then 
      .Cells(n, "D").EntireRow.Cut Sheet2.Cells(i, "A") 
      .Cells(n, "D").EntireRow.Delete '~~> if you want to delete 
      i = i + 1 
     End If 
    Next 
End With 


Else 
txtName.Value = "NO RECORD" 

End If 


End Sub 
+0

什么问题? –

+0

如果我选择ID,它会显示相应的名称,这是正确的。如果我点击按钮,时间打孔将显示在D列中。我想将整行移动到sheeet2(表明该员工已经注销)。 –

回答

0

您需要删除你的循环,只是用你发现使用Find行:

Dim CM As Boolean 

Private Sub cmdMove_Click() 

    Dim myLog As Worksheet 
    Dim myLogSheet As Range 
    Dim myLogSheetRow As Long 
    Dim i As Long 
    i = 1 
    'Probably you want: 
    i = Sheet2.Cells(Sheet2.Rows.Count, "A").End(xlUp).Row + 1 

    Set myLog = Sheets("Sheet1") 
    Set myLogSheet = myLog.Range("B:B").Find(txtID.Value, , , xlWhole) 

    If Not myLogSheet Is Nothing Then 
     myLogSheetRow = myLogSheet.Row ' So we can delete the row later 
     myLogSheet.Offset(0, 2) = Format(Now, "hh:mm:ss") 
     myLogSheet.EntireRow.Cut Sheet2.Cells(i, "A") 
     myLog.Rows(myLogSheetRow).Delete 
    Else 
     txtName.Value = "NO RECORD" 
    End If 
End Sub 

请注意Excel展览后删除行时非常古怪的行为Cut。在Cut之后使用之后的语句myLogSheet.EntireRow.Delete会导致Excel根据Sheet2中单元格的新位置删除Sheet1中的行。这就是为什么需要创建一个变量来引用Cut之前的行,以便它可以在Cut之后的Delete中使用。

+0

让我们[在聊天中继续讨论](http://chat.stackoverflow.com/rooms/146981/discussion-between-yowe3k-and-bamboo-likefox)。 – YowE3K

相关问题