VBA可以从没有文本的范围中删除一行,尽管单元格有公式

Roc*_*oal 5 vba microsoft-excel

我正在创建一个适合一页的自动报告模板。该报告包括要点和图表。由于演示请求,我需要确保图表始终位于最后一个项目符号下方的相同距离处。不幸的是,可能有 7 个或 2 个要点。因此自动化这变得很麻烦。

见下图,但我的想法是:

  1. 指定范围 (B11:B17)
  2. 转到该范围的底部并继续工作
  3. 在该范围内查找空单元格并删除整行(问题 1)
  4. 更新范围变量以适应变化(无法做到)
  5. 执行前面的步骤
  6. 检索原始范围大小并将那些行重新插入它应该在的位置
  7. 回到我原来的程序来填充项目符号,然后再次从第 1 步开始

VBA 是我挣扎的东西,但发现自己使用的越来越多。我搜索并尝试了不同的方法来创建范围和删除空单元格/行。其中一些非常糟糕。我现在从下面这个简单的代码开始,但它不起作用:

Set MyFullRange = Range("B11:B17")
MyFullRange.Select
For CellRange = 1 To MyFullRange.Rows.Count
    If MyFullRange(CellRange).End(xlUp).Row = "" Then
        MyFullRange(CellRange).EntireRow.Delete xlShiftUp
    End If
Next CellRange
Run Code Online (Sandbox Code Playgroud)

我的问题

  1. 通过引用另一个工作表(=ProjectBullet_1、=ProjectBullet_2 等)填充项目符号行。因此,我无法识别空单元格并相应地删除该行。
  2. 重新插入行,使其回到我原来的模板结构。(见下面可能的替代想法
  3. 带项目符号的行出现在模板 $B$20:$B:$26 的某个部分。(在其他填充行的下方和上方)和之前删除行的尝试导致其他空行被删除。

如果我只是简单地复制模板表,将其命名为其他名称并在副本上执行步骤 1 到 5,并在导出副本后删除副本,是否会更容易(尤其是对于步骤 6)?

我知道我需要把这个问题分解成几部分,但我正在努力解决第一部分。

jcb*_*rmu 7

您可以隐藏行而不是删除它们。

我已经修改了您的代码以隐藏行:

Public Sub hiderows()
    Dim thisrange As Range
    Set thisrange = ActiveSheet.Range("B11:B17")
    For CellRange = thisrange.Rows.Count + 10 To 11 Step -1
        If ActiveSheet.Cells(CellRange, 2).Value = "" Then
            Rows(CellRange).EntireRow.Hidden = True
        End If
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

关键点是If ActiveSheet.Cells(CellRange, 2).Value = "" Then我检查单元格的那一行。它读取的是值,而不是公式