首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Word自动编号方程

Word自动编号方程
EN

Stack Overflow用户
提问于 2022-01-21 05:54:59
回答 1查看 87关注 0票数 0

最近,我了解到,在方程(例如,#(1),通过这个answer )之后,我可以用word逐字对方程进行手动编号。现在,我想创建一个VBA宏,以便它能够检测我的活动文档中处于显示模式的所有方程,并自动对它们进行编号(使用字段或其他方式)。目前,我仍在研究代码,但我仍然无法获得所选的等式文本,并将其替换为它本身加上#(i)。这是到目前为止我的代码

代码语言:javascript
复制
Sub NumberDisplayedEquations()
  Dim objEq As OMath
  Dim objRange As Range
  With ActiveDocument
      Dim i As Integer
      Dim j As Integer
      j = 1
      For i = 1 To .OMaths.Count
          Set objEq = .OMaths(i)
          If objEq.Type = wdOMathDisplay Then
            objEq.Linearize
            Set objRange = objEq.Range
            objRange.Text = objRange.Text + "#(" + Format(j, (0)) + ")"

            Set objRange = .OMaths.Add(objRange)
            Set objEq = objRange.OMaths(1)
            objEq.BuildUp
            j = j + 1
          End If
      Next i
  End With
End Sub

事实上,这适用于简单的方程式。但是,如果我有更复杂的东西,例如,通过等号对齐的方程,那么我的代码就会中断。我不太明白为什么,所以如果有人能给我指点,那就太好了。

编辑。问题似乎是,如果我要在显示模式下写下一个方程,例如,按alt-=,然后键入\alpha =x+2,按shift+enter而不是enter,然后继续编写下一行方程式,word在\alpha =x+2末尾添加一个额外的newline字符。实际上,使用MsgBox返回方程的文本,在原始方程\alpha =x+2的末尾有一个额外的方形字符。我不知道如何继续和检测这样的字符,因为我甚至不能键入这样的字符。

编辑2。我意识到按shift-enter会创建一个手动换行,也就是说,添加一个名为vbVerticalTab的字符,所以在对方程进行编号之前,我需要删除这个字符。实际上,我已经复制了我的工作代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-23 03:43:47

正如所承诺的,这是一个工作的vba宏代码。第一个数--方程,第二个--清空编号。唯一的警告是,以前对齐的方程在编号时不再对齐。我不知道该怎么处理这件事。

代码语言:javascript
复制
Sub NumberDisplayedEquations()
  Dim objEq As OMath
  Dim objRange As Range
  With ActiveDocument
      Dim i As Integer
      Dim j As Integer
      j = 1
      For i = 1 To .OMaths.Count
          Set objEq = .OMaths(i)
          If objEq.Type = wdOMathDisplay Then
              objEq.Linearize
              Set objRange = objEq.Range
              If InStr(1, objRange.Text, vbVerticalTab) Then
                  objRange.Text = Replace(objRange.Text, vbVerticalTab, "") + "#(" + Format(j, (0)) + ")" + vbNewLine
              Else
                  objRange.Text = objRange.Text + "#(" + Format(j, (0)) + ")"
              End If
              Set objRange = .OMaths.Add(objRange)
              Set objEq = objRange.OMaths(1)
              objEq.BuildUp
              j = j + 1
          End If
      Next i
  End With
End Sub

Sub ClearDisplayedEquationsNumber()
  Dim objEq As OMath
  Dim objRange As Range
  With ActiveDocument
      Dim i As Integer
      Dim j As Integer
      Dim L As Integer
      Dim R As Integer
      j = 1
      For i = 1 To .OMaths.Count
          Set objEq = .OMaths(i)
          If objEq.Type = wdOMathDisplay Then
              objEq.Linearize
              Set objRange = objEq.Range
              R = InStr(1, objRange.Text, "#(")
              If R > 0 Then
                  objRange.Text = Mid(objRange.Text, 3, R - 3)
                  Set objRange = .OMaths.Add(objRange)
                  Set objEq = objRange.OMaths(1)
                  objEq.BuildUp
              End If
          End If
      Next i
  End With
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70796976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档