【问题标题】:VBA Compiles in Word 2016 but not Word 2010VBA 在 Word 2016 中编译,但不是 Word 2010
【发布时间】:2017-08-17 00:59:35
【问题描述】:

自 Word 2010 以来,MS 为 MS Word 引入的新功能之一是 LayoutColumns FootnoteOptions。

因此,以下代码行在 Word 2016 中编译:ActiveDocument.Range.FootnoteOptions.LayoutColumns 但在 Word 2010 中不编译 (我尚未在 Word 2013 中测试)

条件编译器语句似乎无济于事...除了包含 Word 2010 的 VBA7 之外,应用程序版本没有任何内容。

https://msdn.microsoft.com/VBA/Language-Reference-VBA/articles/compiler-constants

所以这不会在 Word 2010 中编译:

Sub testWd10()
#If Win64 And VBA7 Then
    ActiveDocument.Range.FootnoteOptions.LayoutColumns
#End If
End Sub

【问题讨论】:

标签: vba ms-word


【解决方案1】:

编译器指令对您没有帮助。您需要确定版本,并对旧版 Word 中没有的成员调用使用后期绑定。

Sub testWd10()
  If Application.Version > 15 Then 'e.g. 15 is Word 2013, change as necessary
      Dim myRange As Object 'As Range
      Set myRange = ActiveDocument.Range
      myRange.FootnoteOptions.LayoutColumns 'Late-bound call
  End If
End Sub

【讨论】:

  • 啊...这比我刚才说的要好
【解决方案2】:

我有点晚了,但还有一些后期绑定替代方案:

Dim o As Object
Set o = ActiveDocument.Range.FootnoteOptions
On Error Resume Next
o.LayoutColumns = 3
On Error GoTo 0

有点短和慢:

On Error Resume Next
CallByName ActiveDocument.Range.FootnoteOptions, "LayoutColumns", vbSet, 3
On Error GoTo 0

或:

On Error Resume Next
CVar(ActiveDocument.Range.FootnoteOptions).LayoutColumns = 3
On Error GoTo 0

【讨论】:

  • 太棒了,谢谢你也看看那些 - 很高兴有选择!
  • 您所说的CObj 是什么? VBA.CVar(ActiveDocument.Range.FootnoteOptions).LayoutColumns = 3 2013 年工作。
  • 感谢@ThunderFrame。不确定 VBA 是否有 CObj 作为 VB.Net,而这个页面似乎暗示它有 functionx.com/vbaexcel/functions/builtin.htm
【解决方案3】:

不如 ThunderFrame 的回答好,因为我认为将范围设置为对象可能比整个应用程序更有效,但这里是:

Sub testWd10()
    Dim wdApp As Object
    Set wdApp = Application

    If wdApp.Version > 14 Then
        wdApp.Documents(ActiveDocument.FullName).Range.FootnoteOptions.LayoutColumns
    End If
End Sub

【讨论】:

    猜你喜欢
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多