Excel VBA宏:按Assigned列非空条件移动行至另一表格
解决Excel VBA宏移动非空分配任务行的问题
你的代码核心问题是空值判断逻辑错误,IsEmpty(False)的写法完全不符合函数用法,导致判断逻辑反转,把空行移走了。以下是修正后的代码,以及关键修改说明:
修正后的完整代码
' Move assigned NewTasks to the AssignedTasks list ' Sub MoveAssignedTasks() Dim wb As Workbook, loOpen As ListObject, loClosed As ListObject Dim lr As ListRow, i As Long Set wb = ActiveWorkbook Set loOpen = wb.Worksheets("NewTasks").ListObjects("Table1") Set loClosed = wb.Worksheets("AssignedTasks").ListObjects("Table3") ' 从后往前遍历,避免删除行导致索引错乱 For i = loOpen.ListRows.Count To 1 Step -1 Set lr = loOpen.ListRows(i) ' 判断第14列(Assigned列)是否非空,同时排除仅含空格的情况 If Len(Trim(lr.Range.Cells(14).Value)) > 0 Then ' 复制整行到目标表格末尾 lr.Range.Copy loClosed.ListRows.Add.Range.Cells(1) ' 删除原表格中的该行 lr.Delete End If Next i End Sub
关键修改说明
- 修正空值判断逻辑:
原代码的Case IsEmpty(False)是错误用法,IsEmpty函数需要传入要检查的单元格对象,正确的非空判断可以用Not IsEmpty(lr.Range.Cells(14))。这里额外用Len(Trim(...)) > 0,能避免单元格仅包含空格时被误判为已分配的情况。 - 替换Select Case为If语句:
因为只有一个判断条件,用If比Select Case更简洁直观,减少代码冗余。 - 优化宏名称:
把原名称MoveClosed改为MoveAssignedTasks,更贴合功能语义,方便后续维护。
内容的提问来源于stack exchange,提问作者Chris Cannell
相关产品推荐
相关产品推荐

