给出方程式特定数字

时间:2018-01-26 17:52:22

标签: vba ms-word

我是VBA的新手,我真的很感激帮助。首先我应该提一下我使用OFFICE 2016。 我使用宏录制创建一个复制所选方程的宏,然后插入一个表(一行,两列)并调整它以删除边框。之后,宏将复制的等式粘贴到第一个单元格中并移动到下一个单元格并插入一个空等式(然后用户在其中插入所需的等式数量)。 它工作正常,除非它到达应该粘贴复制的等式的步骤。每次运行宏我都会得到

  

运行时错误:6335

并且宏断开,当我调试它时,这是打破过程的行:

Selection.PasteAndFormat (wdFormatOriginalFormatting)

在我按下“继续/运行”按钮进行调试后,它会根据需要完成作业。 下面是我使用的宏。提前谢谢。

Sub MacroEQNUMBER()
'
' MacroEQNUMBER Macro
'
'
Dim rng As Range
If Selection.Range = "" Then
        Selection.HomeKey Unit:=wdLine
        Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    End If
Set rng = Selection.Range
rng.Cut
    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:= _
        2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
        wdAutoFitFixed
    With Selection.Tables(1)
        If .Style <> "Table Grid" Then
            .Style = "Table Grid"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = False
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = False
        .ApplyStyleRowBands = True
        .ApplyStyleColumnBands = False
        .Borders.Enable = False
    End With
    Selection.Tables(1).Cell(1, 1).Range.Select
    Selection.TypeText Text:="["
    Selection.OMaths.Add Range:=Selection.Range
    Selection.MoveRight Unit:=wdCharacter, Count:=2
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="]"
    Selection.MoveLeft Unit:=wdCharacter, Count:=2
    Selection.Tables(1).Columns(1).Cells.Width = 80
    Selection.Tables(1).Columns(2).Cells.Width = 350
    Selection.Tables(1).Cell(1, 2).Range.Select
    Selection.PasteAndFormat (wdFormatOriginalFormatting)
    Selection.TypeBackspace
    Selection.HomeKey Unit:=wdLine
    Selection.MoveLeft Unit:=wdCharacter, Count:=4

End Sub

1 个答案:

答案 0 :(得分:0)

我感觉问题来自粘贴方程式。由于您正在使用Selection,因此您很可能将Selection放在表格单元格结构中。用于允许此操作的Word,这将“破坏”文档。在更新的版本中,根本不允许,这将导致错误......

我没有尝试将录音带放在您录制的代码上,而是尽力解释其含义(感谢您的优秀描述)并将其转换为“目标代码”。 SELECTION对象并不理想,因为你无法确定它在哪里,也不是什么意思。更好的是使用底层对象模型,通常是RANGE对象。

首先,将选择分配给范围 - 现在,无论文档中的可见选择位于何处,范围都不会更改。

接下来,我将新表分配给Table对象。从那里,我可以获得第一个单元格的范围并使用它(插入文本)。

我显然需要一个选择来插入OMath,所以我在方括号之间定位,选择并插入它。最后,列格式化,剪切方程粘贴,选择位于第一个单元格的开头(我认为这是你想要的,但我最后不确定)。

Sub MacroEQNUMBER()
'
' MacroEQNUMBER Macro
'
'
Dim rng As Range
Dim tbl As word.Table
Dim cel As word.Cell
Dim rngCell As word.Range

If Selection.Range = "" Then
        Selection.HomeKey Unit:=wdLine
        Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    End If
Set rng = Selection.Range
rng.Cut
    Set tbl = ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=1, NumColumns:= _
        2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
        wdAutoFitFixed)
    With tbl
        If .Style <> "Table Grid" Then
            .Style = "Table Grid"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = False
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = False
        .ApplyStyleRowBands = True
        .ApplyStyleColumnBands = False
        .Borders.Enable = False
    End With

    Set cel = tbl.Cell(1, 1)
    Set rngCell = cel.Range
    rngCell.Text = "[]"
    rngCell.Collapse wdCollapseStart
    rngCell.MoveStart wdCharacter, 1

    rngCell.Select
    rngCell.OMaths.Add Range:=rngCell

    tbl.Columns(1).Cells.width = 80
    tbl.Columns(2).Cells.width = 350

    Set rngCell = tbl.Cell(1, 2).Range
    rngCell.PasteAndFormat wdFormatOriginalFormatting
    rngCell.Characters(rngCell.Characters.Count - 1).Delete
    tbl.Cell(1, 1).Select
    Selection.Collapse wdCollapseStart
End Sub