excel - 简单的剪切和粘贴是行不通的
问题描述
我有一个拒绝工作的简单宏。它到达剪切部分并用行军蚂蚁包围信息;然后……什么都没有。
我想要完成的是在 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
任何帮助将不胜感激!
解决方案
您的问题是您试图将行插入工作表 +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
因为如果数据集不完整,从顶部查找最后一行有时可能是不正确的。您可能需要使用不同的方法来确定最适合您的情况。
推荐阅读
- node.js - 如何在节点中使用 Crypto?
- java - JRE 使用 CPLEX LazyCallBack 检测到致命错误
- python - GUI 在单独的进程中触发操作
- sqlite - 遍历带有标记节点的树上的给定路径
- api - API 保护 - JWT vs HMAC 签名 vs OAuth
- reactjs - 如何在 React App 中设置 process.env.PUBLIC_URL
- language-agnostic - 为什么 LZ77 的实现不同?
- ios - 用“const 常量”声明变量的目的是什么?
- python - 在 Django 中迁移和创建超级用户后出现“没有这样的表:accounts_user”
- html - 如何用我的图标来满足页面的宽度?