了解其他人的宏中将标题大小写应用于文本的 OR 语句



我有一个来自Microsoft Word VBA课程的宏,它将标题大小写应用于文本(即,将除"the"、"to"等单词外的所有单词大写(。我试图理解讲师的推理,但他通常不会回答我在论坛上看到的问题。

我在下面复制了他的代码。基本上,它创建一个不应该大写的单词数组,将所选单词中的每个单词与该数组进行比较,如果匹配,则将blnLimit设置为"True"(即省略单词的第一个大写字母(,然后将单词"if blnmit=False Or i=1Or i=selection.words.Count"(底部第5行(大写。

我不理解这行代码,也就是说,如果"I=Selection.Words.Count",就把一个单词大写。我想这会让选择中的最后一个单词总是大写,即使它实际上不应该大写。但当我运行这个宏时,它运行得很好,也就是说,如果不应该大写,最后一个词就不大写。当我删除"I=Selection.Words.Count"时,宏根本不起作用——没有大写。

有人能解释一下为什么我的猜测是错误的吗?i=Selection.Words.Count在这个宏中是如何工作的?谢谢

Sub TitleCase()
Const strOMIT As String = "a, about, above, across, after," 'omitted rest of string for his privacy
Dim astrOmit() As String
Dim rngWord As Range
Dim i As Integer
Dim j As Integer
Dim blnOmit As Boolean
' Create array of words which should not be capitalized
astrOmit = Split(Expression:=strOMIT, Delimiter:=", ")
' Process each word in selection
For i = 1 To Selection.Words.Count
Set rngWord = Selection.Words(i)
blnOmit = False
' Compare word to each word in array
For j = LBound(astrOmit) To UBound(astrOmit)
If LCase(Trim(rngWord.Text)) = LCase(astrOmit(j)) Then
blnOmit = True
End If
Next j
' Capitalize word if necessary
If blnOmit = False Or i = 1 Or i = Selection.Words.Count Then
rngWord.Case = wdTitleWord
End If
Next i
End Sub

其中一些是意见(本网站不鼓励这样做(,但。。。

假设您在选择中看到的最后一个单词是"about"。然而,让我们假设"about"之后的下一件事是段落的末尾,并且您的选择包括整个段落。然后是选择中的最后一项。单词实际上就是段落标记。因此,"about"不是最后一个词,也不会大写。

至于作者为什么选择在条件中加入"Or i=Selection.Words.Count",这纯粹是猜测,但如果你正在利用一个标题,你可能想要

的故事

但是

没什么好说的。

在理想的世界里,实际会发生的是,无论谁指定了函数,都会准确地说明它应该做什么(也许还有为什么(。是的,我们确实可以从代码中看到有一个特殊情况,你可以计算出它的实际作用。但这并不能告诉你应该做什么。因此,任何试图测试这个例程的人都不知道它是否正常运行。

当我删除"I=Selection.Words.Count"时,宏根本不起作用——没有大写的

当我在这里这样做时(也删除了前面的"或"(,它也失败了,只是后来我意识到什么都没选。一旦我选择了一些东西,代码就会按预期工作。也许你也有类似的问题?

这段代码的目的似乎不是讨论"编码风格",但就我个人而言,我更喜欢将单独的术语放在一个条件中,例如

If (blnOmit = False) Or (i = 1) Or (i = Selection.Words.Count) Then

如果您一直在使用VBA,并且了解有关运算符如何组合、优先级规则等的所有规则,您可能不需要这些,但它对任何必须深入研究并支持代码的人都很有帮助。例如,假设有人不小心删除了略多于"Or I=Selection.Words.Count"部分的内容,并且该行最终成为

If blnOmit = False Or i Then

我想知道有多少VBA程序员会有信心在不查阅规则的情况下理解这到底意味着什么。这不是语法错误!

最新更新