【问题标题】:How to stop certain rows from printing if one single cell is blank如果一个单元格为空白,如何停止打印某些行
【发布时间】:2019-06-22 21:06:34
【问题描述】:

我正在尝试创建一个宏来打印活动工作表。第 1、2、3、6 页上总是有数据,所以我为单元格选择了“”,并选择了一个永远不会有数据的单元格,因此它们将始终打印。对于第 4 页和第 5 页,我只希望它们在定义了一个特定单元格中的内容时打印,并且如果单元格为空,则不会打印该页面。第 4 页只有一个单元格,我需要检查它是否为空白,但在第 5 页上,我需要检查 4 个单元格,如果其中任何一个单元格不为空白,我需要打印第 5 页。前 3 页现在打印正常,但当我到达第 4 页时出现错误

我尝试更改第 4 页的 if 语句,以便它查看单个单元格,然后如果符合规则,它将隐藏单元格(我希望它们在第 6 页的打印完成后取消隐藏或者只是不打印这些行而不是隐藏然后取消隐藏)。

Public Sub PrintReport()

将 strSheetName 调暗为字符串 strSheetName = ActiveSheet.Name

If Range("A2").Value = "" Then '第 1 页

Range("A1:R91").PrintOut

If Range("A93").Value = "" Then '第 2 页

范围("A92:R157").PrintOut

If Range("A158").Value = "" Then '第 3 页

范围("A158:R199").PrintOut

If Range("C202").Value = "" Then 'Page 4

Range("A200:A243").EntireRow.Hidden = True

其他

Range("A200:A243").EntireRow.Hidden = False

If Range("C246").Value And Range("A269").Value And Range("E285").Value And Range("E293").Value = "" Then '第5页

Range("A244:A301").EntireRow.Hidden = True

其他

Range("A244:A301").EntireRow.Hidden = False

If Range("P302").Value = "" Then ' 第 6 页

范围("A320:R325").PrintOut

如果结束

如果结束

如果结束

如果结束

如果结束

如果结束

结束子

我希望它打印出符合指定条件的每一页,然后打印或不打印那些指定的单元格。第 1-3 页打印得很好,因为它们总是会打印,但它总是在第 4 页上出错,其中范围被标记为 Range("A200:A243").Hidden = True。我需要它来隐藏然后在打印剩余页面后取消隐藏这些行,或者只是不打印而不取消隐藏。

【问题讨论】:

  • 我强烈建议您采用更标准的缩进方法。这将大大帮助您解决代码问题
  • Excel VBA 帮助是您的朋友:“指定的范围必须跨越整个列或行。”您可以使用 Range("A200:A243").entirerow.Hidden =(Range("C202").Value = "") 并避免使用 If 语句。
  • 在这里回声@urdearboy。看看Rubberduck's indenter 如何帮助解决这个问题 ;-)(免责声明:我是这个 OSS 项目的管理员之一)
  • 这段代码无法编译 - 你有一个额外的End If
  • @SJR - 但是如果我确实想打印该页面,它还会打印吗?另外,如何在打印第 6 页后取消隐藏这些行,这样当我查看文档时它们仍然可见?

标签: excel vba


【解决方案1】:

您只能隐藏行或列,而不能隐藏任何范围。将.EntireRow 添加到所有隐藏/取消隐藏语句中,以使隐藏/取消隐藏对整行起作用,如下所示:

Range("A244:A301").EntireRow.Hidden = True

【讨论】:

  • 我用你上面的建议更新了上面的代码。它没有任何错误并打印了前三页,但没有打印应该打印的第 6 页。我还在字段中输入了数据,所以它应该打印了第 5 页,但它没有打印。
  • @CMig 实际上,您发布的代码无法编译,其中一半已被注释掉。我建议从其他人提到的内容开始,并适当缩进。这不是浪费时间;这是一种一目了然的方式来查看逻辑代码块的开始和结束位置。我怀疑您的问题是没有按照您想要的方式设置 if 条件,但不知道您想要的方式是什么,我们真的无能为力。
  • 唯一被注释掉的是页码。当我在那里重新发布代码时,由于某种原因,它取出了一些回报。我注意到 End If 是它删除了但其他的没有。如果我只是删除所有代码,因为它不起作用,而不是因为它没有很好地格式化,而是因为代码永远不会起作用,那么修复所有缩进是浪费时间。我已经找到了一种更好的方法来隐藏行,打印,然后取消隐藏行,但它会继续打印分页符所在的位置,即使行被隐藏,它们现在也是空白的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 2022-06-15
相关资源
最近更新 更多