![如何轻松切换 Excel 2010 工作簿中所有工作表的分页符显示?](https://linux22.com/image/1366194/%E5%A6%82%E4%BD%95%E8%BD%BB%E6%9D%BE%E5%88%87%E6%8D%A2%20Excel%202010%20%E5%B7%A5%E4%BD%9C%E7%B0%BF%E4%B8%AD%E6%89%80%E6%9C%89%E5%B7%A5%E4%BD%9C%E8%A1%A8%E7%9A%84%E5%88%86%E9%A1%B5%E7%AC%A6%E6%98%BE%E7%A4%BA%EF%BC%9F.png)
Excel 2010 仅允许通过以下方式一次关闭或打开一个工作表的分页符文件 → 选项 → 高级 → “显示此工作表的选项”:
我之前想出了一个 VBA 宏来切换分页符,但它只在我激活的工作表上有效:
Sub TogglePageBreaks()
ActiveSheet.DisplayPageBreaks = Not ActiveSheet.DisplayPageBreaks
End Sub
下一个合乎逻辑的问题(其他人必须向我指出)是如何使用宏来切换分页符显示全部活动工作簿中的工作表?
由于我是 VBA 新手,我花了几个小时研究如何循环遍历工作表以及 DisplayPageBreaks 对象的工作原理。我在下面找到了答案。
答案1
以下是我能想到的。我在 Excel 2010 中成功测试了它。我对 VBA 还很陌生,所以我为此挣扎了一段时间。 ws.Activate
是关键,因为DisplayPageBreaks
仅适用于活动工作表。归功于RocketDonkey 的帖子让我意识到这一点。还要感谢里克·罗斯坦我在答案中运用了非常简单的切换代码概念。
Sub ToggleWkBkPageBreaks()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Activate
ActiveSheet.DisplayPageBreaks = True + False - ActiveSheet.DisplayPageBreaks
Next ws
End Sub
答案2
这应该比您的示例更有效。
在执行与视觉效果相关的操作(例如激活工作表)时,停用屏幕更新是一种基本良好做法。此外,2013 不需要激活工作表即可切换分页符。
那么...如下所示:
Sub ToggleWkBkPageBreaks() ' start of public sub (private sub and function would not appear in macro menu in excel, would only be accessible to the code in the module)
'Declaring variables
Dim ws As Worksheet 'worksheet object
Dim is2010OrLess As Boolean 'true or false variable (= type 'boolean')
is2010OrLess = cint(Application.Version) > 15 ' check version (version "15.0" = excel 2013)
Application.ScreenUpdating = False ' disable screen updating
'do operations with ScreenUpdating turned off
For Each ws In ThisWorkbook.Worksheets ' loop start (for each type, based on the sheet collection, hence the need for the ws object for the loop)
If is2010OrLess = True then ws.Activate ' if version is less than exce3l2013, activate sheet. Else, don't activate the sheet (because it's unnecessary).
ws.DisplayPageBreaks = not ws.DisplayPageBreaks ' .dysplayPagebreaks yelds a true or false so, we change it to ('=') the inverse (not true/not false)
Next ws ' next sheet
Application.ScreenUpdating = True ' Re-enable screen updating
End Sub