【问题标题】:How to move entire row based on text in a single cell?如何根据单个单元格中的文本移动整行?
【发布时间】:2025-12-19 05:00:07
【问题描述】:

我一直在网上搜索哪里可以找到以下最有效和最简单的方法:

我有一个包含 3 张工作表的电子表格:

  1. 信息
  2. 培训
  3. 离校生

在信息表中,B 列包含有条件格式化的验证文本。有两种验证选项:

  1. 主动
  2. 离开者

我希望一旦单元格值从“活动”更改为“离开”,整行将从工作表中删除并移动到“离开”工作表。

我使用了下面的代码,它可以工作,但是如果没有离开者,它将转移第一行“活动”。谁能告诉我有什么问题?

Sub AlexR688(x)
    'For http://www.mrexcel.com/forum/excel-q...ific-text.html
    'Using autofilter to Copy rows that contain centain text to a sheet called Errors
    Dim LR As Long

    Range("B2").EntireRow.Insert Shift:=xlDown
    LR = Sheets("Personal Information").Cells(Rows.Count, "B").End(xlUp).Row
    LR1 = Sheets("Leavers").Cells(Rows.Count, "B").End(xlUp).Row + 1

    With Sheets("Personal Informaiton").Range("B2:C" & LR)
        .AutoFilter
        .AutoFilter Field:=1, Criteria1:="Leaver", _
            Operator:=xlOr, Criteria2:=":Leaver"
        .SpecialCells(xlCellTypeVisible).EntireRow.Copy Destination:=Sheets("Leavers").Range("A" & LR1)
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
End Sub

其次,我想在“培训”表中做同样的事情。但是在那里,B 列包含相同的“活跃”、“离开者”,这是从个人信息中引用的。因此,一旦个人信息表 B 列从“活动”更改为“离开者”,培训表也会更改,但我希望删除培训表中的行。

第三,如果我不小心将行从个人信息表移动到离开表,是否有可能通过选择回“活动”单元格值,该行会移回原来的位置?

非常感谢。希望它足够清楚。

【问题讨论】:

  • 何时以及什么触发了您使用的 sub?你有按钮什么的吗?
  • 我创建了一个按钮,因为我不知道如何自动化它。如果单元格值从 'active' 更改为 'leaver'
  • vba 是一种事件驱动语言。为了通过运行一些代码来自动化某些事情,你需要一个事件发生。在这里,您没有表单控件来触发事件。因此,您将需要一个组合框或其他东西并使用它的一个属性(如更改属性)来触发您的功能。否则,你想要的就不会发生!

标签: vba excel


【解决方案1】:

这是最简单的方法

  Private Sub imperecheaza_Click()
   Dim ws As Worksheet
   Dim Rand As Long
    Set ws = Worksheets("BD_IR")    
   Rand = 3
     Do While ws.Cells(Rand, 4).Value <> "" And Rand < 65000
       If ws.Cells(Rand, 4).Value = gksluri.Value * 1 And ws.Cells(Rand, 5).Value = gksluri.List(gksluri.ListIndex, 1) * 1 Then
         ws.Rows(Rand) = ""    '(here you will delete entire Row)
         gksluri.RemoveItem gksluri.ListIndex
         Exit Do
         End If
       Rand = Rand + 1
    Loop
  End Sub

【讨论】:

    最近更新 更多