vba - 如何更改在 VBA 中创建的下拉列表的字体大小和格式
问题描述
我有一个带有 7x16 表格和默认字体大小为 22 的 word 模板。此模板用于通过在 ms Access 中单击按钮生成 16 周的日历。日历应该使月份和日期为 22pt,内容为 7pt。这适用于文本,但不适用于我的下拉列表(应该是 7pt 字体和斜体)
我尝试使用以下代码将整个单元格的字体大小设置为 7pt,但它也将月份和日期设置为 7pt:
'Dim DDown As Word.Contentcontrol and curChar As int earlier in code (for context)
Set cel = tbl.Cell(i, j)
Set celRange = cel.Range
celRange.Characters(curChar).Font.Size = 7 'This shrinks everything to 7pt
celRange.Collapse wdCollapseEnd
celRange.MoveEnd wdCharacter, -1
Set DDown = celRange.ContentControls.Add(wdContentControlDropdownList)
'Add items to dropdown
DDown.DropdownListEntries.Add "Shipping within 7 days"
DDown.DropdownListEntries.Add "On schedule"
DDown.DropdownListEntries.Add "On Hold"
Set celRange = cel.Range
celRange.Collapse wdCollapseEnd
celRange.MoveEnd wdCharacter, -1
celRange.Text = vbCrLf 'add a new line between dropdown lists
celRange.Collapse wdCollapseEnd
celRange.Select
Set DDown = Nothing
线
celRange.Characters(curChar).Font.Size = 7
将单元格中的所有内容缩小为 7pt 字体,而不仅仅是下拉列表。我还想将下拉列表斜体。是外观属性吗?
解决方案
为了应用字体更改,有必要指定应该应用它的确切范围。理论上,这将是:
ContentControl.Range.Font.Size = 7
但是,DropDown 内容控件似乎是一种特殊情况。在我的测试中,如果我将字体格式直接应用于内容控件,它只会影响选择列表和占位符文本。When an entry is selected, however, the formatting reverts to that of the surrounding text.
进一步的实验表明,还需要在包含所需格式的文档中创建字符样式。这也需要应用于内容控件和应用的直接格式。
这是应用格式的代码
DDown.DropdownListEntries.Add "Shipping within 7 days"
DDown.DropdownListEntries.Add "On schedule"
DDown.DropdownListEntries.Add "On Hold"
DDown.DefaultTextStyle = "Test7"
DDown.Range.Font.Size = 7
DDown.Range.Font.Italic = True
其中“Test7”是我在测试文档中创建的样式名称。
如果无法在文档中预定义样式,则需要即时创建。这是一些示例代码。以下行应该在循环之前(它只需要执行一次),但遵循打开/创建 Word 文档的代码:
CreateFont7Style ActiveDocument, "DdFont7" 'If the code already has a Document object, use that, not ActiveDocument
(请记住将此处指定的样式名称替换为上述代码行中的样式名称,该代码将样式应用于下拉内容控件!)
代码CreateFont7Style
(您可以命名任何您想要的名称,只需确保在两个地方都更改名称):
Sub CreateFont7Style(doc As Word.Document, styleName As String)
Dim st As Word.style
Dim fontSize As Long
Dim bItalic As Boolean
fontSize = 7
bItalic = True
Set st = doc.styles.Add(styleName, Word.WdStyleType.wdStyleTypeCharacter)
st.Font.Size = fontSize
st.Font.Italic = bItalic
End Sub
推荐阅读
- spinnaker - How add Bitbucket artifact in Spinnaker?
- e2e-testing - 在测试无服务器应用程序时,是否可以发出 API 请求以在 Cypress 中设置测试?
- android - 如何解决嵌套计数器?
- solidity - 已部署合约的函数仅返回 0
- sql - SQL 查询以识别跨多个子集的另一个表中未包含的行
- javascript - 如何使用 konva.js 将文本放入矩形中?
- oracle - 如何使插入语句可重新运行?
- javascript - 为什么使用 Twilio 获得意外令牌?
- hadoop - 从 teradata 获取查询到 pyspark
- javascript - 我如何处理 redis 和 bluebird 的错误?