有关于如何驾驶办公室的文件吗;方程式编辑器“;通过Excel中的VBA?
有人在VBA代码中使用过Microsoft公式编辑器吗?如果是这样,你能给我一些方向,我可以找到一些编程指导吗?如果可能的话,我想继续使用Excel 2018内置的编辑器,甚至Word 2018中的OMATH 我得到的最好结果是,如果我手动插入一个方程式,它的分配名称是有关于如何驾驶办公室的文件吗;方程式编辑器“;通过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创建和编辑/读取“方程式编辑器”方程式的内容,
“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
将公式a转换为线性形式MakeEquationLinear
将其转换回professional表单MakeEquationProfessional
生成方程式的组合。 请注意,方程式只能以线性形式更改GenerateAscWFromString
。因此,在生成MyEquation.DrawingObject.Text=
组合之前,请确保它是线性的ChrW
\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