首页 > 解决方案 > 在不使用 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

标签: vbams-word

解决方案


Dim oStyle As Word.Style

'Set oStyle = ActiveDocument.Styles

您应该很清楚为什么该声明注定要失败。您已声明oStyleWord.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

推荐阅读