【问题标题】:Formatting Excel sheet using VBA使用 VBA 格式化 Excel 工作表
【发布时间】:2012-07-09 06:55:05
【问题描述】:

我有什么

Excel 2007 工作表。 同一工作簿中多个工作表中范围 A1:C48(固定)中的信息。

我需要什么

我需要在具有正常边距的 Letter 尺寸纸张上打印此选择。 但条件是我需要适应选择的宽度,即 3 列到 1 页。 我必须保持列的宽度恒定以保持恒定的字体大小。 我想使用 VBA 来做到这一点。

这是我试过的代码:

Sub printing()
    Dim w1 As Single, w2 As Single, w3 As Single
    Application.ScreenUpdating = False
    w1 = 62
    w2 = 24.71
    w3 = 22.14
    For i = 1 To ActiveWorkbook.Worksheets.Count
    Worksheets(i).Activate
    ActiveSheet.Columns(1).ColumnWidth = w1
    ActiveSheet.Columns(2).ColumnWidth = w2
    ActiveSheet.Columns(3).ColumnWidth = w3

    ActiveSheet.Range("A1:C48").Select

    With Worksheets(i).PageSetup
        .PaperSize = xlPaperLetter
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .LeftMargin = Application.InchesToPoints(0.5)
        .RightMargin = Application.InchesToPoints(0.75)
        .TopMargin = Application.InchesToPoints(1.5)
        .BottomMargin = Application.InchesToPoints(1)
        .HeaderMargin = Application.InchesToPoints(0.5)
        .FooterMargin = Application.InchesToPoints(0.5)
    End With
    Next i
    Application.ScreenUpdating = True
End Sub

虽然这会调整列的大小并设置其他属性,但分页符仍然保持不变,当我尝试打印它时,还包括第 4 列。我不想手动拖动分页符,因为这会调整字符大小。我更喜欢设置列宽,以便它适合具有正常边距的信纸。

如果有任何建议,我将不胜感激。

【问题讨论】:

    标签: vba printing excel excel-2007


    【解决方案1】:

    如果我理解正确,我认为您想要的是 PageSetup.PrintArea 属性。您可以添加:

    .PrintArea= "$A$1:$C$48"
    

    到你的 with 块。

    【讨论】:

    • 我尝试了您的建议,如果我在工作表中有一个 48 * 3 范围,我会计算出来。但是当我在同一张纸上有多个这样的区域时,我发现我只能创建一个 printArea 并且它是一个本地范围名称。
    • 原来的问题说范围 A1:C48 是固定的,它们位于不同的工作表中。所以这个问题的答案是正确的。如果您想在单个工作表中执行此操作,请查看循环工作表中的各个范围,设置 PrintArea 属性,然后使用 PrintOut 方法发送打印作业。确保在浪费所有纸张之前进行测试!
    • 对于问题中的错误,我很抱歉,我使用了 .PrintArea 建议,我在功能区中提供了我自己的打印按钮,使用用户单元格选择来创建 PrintArea,然后重定向重定向到打印预览。谢谢大家...
    猜你喜欢
    • 2015-09-02
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 2016-08-20
    • 1970-01-01
    • 2019-06-25
    相关资源
    最近更新 更多