首页 > 解决方案 > Excel VBA 生成的标题在不同的 PC/Office 上不一样

问题描述

最近我遇到一个问题,确实让我很头疼。

我有一本 Excel 宏书,通过单击按钮可以写出发票,但我的同事抱怨所有员工在标题部分遇到不同的问题。

它在我的 PC 上运行良好,标题看起来不错且合适,但在我同事的 PC 上却不行,标题变得很奇怪。

这是在我的 PC 上生成的漂亮标题。

漂亮的生成标题 来自我同事 PC 的奇怪标题

生成标题的部分在这里:

Application.PrintCommunication = False
    With .PageSetup
        .PrintArea = ""
        .Zoom = 100
        .CenterHorizontally = True
        .PaperSize = xlPaperA4

        .LeftMargin = Application.CentimetersToPoints(1.2)
        .RightMargin = Application.CentimetersToPoints(1.2)
        .TopMargin = Application.CentimetersToPoints(3.6)
        .BottomMargin = Application.CentimetersToPoints(2.9)
        .HeaderMargin = Application.CentimetersToPoints(0.8)
        .FooterMargin = Application.CentimetersToPoints(0.8)

        .CenterHeaderPicture.Filename = "Path to company logo.png"
        .CenterHeader = "&G"

        .LeftHeader = Chr(10) & Chr(10) & Chr(10) & Chr(10) & Chr(10) & "&""Verdana""&9   Client : " & clnFullName & "御中"
        .RightHeader = Chr(10) & Chr(10) & Chr(10) & Chr(10) & "&""Verdana""&9Date : " & Format(Date, "d-mmm-yyyy") & "&KFFFFFF__" & Chr(10) & "&K000000Inv no. : " & invNumber & "&KFFFFFF__"

        .CenterFooter = "&""Verdana""&9My company Name" & Chr(10) & _
                "My company address" & Chr(10) & Chr(10) & "&10&P / &N"

        .LeftFooter = vbNullString
        .RightFooter = vbNullString


            .Zoom = False
            .FitToPagesWide = 1
            .FitToPagesTall = 0

    End With
    Application.PrintCommunication = True

我的电脑运行的是 Windows 10 1809 和 Office 2013,而我的大多数同事都在使用 Office 2010。

我不知道为什么会发生这种问题,我已经从 Excel 2010 到 2016 进行了测试,从 Windows 7 到 Windows 10 1903 的组合。

标签: excelvba

解决方案


我花了一段时间,但我发现了问题

问题:当您将 Header 的大小更改为1.2使用 line.LeftMargin = Application.CentimetersToPoints(1.2)时,默认字体大小默认保持在 11,可能在您的同事系统中不在您的系统中。

现在,如果您尝试Chr(10)使用字体大小 11 插入五次,它将超出为标题分配的空间,并且会奇怪地在单元格中可见,就像它正在发生一样。


解决方案:在设置 Headers 中的字符串之前更改字体大小。由于您使用的 Header 喜欢的大小是 9,所以总空间可以占用 String 和 5 time Chr(10)


更改以下 2 行:

    .LeftHeader = Chr(10) & Chr(10) & Chr(10) & Chr(10) & Chr(10) & "&""Verdana""&9   Client : " & clnFullName & "御中"
    .RightHeader = Chr(10) & Chr(10) & Chr(10) & Chr(10) & "&""Verdana""&9Date : " & Format(Date, "d-mmm-yyyy") & "&KFFFFFF__" & Chr(10) & "&K000000Inv no. : " & invNumber & "&KFFFFFF__"

至:

    .LeftHeader = "&""Verdana""&9" & Chr(10) & Chr(10) & Chr(10) & Chr(10) & Chr(10) & "&""Verdana""&9   Client : " & clnFullName & "??"
    .RightHeader = "&""Verdana""&9" & Chr(10) & Chr(10) & Chr(10) & Chr(10) & "&""Verdana""&9Date : " & Format(Date, "d-mmm-yyyy") & "&KFFFFFF__" & Chr(10) & "&K000000Inv no. : " & invNumber & "&KFFFFFF__"

两者都是一样的,只是我们在插入之前设置了字体大小Chr(10),因此它们的大小为 9,而不是默认大小,在不同系统中可能会有所不同。


推荐阅读