vba - 在不使用 forloop 的情况下获取 Style 内置计数?
问题描述
我正在尝试获取内置样式的总数,而不必使用 for 循环。因为我可以用一个语句来计算所有(内置和用户定义的),我认为也可以自己做内置的。但是,尽管我在模仿 for 循环指定的内容,但尝试仅关注内置事件,但我遇到了编译时或运行时错误事件。我知道没有办法通过诸如 .Styles(builtin).Count 之类的参数来告诉 Style count 属性,以便为我提供内置样式与所有样式 .Styles.count 的计数。下面的 VBA 代码将导致问题的语句注释掉,以便最后一个调试语句给我一个数字。无论如何要这样做,还是我坚持使用 for 循环和跟踪计数的变量?我' m 使用来自 doctools.com 的 VBA 代码和下面链接中的 Microsoft 网站上的代码。尽管 If 语句现在没有任何内容(未来的内置 count 语句),但我首先尝试让它编译和运行,然后再尝试仅找出内置样式所需的 count 语句,而不是调用 sub用于循环。
Set or no Set 语句也试图在样式集中获取第一个 Ostyle,以便 if 条件至少可以测试第一个。这就像运行一次 for 循环一样。我认为我正在做的是试图为整个系列制作它,而不仅仅是其中一个。那时 VBA 可能会给我我遇到的错误。但是,我不知道我做错了什么,只告诉它样式集中的第一个。
Sub StylesBuiltin()
' Microsofts Example of built-in
' https://docs.microsoft.com/en-us/office/vba/api/word.style.builtin
Dim oDoc As Word.Document
Dim oDocs As Word.Documents
Dim oStyle As Word.Style
'Set oStyle = ActiveDocument.Styles ' Doesn't work with the set statement or without it....
' If oStyle.BuiltIn = True Then
' End If
Set oDoc = ActiveDocument
Debug.Print "No of builtin & user-defined styles in doc" & oDoc.Styles.Count
End Sub
解决方案
Dim oStyle As Word.Style
'Set oStyle = ActiveDocument.Styles
您应该很清楚为什么该声明注定要失败。您已声明oStyle
为Word.Style
(单数),然后尝试将其设置为等于ActiveDocument.Styles
(复数),这是文档中所有样式的集合。
您需要的是一个For Each
循环,这正是您引用的帮助文章中的示例为您提供的。您只需要根据您的目的稍微编辑它:
Dim styleLoop As Style
Dim builtInStylesCounter as Long
For Each styleLoop in ActiveDocument.Styles
If styleLoop.BuiltIn = True Then builtInStylesCounter = builtInStylesCounter + 1
Next styleLoop
推荐阅读
- python - Visual Studio Code 在打开集成终端时自动激活 python venv
- github - 如何为 Github 显示和手册页转换格式化手册页命令选项
- ios - 如何将图片传输到 iOS 模拟器?
- docker - Docker重定向容器内的端口或具有相同端口和network_mode的多个容器
- flutter - 如何从firebase实时数据库中为一个用户获取当前用户数据(如姓名和电子邮件)到颤动的文本字段?
- php - 我需要来自 MyBB 论坛的变量
- html - 使用xpath获取href链接的内部href
- javascript - TypeError:无法读取未定义 discord.js 的属性“执行”
- typescript - 如何根据字符串值检查泛型类型映射器是否具有键
- android - 如何将 ArrayList 转移到另一个活动