我正在开发一个 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 中的所有方程框,因为“等于对齐”对于何时执行是出了名的挑剔和挑剔。这也可能意味着可能需要进行尝试和捕获,具体取决于在通常无法从右键单击菜单中运行“等于对齐”时是否尝试运行“对齐”是否不会执行任何操作或导致错误。
对这两个实现的任何帮助将不胜感激,但我很乐意只选择第一个。
最佳答案
我构建了一个可以满足您需求的解决方案,基于:
- 通过方程式找到
等号
。 - 获取
等号
符号的位置 - 使用该位置设置 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/