有关于如何驾驶办公室的文件吗;方程式编辑器“;通过Excel中的VBA?

有关于如何驾驶办公室的文件吗;方程式编辑器“;通过Excel中的VBA?,excel,vba,Excel,Vba,有人在VBA代码中使用过Microsoft公式编辑器吗?如果是这样,你能给我一些方向,我可以找到一些编程指导吗?如果可能的话,我想继续使用Excel 2018内置的编辑器,甚至Word 2018中的OMATH 我得到的最好结果是,如果我手动插入一个方程式,它的分配名称是“TextBox 55”,那么: ActiveSheet.Shapes("TextBox 55").DrawingObject.Text = "(a+b)/c" 我希望能够通过VBA创建和编辑/读取“方程式编辑器”方程式的内容,

有人在VBA代码中使用过Microsoft公式编辑器吗?如果是这样,你能给我一些方向,我可以找到一些编程指导吗?如果可能的话,我想继续使用Excel 2018内置的编辑器,甚至Word 2018中的OMATH

我得到的最好结果是,如果我手动插入一个方程式,它的分配名称是
“TextBox 55”
,那么:

ActiveSheet.Shapes("TextBox 55").DrawingObject.Text = "(a+b)/c"

我希望能够通过VBA创建和编辑/读取“方程式编辑器”方程式的内容,但实际上没有任何信息。我想有人会知道从哪里开始。

请注意,这只是一个解决方法(因为没有正式的方法):

您可以使用
Application.commandbar.ExecuteMso
运行功能区上的任何按钮。例如
Application.commandbar.ExecuteMso“equalationprofessional”
将公式转换为专业样式

有关如何获取标识符的信息,请参阅

这里有一些想法。请注意,在运行此代码之前,需要创建一个equation shape对象并将其称为
Textfeld 1
。我没有通过VBA创建一个,但您至少可以更改现有等式的内容

  • TestWriteFormulaA
    编写公式

  • TestWriteFormulaB
    编写公式

  • MakeEquationLinear
    将公式a转换为线性形式

  • MakeEquationProfessional
    将其转换回professional表单

  • GenerateAscWFromString
    生成方程式的组合。 请注意,方程式只能以线性形式更改
    MyEquation.DrawingObject.Text=
    。因此,在生成
    ChrW
    组合之前,请确保它是线性的

请注意,您可以将大多数符号转换为sum符号的命令,如
\sum
∑. 因此,您可以使用

MyEquation.DrawingObject.Text = "(x+a)^n=\sum_(k=0)^n (n¦k)x^k a^(n-k)"
写公式

在这里,您可以找到有关公式命令的非正式文档:


