vba - 将 "Align at equals"放入宏中

标签 vba ms-word

我正在开发一个 Word 宏来简化我的大学数学和统计学类(class)作业。基本上,选择一组方程并运行它会改变字体大小、行高并以我希望所有数学/方程部分通用的方式格式化段落。这很棒,但是有一点我仍然需要“手动”完成,可以这么说,那就是右键单击并选择“相等对齐”。

现在我在这里而不是在 super 用户上问这个问题的原因是我认为我已经用尽了在“记录宏”阶段执行此操作的所有方法。我找到了如何在不右键单击的情况下访问右键菜单,并在记录期间访问“等于对齐”选项。没有任何记录。

说实话,无论如何我更愿意对很多代码进行编码,因为它给了我更多的控制权。因此,我将在这里发布我的代码,如果有人知道我需要添加哪些代码行才能让它复制“align at equals”命令,我将非常感激。

Sub Equationiser()
'

' Equationiser Macro

'

'
    With Selection.ParagraphFormat
        .SpaceBefore = 12
        .SpaceAfter = 12
        .LineSpacingRule = wdLineSpace1pt5
    End With
    Selection.Font.Size = 20
End Sub

因此,理想情况下,在“With Selection.ParagraphFormat”部分之前,会有某种“AlignAtEquals”命令或任何需要的命令,这样,按一次按键,我就能够对齐所有等于,设置行将高度设置为 1.5,在段落前后留出 12 磅的间距,并将字体大小更改为 20。

我的绝对理想也是以编程方式选择同一 block 中的所有方程框,因为“等于对齐”对于何时执行是出了名的挑剔和挑剔。这也可能意味着可能需要进行尝试和捕获,具体取决于在通常无法从右键单击菜单中运行“等于对齐”时是否尝试运行“对齐”是否不会执行任何操作或导致错误。

对这两个实现的任何帮助将不胜感激,但我很乐意只选择第一个。

最佳答案

我构建了一个可以满足您需求的解决方案,基于:

  1. 通过方程式找到等号
  2. 获取等号符号的位置
  3. 使用该位置设置 OMath 对象的 AlignPoint 属性 这就是你的等式

Use this MSDN reference if you want to explore more

Sub Equationiser()
'

' Equationiser Macro

'

'

    Dim equationCounter As Long, charLoc As Long, FormattedTextLoc As Long

    With Selection
        For equationCounter = 1 To .OMaths.Count:
            FormattedTextLoc = 0
            For charLoc = 1 To Len(.OMaths(equationCounter).Range.FormattedText):
                FormattedTextLoc = FormattedTextLoc + Len(.OMaths(equationCounter).Range.FormattedText.Characters(charLoc))
                If .OMaths(equationCounter).Range.FormattedText.Characters(charLoc) = "=" Then
                    .OMaths(equationCounter).AlignPoint = (FormattedTextLoc - 1)
                    Exit For
                End If
            Next charLoc
        Next equationCounter
    End With


    With Selection.ParagraphFormat
        .SpaceBefore = 12
        .SpaceAfter = 12
        .LineSpacingRule = wdLineSpace1pt5
    End With
    Selection.Font.Size = 20
End Sub

我已经做了一些简短的测试,据我所知,它应该能够管理多个代码块,当选择 2 个代码块时,它将与所有方程对齐在第一个 block 中,然后对齐第二个 block 中的所有方程(两个 block 都不与其他 block 对齐) - 这是您对您的请求的期望结果吗: 我的绝对理想也可以通过编程方式选择同一 block 中的所有方程框,因为“等于对齐”对于何时执行是出了名的挑剔和挑剔。

关于vba - 将 "Align at equals"放入宏中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61478313/

相关文章:

arrays - VBA函数告诉机器不要显示某些变量

php - 将数据从 VBA (excel) 发送到 php,反之亦然

wpf - VSTO 任务 Pane 中 WPF 控件的 Dispatcher 关闭

vba - 在文档中查找字符串并删除其后的所有内容

algorithm - 不确定数量的变量的 VBA 排列

excel - 规范化 VBA 中关于时间的日期

c# - 如何使用 word interop 一次将一个项目添加到 word 文档的新行

vba - 使用宏将word文档中的公式转换为图像

excel - Excel 中缺少 WorksheetFunction.value()

vba - 将电子邮件正文保存到 Word 文档