首页 > 解决方案 > 简单的剪切和粘贴是行不通的

问题描述

我有一个拒绝工作的简单宏。它到达剪切部分并用行军蚂蚁包围信息;然后……什么都没有。

我想要完成的是在 D 列中找到一个值(1050)。每当我找到它时,我想将整行数据移动到工作表的底部。

工作表由数千行信息组成,行数每月都在变化。列是恒定的。

这就是我所拥有的:

Sub MurrayTest()
    'Dim xRg As Range
    'Dim xTxt As String
    'Dim xCell As Range
    'Dim xEndRow As Long
    'Dim I As Long

    On Error Resume Next

    If ActiveWindow.RangeSelection.Count > 1 Then
      xTxt = ActiveWindow.RangeSelection.AddressLocal
    Else
      xTxt = ActiveSheet.UsedRange.AddressLocal
    End If

    Set xRg = Range("d:d")
    xEndRow = xRg.Rows.Count + xRg.Row

    Application.ScreenUpdating = False

    For I = xRg.Rows.Count To 1 Step -1
        If xRg.Cells(I) = "1050" Then
           xRg.Cells(I).EntireRow.Cut
           Rows(xEndRow).Insert Shift:=xlDown
        End If
    Next

    Application.ScreenUpdating = True
End Sub

任何帮助将不胜感激!

标签: excelvba

解决方案


您的问题是您试图将行插入工作表 +1 的最后一行。这是越界了。

而不是这个:

Set xRg = Range("d:d")
xEndRow = xRg.Rows.Count + xRg.Row

做这个:

Set xRg = Range("d:d")
xEndRow = Range("d1").End(xlDown).Row + 1

这样,您只需查看填充的单元格而不是所有可能的单元格。

注意 我更喜欢使用类似的东西,xEndRow = Cells(Rows.Count, 1).End(xlUp).Row因为如果数据集不完整,从顶部查找最后一行有时可能是不正确的。您可能需要使用不同的方法来确定最适合您的情况。


推荐阅读