选项显式
“写一个公式a
公共子测试writeFormulaa()
像形状一样模糊的方程
设置MyEquation=ThisWorkbook.Worksheets(“Sheet1”).Shapes(“Textfeld 1”)
使方程线性化
MyEquation.DrawingObject.Text=ChrW(40)&ChrW(-10187)&ChrW(9115)&ChrW(43)&ChrW(-10187)&ChrW(41)&ChrW(94)&ChrW(-10187)&ChrW(-9125)&ChrW(61)&ChrW(8721)&ChrW(50)&ChrW(52)&ChrW(95)&ChrW(40)&ChrW(-10187)&ChrW(-9128)&ChrW(61)&ChrW(48)&ChrW(41)&ChrW(-9618)&ChrW)&ChrW(12310)&ChrW(40)&ChrW(-10187)&ChrW(-9125)&ChrW(166)&ChrW(-10187)&ChrW(-9128)&ChrW(41)&ChrW(32)&ChrW(-10187)&ChrW(-9115)&ChrW(94)&ChrW(-10187)&ChrW(-9128)&ChrW(-9138)&ChrW(94)&ChrW(-10187)&ChrW(-9125)&ChrW(-8722)&ChrW(-9128)&ChrW(-9128)&ChrW(-9128)&ChrW(-9128)&ChrW(-9128)&ChrW(12311)
'与下面相同,已手动转换为命令结构
'MyEquation.DrawingObject.Text=“(x+a)^n=\sum(k=0)^n(n k k)x^k a^(n-k)”
使方程专业化
端接头
“再写一个forumla B
公共子测试writeFormulab()
像形状一样模糊的方程
设置MyEquation=ThisWorkbook.Worksheets(“Sheet1”).Shapes(“Textfeld 1”)
使方程线性化
MyEquation.DrawingObject.Text=ChrW(40)&ChrW(49)&ChrW(43)&ChrW(-10187)&ChrW(-9115)&ChrW(41)&ChrW(-10187)&ChrW(-9125)&ChrW(61)&ChrW(49)&ChrW(43)&ChrW(-10187)&ChrW(-9115)&ChrW(47)&ChrW(33)&ChrW(43)&ChrW(-40)&ChrW(-9187)&ChrW(-9125)&ChrW(-9125)&ChrW(8722)&ChrW(49)&ChrW(41)&ChrW(32)&ChrW(-10187)&ChrW(-9115)&ChrW(94)&ChrW(50)&ChrW(41)&ChrW(47)&ChrW(50)&ChrW(33)&ChrW(43)&ChrW(8230)
使方程专业化
端接头
'在即时窗口中获取方程式的ChrW组合
公共子测试GetChrwFromequation()
像形状一样模糊的方程
设置MyEquation=ThisWorkbook.Worksheets(“Sheet1”).Shapes(“Textfeld 1”)
使方程线性化
从字符串MyEquation.DrawingObject.Text生成CW
使方程专业化
端接头
公共子方程线性化(ByVal方程作为形状)
将原始图纸变暗为对象
如果Equation.Parent.Name ActiveSheet.Name,则
设置原始图纸=活动图纸
方程式。父项。激活
如果结束
方程式。选择
Application.CommandBars.ExecuteMso“EqualationLinearFormat”
如果不是原始表,则原始表为空。激活
端接头
公共子MakeEquationProfessional(ByVal方程作为形状)
将原始图纸变暗为对象
如果Equation.Parent.Name ActiveSheet.Name,则
设置原始图纸=活动图纸
方程式。父项。激活
如果结束
方程式。选择
Application.CommandBars.ExecuteMso“EquationProfessional”
如果不是原始表,则原始表为空。激活
端接头
公共子生成器AsCWFromString(ByVal InputString作为字符串)
Dim OutputString作为字符串
暗淡的ChrIdx像长的一样
对于ChrIdx=1到Len(InputString)
OutputString=OutputString&IIf(OutputString vbNullString,&“,”)和“ChrW(&AscW(Mid$(InputString,ChrIdx,1))&”)”
下一个ChrIdx
调试。打印输出字符串
端接头

更清楚地说,我的目标是以基本文本格式在单元格中编写一个方程式,但有一个宏可以创建方程式对象并自动将其放置在我想要的位置(现在,让我们假设在相邻的单元格中)。然后,如果我在单元格中编辑公式,我的宏将自动更新它。我看到的所有加载项在如何控制它们方面仍然有限制,我也不希望
Option Explicit

