0

我有一个名为 CASES-PENDING 的工作表,其中包含许多数据行。我每天都会将特定行的起始单元格的状态更改为“完成”(从“待处理”更改)。然后不必剪切该行并粘贴到我的其他 CASES-DONE 标题工作表上,我想要一个宏来做到这一点。我想在将几行数据的状态从“待定”更改为“完成”后运行宏。然后必须将所有这些行剪切并粘贴到另一个工作表上。那可能吗?非常感谢你们!

4

2 回答 2

0

你也可以这样做。比 AutoFilter 解决方案更多的代码,但可能更灵活。

Sub MoveDoneRows()
  Dim nStatusCol As Integer
  nStatusCol = 1

  Dim i As Integer
  i = 2

  ' select first row to insert rows into DONE sheet
  Dim nInsertRow As Integer
  Sheets("CASES-DONE").Select
  Range("A1").Select
  Selection.End(xlDown).Select
  nInsertRow = ActiveCell.Row + 1

  ' move rows with status done
  Dim sStatus As String
  Dim sPasteRow As String
  sStatus = Sheets("CASES-PENDING").Cells(i, nStatusCol).Value
  While sStatus <> ""
    If sStatus = "done" Then
      ' cut the current row from PENDING sheet
      sPasteRow = i & ":" & i
      Sheets("CASES-PENDING").Select
      Rows(sPasteRow).Select
      Selection.Cut

      ' paste into DONE sheet
      Sheets("CASES-DONE").Select
      Cells(nInsertRow, nStatusCol).Select
      ActiveSheet.Paste
      nInsertRow = nInsertRow + 1

      ' delete empty row from PENDING sheet
      Sheets("CASES-PENDING").Select
      Rows(sPasteRow).Select
      Selection.Delete Shift:=xlUp
    Else
      i = i + 1
    End If
    sStatus = Sheets("CASES-PENDING").Cells(i, nStatusCol)
  Wend
End Sub
于 2013-06-25T20:15:36.827 回答
0

这只是在黑暗中刺伤,但我最近一直在处理类似的事情。

Dim LastRow As Long
Range("1:1").AutoFilter Field:=(Row you have "Done" in), Criteria1:="Done"
LastRow = Cells(Rows.Count, 3).End(xlUp).Row
Range("CellRangeYouNeedCopied" & LastRow).Copy Destination:=Sheets("SheetX").Range(X,Y)

基本上,这会过滤到其中包含 DONE 的行,并将它们复制并粘贴到您决定命名的任何其他工作表上。只要记住替换所有变量。我对此还是很陌生,所以我可能错了,但值得一试!

编辑:您也可以将其记录为宏,然后使用 Long 变量更改范围以使其成为变量。

于 2013-06-25T19:28:27.083 回答