【发布时间】: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 页后取消隐藏这些行,这样当我查看文档时它们仍然可见?