' write a formula A
Public Sub TestWriteFormulaA()
    Dim MyEquation As Shape
    Set MyEquation = ThisWorkbook.Worksheets("Sheet1").Shapes("Textfeld 1")

    MakeEquationLinear MyEquation

    MyEquation.DrawingObject.Text = ChrW(40) & ChrW(-10187) & ChrW(-9115) & ChrW(43) & ChrW(-10187) & ChrW(-9138) & ChrW(41) & ChrW(94) & ChrW(-10187) & ChrW(-9125) & ChrW(61) & ChrW(8721) & ChrW(50) & ChrW(52) & ChrW(95) & ChrW(40) & ChrW(-10187) & ChrW(-9128) & ChrW(61) & ChrW(48) & ChrW(41) & ChrW(94) & ChrW(-10187) & ChrW(-9125) & ChrW(9618) & ChrW(12310) & ChrW(40) & ChrW(-10187) & ChrW(-9125) & ChrW(166) & ChrW(-10187) & ChrW(-9128) & ChrW(41) & ChrW(32) & ChrW(-10187) & ChrW(-9115) & ChrW(94) & ChrW(-10187) & ChrW(-9128) & ChrW(32) & ChrW(-10187) & ChrW(-9138) & ChrW(94) & ChrW(40) & ChrW(-10187) & ChrW(-9125) & ChrW(8722) & ChrW(-10187) & ChrW(-9128) & ChrW(41) & ChrW(32) & ChrW(12311)
    'same as below which was converted manually to the command structure
    'MyEquation.DrawingObject.Text = "(x+a)^n=\sum_(k=0)^n (n¦k)x^k a^(n-k)"
    MakeEquationProfessional MyEquation
End Sub


' write another forumla B
Public Sub TestWriteFormulaB()
    Dim MyEquation As Shape
    Set MyEquation = ThisWorkbook.Worksheets("Sheet1").Shapes("Textfeld 1")

    MakeEquationLinear MyEquation

    MyEquation.DrawingObject.Text = ChrW(40) & ChrW(49) & ChrW(43) & ChrW(-10187) & ChrW(-9115) & ChrW(41) & ChrW(94) & ChrW(-10187) & ChrW(-9125) & ChrW(61) & ChrW(49) & ChrW(43) & ChrW(-10187) & ChrW(-9125) & ChrW(-10187) & ChrW(-9115) & ChrW(47) & ChrW(49) & ChrW(33) & ChrW(43) & ChrW(40) & ChrW(-10187) & ChrW(-9125) & ChrW(40) & ChrW(-10187) & ChrW(-9125) & ChrW(8722) & ChrW(49) & ChrW(41) & ChrW(32) & ChrW(-10187) & ChrW(-9115) & ChrW(94) & ChrW(50) & ChrW(41) & ChrW(47) & ChrW(50) & ChrW(33) & ChrW(43) & ChrW(8230)

    MakeEquationProfessional MyEquation
End Sub


'get the ChrW combination of an equation in the immediate window
Public Sub TestGetChrWFromEquation()
    Dim MyEquation As Shape
    Set MyEquation = ThisWorkbook.Worksheets("Sheet1").Shapes("Textfeld 1")

    MakeEquationLinear MyEquation

    GenerateAscWFromString MyEquation.DrawingObject.Text

    MakeEquationProfessional MyEquation
End Sub




Public Sub MakeEquationLinear(ByVal Equation As Shape)
    Dim OriginalSheet As Object
    If Equation.Parent.Name <> ActiveSheet.Name Then
        Set OriginalSheet = ActiveSheet
        Equation.Parent.Activate
    End If

    Equation.Select
    Application.CommandBars.ExecuteMso "EquationLinearFormat"

    If Not OriginalSheet Is Nothing Then OriginalSheet.Activate
End Sub

Public Sub MakeEquationProfessional(ByVal Equation As Shape)
    Dim OriginalSheet As Object
    If Equation.Parent.Name <> ActiveSheet.Name Then
        Set OriginalSheet = ActiveSheet
        Equation.Parent.Activate
    End If

    Equation.Select
    Application.CommandBars.ExecuteMso "EquationProfessional"

    If Not OriginalSheet Is Nothing Then OriginalSheet.Activate
End Sub

Public Sub GenerateAscWFromString(ByVal InputString As String)
    Dim OutputString As String

    Dim ChrIdx As Long
    For ChrIdx = 1 To Len(InputString)
        OutputString = OutputString & IIf(OutputString <> vbNullString, " & ", "") & "ChrW(" & AscW(Mid$(InputString, ChrIdx, 1)) & ")"
    Next ChrIdx
    Debug.Print OutputString
End Sub