首页 > 解决方案 > VBA中的不同外观生成具有相同字体和单元格属性的工作表

问题描述

我正在尝试根据以前的模板自动准备基于 Excel 的内部报告。宏创建并填充新工作表,匹配模板的字体名称、大小、颜色等设置,以及行高 - 列宽。尽管为字体、高度、宽度等提供了完全相同的值,但 VBA 生成的工作表的字体与原始模板不匹配。我相信如果我们能弄清楚为什么 VBA 生成的文本是“像素化”的,这个问题就可以解决。

由于我不熟悉 SO 的文件共享最佳实践,我将包括用于重现新工作表的代码以及两张工作表的某些属性的比较。我将在评论中包含指向包含两张表的文件的链接。我相信拥有一份原始模板的副本来回答这个问题可能很重要。

原始模板外观VBA制作外观

这是一个如何更改单元格属性的示例,非常基本。

ws.Columns(12).EntireColumn.ColumnWidth = 9.57
ws.Rows(9).EntireRow.RowHeight = 50.25
ws.Cells(9, 12).Font.Name = "Segoe UI"
ws.Cells(9, 12).Font.Size = 11

这是我比较两张纸的一些属性,因为我不知道我在寻找什么,两张纸的所有属性都是相同的。

Range.AddIndent = False
Range.ColumnWidth = 9.57
Range.RowHeight = 50.25
Range.Font.Name = "Segoe UI"
Range.Font.FontStyle = "Regular"
Range.Font.Size = 11
Range.Font.ThemeFont = xlThemeFontNone
Range.Font.ThemeColor = 2
Range.Font.OutlineFont = False
Range.Font.Subscript = False
Range.Font.Superscript = False
Range.Font.Italic = False
Range.HasSpill = False
Range.Phonetics = Nothing
Range.PrefixCharacter = ""
Range.SpillingToRange = Nothing
Range.UseStandardHeight = True
Range.UseStandardWidth = False
Range.WrapText = True

Worksheet.Cells.AddIndent = False
Worksheet.EnableOutlining = False
Worksheet.Outline.AutomaticStyles = False
Worksheet.PageSetup.BottomMargin = 18 'These are different, but did not effect the outcome when equalized
Worksheet.PageSetup.LeftMargin = 50.4 'These are different, but did not effect the outcome when equalized
Worksheet.PageSetup.FooterMargin = 21.6 'These are equal for both
Worksheet.PageSetup.HeaderMargin = 21.6 'These are equal for both
Worksheet.StandardHeight = 16.5 'These are different, yet read-only
Worksheet.StandardWidth = 8.38 'These are different, yet read-only

我知道一点 HTML/CSS,我的猜测是尽管有相同的字体系列(名称),但 .woff2 或 .eot 对于这两种字体是不同的。我不知道为什么。

使用原始模板格式绘制目标单元格可以完成这项工作,复制/粘贴策略也是如此,但我的目标是一个干净的解决方案,而不在最终文件中包含模板并从头开始生成工作表。我还可以更改字体系列或单元格大小以获得可接受的输出,但在这一点上,出于好奇,我希望探索这个问题背后的原因。

标签: excelvba

解决方案


推荐阅读