![]() |
|
#1
|
|||
|
|||
![]() Merci jpl. Peut-être que cela vous rajeunira! Code:
Sub ExampleWriteExpression() 'insertion point should be in equation. Metric + inverse metric inserted Dim Equation As OMath Dim MathTerm As OMathFunction If Selection.OMaths.Count <> 1 Then ExpanderFatalError ("Cursor must be in an equation.") Set Equation = Selection.OMaths(1) Set MathTerm = Equation.Functions.Add(Selection.Range, wdOMathFunctionScrSub) MathTerm.ScrSub.E.Range = "g" MathTerm.ScrSub.Sub.Range = ChrW(&H3BC) & ChrW(&H3BD) Selection.TypeText ("+") ' Set MathTerm = Equation.Functions.Add(Selection.Range, wdOMathFunctionText) still gets error Set MathTerm = Equation.Functions.Add(Selection.Range, wdOMathFunctionScrSup) MathTerm.ScrSup.E.Range = "g" MathTerm.ScrSup.Sup.Range = ChrW(&H3BC) & ChrW(&H3BD) End Sub The above is another solution. But it does not solve the problem of aligning the selection in the equation. I have documented the problem more fully here and presented some code for expanding the Christoffel symbol. |
#2
|
|||
|
|||
![]()
Dans la macro ExampleWriteExpression, on peut éviter l'utilisation de l'instruction Selection.TypeText en utilisant un objet Range (que l'on modifie après chaque utilisation de la méthode Add) à la place de l'objet Selection.
La macro modifiée insère la chaîne Metric + inverse metric - metric à la position courante du curseur dans l'équation. Les 4 lignes de codes de la modification peuvent être remplacées par une procédure prenant en paramètre un objet Range, et une chaîne représentant le signe + ou - à insérer. Je ne sais pas si ceci est transposable à votre code. Code:
Sub ExampleWriteExpression() 'insertion point should be in equation. Metric + inverse metric - metric inserted Dim Equation As OMath Dim MathTerm As OMathFunction Dim plage As Range ' If Selection.OMaths.Count <> 1 Then ExpanderFatalError ("Cursor must be in an equation.") Set Equation = Selection.OMaths(1) 'Initialisation de l'objet plage à la position du curseur dans l'équation Set plage = Selection.Range Set MathTerm = Equation.Functions.Add(plage, wdOMathFunctionScrSub) MathTerm.ScrSub.E.Range.Text = "g" MathTerm.ScrSub.Sub.Range = ChrW(&H3BC) & ChrW(&H3BD) 'remplace "Selection.TypeText" Set plage = MathTerm.Range plage.Collapse (wdCollapseEnd) plage.Text = "+" plage.Collapse (wdCollapseEnd) Set MathTerm = Equation.Functions.Add(plage, wdOMathFunctionScrSup) MathTerm.ScrSup.E.Range = "g" MathTerm.ScrSup.Sup.Range = ChrW(&H3BC) & ChrW(&H3BD) 'remplace "Selection.TypeText" Set plage = MathTerm.Range plage.Collapse (wdCollapseEnd) plage.Text = "-" plage.Collapse (wdCollapseEnd) Set MathTerm = Equation.Functions.Add(plage, wdOMathFunctionScrSub) MathTerm.ScrSub.E.Range.Text = "g" MathTerm.ScrSub.Sub.Range = ChrW(&H3BC) & ChrW(&H3BD) End Sub |
#3
|
|||
|
|||
![]()
Nouvelle version
Code:
Sub ExampleWriteExpression() 'insertion point should be in equation. Metric + inverse metric - metric inserted Dim Equation As OMath Dim MathTerm As OMathFunction Dim plage As Range ' If Selection.OMaths.Count <> 1 Then ExpanderFatalError ("Cursor must be in an equation.") Set Equation = Selection.OMaths(1) Set plage = Selection.Range Set MathTerm = Equation.Functions.Add(plage, wdOMathFunctionScrSub) MathTerm.ScrSub.E.Range.Text = "g" MathTerm.ScrSub.Sub.Range = ChrW(&H3BC) & ChrW(&H3BD) 'remplace "Selection.TypeText" Set plage = Insere(MathTerm.Range, "+") Set MathTerm = Equation.Functions.Add(plage, wdOMathFunctionScrSup) MathTerm.ScrSup.E.Range = "g" MathTerm.ScrSup.Sup.Range = ChrW(&H3BC) & ChrW(&H3BD) 'remplace "Selection.TypeText" Set plage = Insere(MathTerm.Range, "-") Set MathTerm = Equation.Functions.Add(plage, wdOMathFunctionScrSub) MathTerm.ScrSub.E.Range.Text = "g" MathTerm.ScrSub.Sub.Range = ChrW(&H3BC) & ChrW(&H3BD) End Sub Function Insere(plage As Range, signe As String) As Range plage.Collapse (wdCollapseEnd) plage.Text = signe plage.Collapse (wdCollapseEnd) Set Insere = plage End Function |
#4
|
|||
|
|||
![]()
Thank you, Merci and Danke, jpl! It is certainly a great improvement to avoid using Selection.TypeText but if you remove the line
Code:
Set plage = Insere(MathTerm.Range, "+") Code:
Function InsertFunction(Functions As OMathFunctions, InsertionPoint As Range, FuncType As WdOMathFunctionType) As OMathFunction 'Add a function in Functions at InsertionPoint and move InsertionPoint to after the function, ready for next Dim NewFunction As OMathFunction Set NewFunction = Functions.Add(InsertionPoint, FuncType) Set InsertionPoint = NewFunction.Range InsertionPoint.Collapse (wdCollapseEnd) Set InsertFunction = NewFunction End Function Sub InsertText(InsertionPoint As Range, MyText As String) 'Inserts MyText at InsertionPoint and returns moves InsertionPoint to after that text 'so this is very similar to 'Equation.Functions.Add(InsertionPoint, wdOMathFunctionNormalText) .... which does not work!! InsertionPoint.Text = MyText InsertionPoint.Collapse (wdCollapseEnd) End Sub Sub ExampleWriteExpression() 'insertion point should be in equation. Metric + inverse metric inserted Dim Equation As OMath Dim MathTerm As OMathFunction Dim InsertionPoint As Range 'If Selection.OMaths.Count <> 1 Then ExpanderFatalError ("Cursor must be in an equation.") Set Equation = Selection.OMaths(1) Set InsertionPoint = Selection.Range Set MathTerm = InsertFunction(Equation.Functions, InsertionPoint, wdOMathFunctionScrSub) MathTerm.ScrSub.E.Range = "g" MathTerm.ScrSub.Sub.Range = ChrW(&H3BC) & ChrW(&H3BD) Call InsertText(InsertionPoint, "+") Set MathTerm = InsertFunction(Equation.Functions, InsertionPoint, wdOMathFunctionScrSup) MathTerm.ScrSup.E.Range = "g" MathTerm.ScrSup.Sup.Range = ChrW(&H3BC) & ChrW(&H3BD) End Sub ********************* There is only one catch! If you insert brackets (wdOMathFunctionDelim) then you need to back up one character to get inside the brackets. Something like: Code:
InsertionPoint.Start = InsertionPoint.Start - 1 'get into the bracket InsertionPoint.Collapse (wdCollapseStart) Thanks again! A great example of international collaboration. |
![]() |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Variables in Equation using OMath object | pooley343 | Word VBA | 0 | 01-09-2015 10:26 AM |
![]() |
meppley7 | PowerPoint | 2 | 04-28-2014 01:44 PM |
tool tip for object | slain | Outlook | 0 | 05-19-2011 06:06 AM |
Problem: object library invalid or contains references to object definitions | aligahk06 | Office | 0 | 08-19-2010 12:29 PM |
Could not load this object as this object is not present in your computer | k.gaurav | Office | 0 | 08-17-2009 09:57 PM |