Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4365|回复: 10

[已解决]让页眉显示当前页面的某一单元格内容

[复制链接]
发表于 2016-8-24 09:58 | 显示全部楼层 |阅读模式
本帖最后由 liu6930101 于 2016-8-24 12:30 编辑

想让页眉在打印的时候显示当前页面的某一单元格内容   比如A2  
百度了宏如下
Sub Myrange()     ActiveSheet.PageSetup.CenterHeader = "" & ActiveCell.Value End Sub

可这个宏只能显示固定的内容
如何让它随预览的当前页面变化而变化呢?跪求高手指点!!!



最佳答案
2016-8-25 11:15
Sub RunSubtotal()
    Dim c
    c = 1    '分类列的列号
    With Sheets("原材料")
        '1)删除分类汇总
        .Range("a1").CurrentRegion.RemoveSubtotal
        '2)对要分类的字段,排升序
        .Cells(1, c).CurrentRegion.Sort key1:=.Cells(1, c), order1:=xlAscending, Header:=xlYes
        '3)以第一个字段进行分组的求和,汇总对象为第四到第七个字段。
        .Range("a1").CurrentRegion.Subtotal GroupBy:=c, Function:=xlSum, TotalList:=Array(4, 5, 6, 7)
        '.Outline.ShowLevels RowLevels:=3
        .Columns(c).Replace "汇总", "累计"
        .Rows(.Range("a1").CurrentRegion.Rows.Count).Delete
        .Range("a1").CurrentRegion.Borders.LineStyle = 1
    End With
    Call PrintBySubtotal(c)
End Sub



Sub PrintBySubtotal(c)
    Dim A, i, r
    Application.DisplayAlerts = False
    With Sheets.Add(after:=Sheets(Sheets.Count))
        .PageSetup.Orientation = xlLandscape
        .PageSetup.PrintTitleRows = "$1:$1"
        Sheets("原材料").[a1:i1].Copy .[a1]
        r = 2
        A = Sheets("原材料").Range("a1").CurrentRegion
        For i = 2 To UBound(A)
            If A(i, c) Like "* 累计" Then
                .Rows("2:65536").Clear
                Sheets("原材料").Cells(r, 1).Resize(i - r + 1, 9).Copy
                r = i + 1
                .Range("a2").PasteSpecial xlPasteFormats
                .Range("a2").PasteSpecial xlPasteValues
                .Cells.Columns.AutoFit
                .PageSetup.CenterHeader = .[A2]
                .PrintOut
            End If
        Next i
        .Delete
    End With
End Sub


原材料3.rar (51.14 KB, 下载次数: 23)

原材料.zip

51.21 KB, 下载次数: 11

发表于 2016-8-24 11:24 | 显示全部楼层
ActiveSheet.PageSetup.CenterHeader = Range("A2").Text
回复

使用道具 举报

发表于 2016-8-24 11:31 | 显示全部楼层
建议上传自己的excel文件,并说明效果

别人才好理解。
回复

使用道具 举报

 楼主| 发表于 2016-8-24 12:33 | 显示全部楼层
su45 发表于 2016-8-24 11:24
ActiveSheet.PageSetup.CenterHeader = Range("A2").Text

我试着用了,可是还是不对啊,高手帮忙看看怎么回事啊   我上传了附件
回复

使用道具 举报

 楼主| 发表于 2016-8-24 12:34 | 显示全部楼层
爱疯 发表于 2016-8-24 11:31
建议上传自己的excel文件,并说明效果

别人才好理解。

大神  我已上传了附件    帮忙看看吧   
回复

使用道具 举报

发表于 2016-8-24 16:11 | 显示全部楼层
楼主的页眉并不是要显示A2,而是要显示打印在纸上看到的第一列的第二个单元格。这个问题就是求出打印在纸上看到的第一列的第二个单元格,对应在表中是哪个单元格。是否楼主?
回复

使用道具 举报

 楼主| 发表于 2016-8-24 16:43 | 显示全部楼层
pengyx 发表于 2016-8-24 16:11
楼主的页眉并不是要显示A2,而是要显示打印在纸上看到的第一列的第二个单元格。这个问题就是求出打印在纸上 ...

对   不是A2    是打印在纸上的第一列第二个单元格的内容    同步显示在当前页眉上         亲有办法吗
回复

使用道具 举报

