【问题标题】:What does enumerations do in word object model in microsoft word?枚举在microsoft word 中的word 对象模型中有什么作用?
【发布时间】:2020-07-25 09:46:30
【问题描述】:

我是 VBA 的新手。出于某种特殊的目的,我想把光标移到文档的末尾,在网上搜索的时候发现了下面的代码sn -p。 Selection.EndKey Unit:=wdStory , 这里我的具体问题是这个 wdStory 是什么?当我搜索这个时,我得到了数百个名为 enumerations 的东西,我想知道为什么要使用它们,以及这一行对编译器的解释是什么。

【问题讨论】:

  • 枚举是常量的集合。因此,关于将选择移动多远的所有常量都在一个枚举中。为了您的利益,您可以轻松记住它们,因为它们在代码中被视为其文字值 (wdstory = 6)。这就是编译器看到的 - Selection.EndKey Unit:=6 在您的命名语法中。编译器使用定位所以EndKey(6, False).
  • 参见docsChip Pearson 关于Enum 常量;如果标志 /"composite" 枚举部分激起了您的兴趣,请查看 按位运算。干杯!
  • Microsoft 的枚举页面显示常量列表(单词形式)以及它们的等价数字(数字形式)。这是一个示例页面:docs.microsoft.com/en-us/office/vba/api/word.wdunits 通常使用单词形式更方便。如果您使用 OLE 从 Word 中控制 Excel,并且您没有在代码中引用 Excel 库,则数字形式将起作用,而 Word 形式将不起作用。
  • 在 RTF 控件中,文档中只有一个wdstory,即正文。

标签: vba ms-word


【解决方案1】:

考虑以下复杂的功能(我要求全功)

Function ConvertLength(dLength As Double, iOption As Integer) As Double
    If iOption = 0 Then ' from km to m
        ConvertLength = dLength * 1000
    
    ElseIf iOption = 1 Then  ' from m to km
        ConvertLength = dLength / 1000
    
    ElseIf iOption = 2 Then ' from m to cm
        ConvertLength = dLength * 100
    
    ElseIf iOption = 3 Then ' from cm to m
        ConvertLength = dLength / 100
    
    End If
End Function

现在我们遇到了一个问题:几乎每次我们使用此功能时,我们都必须查阅文档以确定使用哪个选项。例如要将长度从米转换为厘米,我们需要使用选项 2,调用将是

newVal = ConvertLength(oldVal, 2)

这不仅是开发时的噩梦,而且每次我们读到这一行时,我们都必须提醒自己这个选项 2 是什么。

这就是枚举大放异彩的地方。在这种情况下,我们将定义一个枚举如下:

Enum ConvertOptions
    KmToMeters = 0
    Meters2Km = 1
    Meters2cm = 2
    cmToMeters = 3
End Enum

并且函数将被重新实现为

Function ConvertLength2(dLength As Double, iOption As ConvertOptions) As Double
    If iOption = KmToMeters Then
        ConvertLength = dLength * 1000
    
    ElseIf iOption = Meters2Km Then
        ConvertLength = dLength / 1000
    
    ElseIf iOption = Meters2cm Then
        ConvertLength = dLength * 100
    
    ElseIf iOption = cmToMeters Then
        ConvertLength = dLength / 100
    
    End If
End Function

我们只是像这样使用这个新功能

newVal2 = ConvertLength2(oldVal, Meters2cm)

这里编译器看到的是2而不是Meters2cm

不仅这段代码更具可读性,而且 VB 编辑器实际上为我们自动完成了我们的代码。

现在,这不是很好吗?!

就像这个自定义枚举一样,word(excel、powerpoint 等)VBA 充满了这些枚举(常量)。我们可以放心地将它们视为我们传递给内置函数/方法的整数选项,以实现我们想要的。

最后,如果你想知道什么是“故事”,请阅读this

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 2013-11-07
    • 2013-05-27
    • 2010-09-21
    相关资源
    最近更新 更多