【问题标题】:Excel VBA For loop with UsedRange Count ErrorExcel VBA For 循环与 UsedRange 计数错误
【发布时间】:2020-08-26 07:45:31
【问题描述】:
maxRow = ws.UsedRange.EntireRow.Count

For n = 1 To maxRow

    Do While Not IsEmpty(ws.Range("D" & n).Value)
    
    ws.Range("D" & n & ":" & "E" & n).Delete shift:=xlShiftToLeft
    Rows(n + 1).Insert shift:=xlShiftDown
    maxRow = maxRow + 1
    
    Loop

Next n

我只是想知道为什么我的代码总是在 n = 19(原始 maxRow 计数)时退出。我添加了 maxRow = maxRow +1,因为我插入了一行,这样它在完成之前不会退出。

我要做的是删除两个单元格 (D&E) 并在下面插入一行,直到 D&E 为空。

谢谢

【问题讨论】:

  • 向后删除或插入循环时。此外,您不应该同时需要 For-Next 和 Do-While 循环。
  • 因此,所需的结果将是删除 D:E 单元格(替换为右侧的单元格)和每个这样处理的行下方的空行。这种理解正确吗?

标签: excel vba for-loop iteration


【解决方案1】:

您没有回答我的问题,我根据以下假设准备了一个答案:必要的代码必须将 D:E 中的单元格替换为它们的右邻居 (F:G) 并在这样的处理范围之后插入一行。如果这个假设是正确的,请测试下一段代码:

Sub testDeleteRangeInsertRow()
 Dim ws As Worksheet, n As Long
 
 Set ws = ActiveSheet

   n = 2
    Do While Not IsEmpty(ws.Range("D" & n).value)
    
       ws.Range("D" & n & ":" & "E" & n).Delete Shift:=xlShiftToLeft
       Rows(n + 1).Insert Shift:=xlShiftDown
       n = n + 2
    Loop
End Sub

如果我的假设是错误的,请更好地解释(用语言......)你需要完成什么......

【讨论】:

  • @Michael Norman:你有时间测试上面的代码吗?至少要回答澄清问题,如果代码没有做你真正需要的,只反映我的理解......
猜你喜欢
  • 2023-03-24
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
相关资源
最近更新 更多