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

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

我正在创建一个适合一页的自动报告模板。此报告包括要点和图表。由于演示请求,我需要确保图表始终位于最后一个要点下方的相同距离。不幸的是,可能有 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

我的问题

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

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

我知道我需要将这个问题分解成几个部分,但我对第一个部分感到很困惑。

答案1

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

我修改了你的代码来隐藏行:

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

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

相关内容