Ich habe viele Word-Dokumente (Office 2000), die zahlreiche Formel-Objekte enthalten. Wenn so ein Dokument umformatiert wird (z.B. Schriftgröße oder Schriftart geändert), dann bleiben die Formeln erst mal so wie sie waren, da der Formeleditor seine eigenen Einstellungen dafür hat. Ich muss dann (mit neuen Einstellungen) jede Formel einzeln öffnen (es sind wirklich viele !!!) und wieder schließen, damit die geänderten Formateinstellungen aktiviert werden …
Hat jemand eine Idee wie man das einfacher machen könnte ? Z.B. ein Makro, der das aktive Dok. nach allen Formel-Objekten durchsucht, diese nacheinander öffnet und wieder schließt ?
das Problem hatte ich auch schon und bin immer daran gescheitert, dass ich mit einem Makro wohl den Formeleditor aufrufen, ihn aber nicht wieder schließen konnte.
Folgendes Visual Basic Makro funktioniert jetzt bei mir:
(Dokument vorher öffnen, den Cursor an die gewünschte Startposition bringen und natürlich die neuen Formeleditor-Einstellungen vorher einmal machen)
Sub FormelnAktualisieren()
On Error GoTo Ende:
Do
Selection.GoTo What:=wdGoToEquation, Which:=wdGoToNext, Count:=1, Name:=""
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
If Selection.Type = wdSelectionShape Then
Selection.ShapeRange(1).ConvertToInlineShape.Select
End If
Selection.InlineShapes(1).OLEFormat.ConvertTo ClassType:=„Equation.3“, _
DisplayAsIcon:=False
Selection.MoveRight Unit:=wdCharacter, Count:=1
Loop
Ende:
MsgBox „Keine weitere Formel im Dokument“
End Sub
Viel Spaß beim Ausprobieren!
Gruß Jutta
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Für die Benutzer von MathType (bei mir Version 6.9b):
Ersetze „Equation.3“ durch „Equation.DSMT4“ und dann läuft das Ganze auch dort!
Ich hatte übrigens auch Probleme mit plötzlichem Höherstellen von Formeln und verwirrender Skalierung ohne dass ich irgendwas verändert hatte.
Wird alles durch diesen neuen Quelltext behoben:
Sub FormelnAktualisieren()
Selection.WholeStory ’ Markiere alles
Selection.Font.Position = 0 ’ Alle Zeichenabstände auf Position „Normal“ stellen
Selection.HomeKey Unit:=wdStory ’ Gehe ganz an den Anfang des Dokuments
On Error GoTo Ende:
Do
’ Gehe zur nächsten Formel
Selection.GoTo What:=wdGoToEquation, Which:=wdGoToNext, Count:=1, Name:=""
’ Markiere die Formel durch einmal rechts und extend der Selection
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
If Selection.Type = wdSelectionShape Then
Selection.ShapeRange(1).ConvertToInlineShape.Select
End If
With Selection.InlineShapes(1)
’ Wenn MathType installiert ist -> „Equation.DSMT4“
’ Besitzt man „nur“ den alten Formeleditor 3.0 -> „Equation.3“
.OLEFormat.ConvertTo ClassType:=„Equation.DSMT4“, DisplayAsIcon:=False
.ScaleHeight = 100 ’ Skalierung auf 100%
.ScaleWidth = 100 ’ Skalierung auf 100%
End With
Selection.MoveRight Unit:=wdCharacter, Count:=1
Loop
Ende:
MsgBox „Keine weitere Formel im Dokument“
End Sub
Hallo zusammen,
ein paar Korrekturen nachdem das Ganze ein bei Formeln innerhalb von Tabellen gesponnen hat:
Sub FormelnAktualisieren()
Selection.WholeStory ' Markiere alles
Selection.Font.Position = 0 ' Alle Zeichen auf Position "Normal" stellen
Selection.HomeKey Unit:=wdStory ' Gehe ganz an den Anfang des Dokuments
Do
' Gehe zur nächsten Formel
Selection.GoTo What:=wdGoToEquation, Which:=wdGoToNext
' Markiere die Formel durch einmal rechts und extend der Selection
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
If Selection.Type = wdSelectionShape Then
Selection.ShapeRange(1).ConvertToInlineShape.Select
End If
If Selection.Type <> wdSelectionInlineShape Then
Exit Do ' Abbruch wenn keine Formel mehr gefunden
End If
' Achtung: NICHT mit "With Selection.InlineShapes(1)" arbeiten,
' weil dieses Objekt durch ConvertTo gelöscht und neu erzeugt wird
' Die nachfolgenden Operationen darauf würden deshalb Fehler erzeugen...
' Wenn MathType installiert ist -> "Equation.DSMT4"
' Besitzt man "nur" den alten Formeleditor 3.0 -> "Equation.3"
Selection.InlineShapes(1).OLEFormat.ConvertTo ClassType:="Equation.DSMT4", DisplayAsIcon:=False
' Manchmal skaliert Word selbständig -> Ich will 100%!
Selection.InlineShapes(1).ScaleHeight = 100 ' Skalierung auf 100%
Selection.InlineShapes(1).ScaleWidth = 100 ' Skalierung auf 100%
Selection.MoveRight Unit:=wdCharacter, Count:=1
Loop
MsgBox "Keine weitere Formel im Dokument"
End Sub