Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 筛选行一起引用列中的值_Excel_Vba - Fatal编程技术网

Excel 筛选行一起引用列中的值

Excel 筛选行一起引用列中的值,excel,vba,Excel,Vba,我有这个密码。。它工作正常,但我需要将K列中值为“closed”的行移动到具有相同文本的最后一行之后,同时在向列添加“x”时,如果应该移动到值为“x”的最后一行之后。 有什么建议吗 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub Dim rw As Long Application.EnableEvents = False Application.Sc

我有这个密码。。它工作正常,但我需要将K列中值为“closed”的行移动到具有相同文本的最后一行之后,同时在向列添加“x”时,如果应该移动到值为“x”的最后一行之后。 有什么建议吗

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.Count > 1 Then Exit Sub
Dim rw As Long

Application.EnableEvents = False
Application.ScreenUpdating = False

With ActiveSheet
rw = Target.Row

If rw = 2 Then
      'Do nothing
Else
    If Not Intersect(Target, Range("K:K")) Is Nothing And LCase(Target) = "closed" Or LCase(Target) = "x" Then
    Target.EntireRow.Select
    Selection.Cut
    Rows("2:2").Select
    Selection.Insert Shift:=xlDown
    Range("K" & Cells(Rows.Count, "K").End(xlUp).Row).Select
End If
End If
End With

Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

你没有回答我的澄清问题

请测试下一个代码,该代码假设您需要剪切写入“closed”或“x”的行(列K:K),并将其复制到最后一个此类现有记录(“closed”或“x”)之后:


“工作正常”应该是什么意思?它运行时不会引发错误?“文本相同的最后一行”应该是什么意思?K:K列上的“闭合”或“x”?如果一切正常,你需要我们提供什么样的帮助?要使其粘贴到与最后一个空行不同的位置?当前,当添加“closed”或“x”时,该行将移动到第二行的上一行,但需要“closed”才能移动到最后一行之后,列单元格为“closed”且与“x”相同。如果是这样,您是否测试了我发布的代码?这不是你所需要的吗?是的,正是我所需要的,谢谢。很高兴知道我们在这里,当有人花一些时间来解决我们的问题并给出解决问题的答案时,勾选左侧代码侧复选框,以使其成为可接受的答案。这样,其他搜索类似问题的人就会知道代码是有效的……我遇到了一个小问题,就是第一次在列中添加(“Closed”或“x”)时出错。该守则是否有任何修订建议?thks@dola我不明白你说什么,对不起。。。当你谈论一个错误时,你必须提到错误描述和它出现的代码行。理论上,它不应该在意这些字符串是否出现,不管它是第一次还是第二次出现。。。如果没有任何
strCrit
存在,代码应处理该问题并退出Sub。对不起,您是对的;我忘了说我做了一些更改,将行从第二行向上移动到最后一行:我在函数中将xlPrevious更改为xlNext,同时删除(rngF.offset(1).EntireRow.Insert xlUp)中的偏移量(1)。真的,抱歉,您以前的代码是完美的,也许我在更改中犯了一个错误,使行从下向上移动。
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.cells.count > 1 Then Exit Sub
 Dim rw As Long

 rw = Target.row

 If rw = 2 Then
      'Do nothing
 Else
    Dim rngF As Range
    If Not Intersect(Target, Range("K:K")) Is Nothing Then
        If LCase(Target) = "closed" Or LCase(Target) = "x" Then
            Application.EnableEvents = False
            Target.EntireRow.Cut
            Set rngF = FindUp(Target.Value, Range("K:K"))
            If rngF Is Nothing Then Application.EnableEvents = True: Exit Sub
            rngF.Offset(1).EntireRow.Insert xlUp
        End If
    End If
 End If
 Application.EnableEvents = True
End Sub

Function FindUp(strCrit As String, rng As Range) As Range
 Dim celF As Range
 Set celF = rng.Find(What:=strCrit, After:=rng.cells(1.1), SearchDirection:=xlPrevious)
 If Not celF Is Nothing Then Set FindUp = celF
End Function