发表于 2016-8-24 17:55 | 显示全部楼层
Sub AddSubtotal()
    Dim c
    c = 1    '分类列的列号
    With Sheets("原材料")
        '1)删除分类汇总
        .Range("a1").CurrentRegion.RemoveSubtotal
        '2)对要分类的字段,排升序
        .Cells(1, c).CurrentRegion.Sort key1:=.Cells(1, c), order1:=xlAscending, Header:=xlYes
        '3)以第一个字段进行分组的求和,汇总对象为第四到第七个字段。
        .Range("a1").CurrentRegion.Subtotal GroupBy:=c, Function:=xlSum, TotalList:=Array(4, 5, 6, 7)

        '.Outline.ShowLevels RowLevels:=3
        .Rows(.Range("a1").CurrentRegion.Rows.Count).Delete
        .Range("a1").CurrentRegion.Borders.LineStyle = 1
    End With
    Call PrintBySubtotal(c)
End Sub


Sub PrintBySubtotal(c)
    Dim A, i, r
    With Sheets("辅助表")
        .PageSetup.Orientation = xlLandscape
        .PageSetup.PrintTitleRows = "$1:$1"
        A = Sheets("原材料").Range("a1").CurrentRegion
        r = 2
        For i = 2 To UBound(A)
            If A(i, c) Like "* 汇总" Then
                .Rows("2:65536").Clear
                Sheets("原材料").Range(Sheets("原材料").Cells(r, 1), Sheets("原材料").Cells(i, UBound(A, 2))).Copy
                r = i + 1
                .Range("a2").PasteSpecial xlPasteFormats
                .Range("a2").PasteSpecial xlPasteValues
                .Cells.Columns.AutoFit
                .PageSetup.CenterHeader = .[A2]
                .PrintOut
            End If
        Next i
    End With
End Sub

原材料2.rar (55.86 KB, 下载次数: 11)
回复

使用道具 举报

 楼主| 发表于 2016-8-25 10:07 | 显示全部楼层
爱疯 发表于 2016-8-24 17:55
Sub AddSubtotal()
    Dim c
    c = 1    '分类列的列号

没错   我打印了   就是这个效果   
不过  
“汇总”字样    我要是改成“累计”还能用吗
还有那个辅助表    我要是把这个宏引用到其他表格中    需要自己建立一个辅助表是吗?
回复

使用道具 举报

发表于 2016-8-25 11:15 | 显示全部楼层    本楼为最佳答案   
Sub RunSubtotal()
    Dim c
    c = 1    '分类列的列号
    With Sheets("原材料")
        '1)删除分类汇总
        .Range("a1").CurrentRegion.RemoveSubtotal
        '2)对要分类的字段,排升序
        .Cells(1, c).CurrentRegion.Sort key1:=.Cells(1, c), order1:=xlAscending, Header:=xlYes
        '3)以第一个字段进行分组的求和,汇总对象为第四到第七个字段。
        .Range("a1").CurrentRegion.Subtotal GroupBy:=c, Function:=xlSum, TotalList:=Array(4, 5, 6, 7)
        '.Outline.ShowLevels RowLevels:=3
        .Columns(c).Replace "汇总", "累计"
        .Rows(.Range("a1").CurrentRegion.Rows.Count).Delete
        .Range("a1").CurrentRegion.Borders.LineStyle = 1
    End With
    Call PrintBySubtotal(c)
End Sub



Sub PrintBySubtotal(c)
    Dim A, i, r
    Application.DisplayAlerts = False
    With Sheets.Add(after:=Sheets(Sheets.Count))
        .PageSetup.Orientation = xlLandscape
        .PageSetup.PrintTitleRows = "$1:$1"
        Sheets("原材料").[a1:i1].Copy .[a1]
        r = 2
        A = Sheets("原材料").Range("a1").CurrentRegion
        For i = 2 To UBound(A)
            If A(i, c) Like "* 累计" Then
                .Rows("2:65536").Clear
                Sheets("原材料").Cells(r, 1).Resize(i - r + 1, 9).Copy
                r = i + 1
                .Range("a2").PasteSpecial xlPasteFormats
                .Range("a2").PasteSpecial xlPasteValues
                .Cells.Columns.AutoFit
                .PageSetup.CenterHeader = .[A2]
                .PrintOut
            End If
        Next i
        .Delete
    End With
End Sub


原材料3.rar (51.14 KB, 下载次数: 23)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 16:58 , Processed in 0.454734 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表