excel - 如果水平动态,如何在每页顶部放置表格标题
问题描述
我的表的所有类别都在 A 列中,以“A3”开头。以下列包含数据,每次运行报告时列数可能会有所不同。第 1 行有图表标题,第 2 行有图例(“A1:G2”)。“H1”到结尾是空白的。由于数据是动态的,因此页数也有所不同。我想在每一页的顶部都有标题和图例。
如果我在页面设置中列出行,则选择整行。我需要重复的信息仅在(“A1:G2”)中。我无法编写代码来复制和粘贴“A1:G2”,因为我永远不知道我将拥有多少页。工作簿标题列为所有页面的标题。
Public Sub testsub()
Dim ws As Worksheet
Dim surf As Worksheet
With surf.PageSetup
.PrintTitleRows = "$1:$2"
.PrintTitleColumns = "$A:$A"
End With
Application.PrintCommunication = True
surf.PageSetup.PrintArea = ""
With surf.PageSetup
.LeftHeader = ""
.CenterHeader = "Test Workbook"
.RightHeader = ""
.LeftFooter = "&D"
.CenterFooter = "&G"
.RightFooter = "&P"
.CenterHorizontally = True
.CenterVertically = True
End With
Application.PrintCommunication = True
End Sub
我想在工作表的每一页上显示“A1:G2”。谢谢!
解决方案
此解决方案使用工作簿事件Workbook_BeforePrint
ThisWorkbook
在工作簿的对象模块中复制以下过程:
Option Explicit
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Call Print_Header_Update
End Sub
Sub Print_Header_Update()
Dim ws As Worksheet, vpb As VPageBreak, rHdr As Range, rg As Range
Set ws = ThisWorkbook.Worksheets("DATA") 'Update as required
With ws
Set rHdr = .Range("B1:G2") 'Update as required
Set rg = rHdr.Columns(8).Resize(2, -8 + .Columns.Count) 'Update as required
rg.ClearContents
For Each vpb In ws.VPageBreaks
rHdr.Copy
vpb.Location.Cells(1).PasteSpecial
Application.CutCopyMode = False
Selection.EntireColumn.AutoFit 'This might require fine-tuning
Next: End With
End Sub
有关详细信息,请参阅:
Workbook.BeforePrint 事件 (Excel)、
Worksheet.VPageBreaks 属性 (Excel)、
Range.Resize 属性 (Excel)、
Range.AutoFit 方法 (Excel)
推荐阅读
- c# - 如何在我的列表中存储每个单独的正则表达式匹配主题标签?
- c# - 纸、剪刀、石头如何显示正确的结果?
- hibernate - 什么可能导致 Spring/Hibernate 设置找不到实体 ID?
- python - 如果某些值是整数范围,而其他值是纯整数,如何对 pandas DataFrame 进行分组?
- php - bootstrap-table - 在 getAllSelections 中,我只能抓取某些列吗?
- elasticsearch - Elasticsearch 范围查询未按预期工作
- css - 在浏览器中调整大小时如何修复 SVG 中的变换原点变化
- jquery - 在网格中选择文本间隔而不中断
- c++ - 渲染场景图的变换顺序
- android - 图像键盘:选择丰富的内容(Gif、贴纸)重新打开活动