- Allgemein:Inhaltsverzeichnis ; Glossar ; Zahlen
- Rechenbeispiel: Allgemeiner Lösungsweg ; erstes ; zweites ; drittes ; viertes
- Verschiedenes: Ziel des Lehrbuches ; Tipps ; Tools ; Berechnung der semiplastischen Tragfähigkeit ; Auswertung ; Verzeichnisse
So wandelt man das Bild in ein Worddocxument um.
Das Bild wird als Windowsbitmap BMP gespeichert und dann mit einem Hexeditor geöffnet. Am Anfang und am Ende der Datei müssen Zeichen gelöscht werden. Am Anfang steht „Worddocxument beginnt hier“ und am Ende „Worddocxument endet hier“. Alle Zeichen inklusive des Textes davor bzw. dahinter werden entfernt. Die Dateiendung nennt man in docx um, um sie mit Word zu öffnen.
So bekommt man die Makros ins eigene Word:

Es gibt ein kleines Makro zur Reparatur der Dokumentstruktur von http://www.kastenmaier.de/?p=142. Dieses macht bei Worddokumenten mit mehr als 100 Seiten möglich, dass weiterhin ein Inhaltsverzeichnis aus Überschriften erstellt werden kann. Dieses Makro kommt ins Worddokument und nicht in Word. Dazu markiert und kopiert man von „Public Sub Reparatur()“ bis „End Sub“. Dann drückt man Alt F11 um den VBA-Editor zu öffnen. Oben links doppelklickt man auf Modul 1. Rechts ist ein weißer Bereich, in den man den Text einfügt.
Die eigentlichen Tools (die anderen 39 Seiten) werden unter NewMacros eingefügt. Dann geht man auf Extras – Anpassen und klickt unten auf Tastatur. Da scrollt man runter und klickt auf Makros. Nun kann man den Makros Tastenkürzel zuweisen. KKTformelumwandler erhöht das Formellevel. KKTfurmelumwandler senkt das Formellevel. Ausrechnen rechnet eine Formel aus und vAusrechnen rechnet eine Formel aus und schreibt die Formel links neben das Ergebnis.
Public Sub Reparatur() On Error GoTo NoDocumentOpen If Len(ActiveDocument.Name) = 0 Then GoTo NoDocumentOpen ' Bildschirmaktualisierung ausschalten Application.ScreenUpdating = False ' Gesamten Text im Dokument markieren Selection.WholeStory ' Gliederungsebene auf Textkörper ändern Selection.ParagraphFormat.OutlineLevel = wdOutlineLevelBodyText NoDocumentOpen: ' Bildschirmaktualisierung einschalten Application.ScreenUpdating = True End Sub Option Explicit Function Klammer(ByVal a As String) As Integer If a = "(" Then Klammer = 1 ElseIf a = ")" Then Klammer = -1 ElseIf a = "" Then Klammer = 17000 Else Klammer = 0 End If End Function Function Klammer2(ByVal a As String) As Integer If a = "{" Then Klammer2 = 1 ElseIf a = "}" Then Klammer2 = -1 ElseIf a = "" Then Klammer2 = 17000 Else Klammer2 = 0 End If End Function Function Steuerzeichen(ByVal a As String) As Integer Select Case a Case "+", "-", "*", "•", "/", ")", "(", "^", "_", "=", ChrW(8729), ChrW(8211) Steuerzeichen = 1 Case "" Steuerzeichen = 17000 Case Else Steuerzeichen = 0 End Select End Function Function IstZahl(ByVal a As String) As Integer Select Case a Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "," IstZahl = 1 Case "" IstZahl = 17000 Case Else IstZahl = 0 End Select End Function Function Typ() As Integer Dim Länge, aktuellZeichen, c, d, e As Integer Dim Formel, Tz As String If Selection.Fields.Count = 1 Then Formel = Selection.Fields(1).Code Typ = 0 'Elementar (Berechnungsfeld) For c = 1 To 3 Tz = Mid(Formel, c, 3) If Tz = "EQ " Then Typ = 2 'EQ Feld End If Next Exit Function End If Formel = Selection Länge = Len(Formel) For c = 1 To 3 Tz = Mid(Formel, c, 8) ' If Tz = ":<math> " Then ' Typ = 3 'Wikipedia Exit Function End If Tz = Mid(Tz, 1, 3) If Tz = "EQ " Then Typ = 2 'EQ Feld Exit Function End If Next d = 0 'elementare Zeichen e = 0 'chicke Zeichen For aktuellZeichen = Länge To 1 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) Select Case Tz Case "^", "_", "*" d = d + 1 Case "²", "³", "•", ChrW(8729) e = e + 1 End Select Next If Selection.Font.Superscript = False Then d = d + 0 Else e = e + 1 End If If d = 0 And e = 0 Then Typ = -1 'elementar = chick If d = 0 And e <> 0 Then Typ = 1 'chick If d <> 0 And e = 0 Then Typ = 0 'elementar If d <> 0 And e <> 0 Then Typ = 10 'elementarchick End Function Function Starten() As String Dim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As Integer Dim Formel, Tz As String If Selection.Fields.Count = 1 Then Formel = Selection.Fields(1).Code Else Formel = Selection Länge = Len(Formel) If Länge = 1 Then 'markiert bis zum ende Selection.EndKey Unit:=wdLine, Extend:=wdExtend Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend Formel = Selection Länge = Len(Formel) End If If Länge = 1 Then ' markiert bei Fehlschlag bis zum Tab oder = Selection.HomeKey Unit:=wdLine, Extend:=wdExtend Formel = Selection Länge = Len(Formel) d = 0 For e = Länge To 1 Step -1 Tz = Mid(Formel, e, 1) If Asc(Tz) = 9 Or Asc(Tz) = 61 Then Exit For d = d + 1 Next Selection.Collapse Selection.MoveRight Unit:=wdCharacter, Count:=Länge - d Selection.MoveRight Unit:=wdCharacter, Count:=d, Extend:=wdExtend End If End If Tz = Right(Formel, 1) 'prüft, ob rechts ein Absatz ist c = Asc(Tz) If c = 11 Or c = 13 Then Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend 'Tz = Formel Formel = Selection 'Länge = Len(Formel) If Länge - Len(Formel) = -1 Then Länge = Len(Formel) Selection.Collapse Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.MoveRight Unit:=wdCharacter, Count:=Länge - 2, Extend:=wdExtend 'c = MsgBox("Absatz markiert", 17, "Warnung") 'If c = 2 Then Exit Function End If End If Tz = Left(Formel, 1) 'prüft, ob links ein Absatz ist c = Asc(Tz) If c = 11 Or c = 13 Then Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend 'Tz = Formel Formel = Selection 'Länge = Len(Formel) If Länge - Len(Formel) = -1 Then Länge = Len(Formel) Selection.Collapse Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.MoveRight Unit:=wdCharacter, Count:=Länge - 2, Extend:=wdExtend 'c = MsgBox("Absatz markiert", 17, "Warnung") 'If c = 2 Then Exit Function End If End If 'Sicherung gegen Klammern Klammersumme = 0 Länge = Len(Formel) For aktuellZeichen = 1 To Länge Tz = Mid(Formel, aktuellZeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) + Klammer2(Tz) If Klammersumme < 0 Then Exit For Next If Klammersumme <> 0 Then c = MsgBox("Es sind " & Klammersumme & " Klammern zuviel", vbCritical, "Warnung") Starten = " " Exit Function End If Starten = Formel End Function Sub ausrechnen() Dim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As Integer Dim Formel, Tz As String Application.ScreenUpdating = False Formel = Starten() If Formel = " " Then Exit Sub Formeltyp = Typ() 'Reversetranslatase und RNApolymerase können eine (1) in Klammern haben 'Dadurch erzeugen sie ein EQ-Feld ohne Feld und sind damit schneller 'senkt den Formeltyp auf elementar Select Case Formeltyp Case 3 d = Reversetranslatase(1) + Reversetransskriptase() + DNAse() Case 2 d = Reversetransskriptase() + DNAse() Case 1, 10 d = DNAse() Case 0, -1 d = 0 End Select Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _ PreserveFormatting:=False Selection.TypeText Text:="= " Selection.Fields.ToggleShowCodes Selection.Fields.Update Application.ScreenUpdating = True End Sub Sub vausrechnen() Dim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As Integer Dim Formel, Tz As String Application.ScreenUpdating = False Formel = Starten() If Formel = " " Then Exit Sub Formeltyp = Typ() 'senkt den Formeltyp auf elementar Select Case Formeltyp Case 3 d = Reversetranslatase(1) + Reversetransskriptase() + DNAse() Case 2 d = Reversetransskriptase() + DNAse() Case 1, 10 d = DNAse() Case 0, -1 d = 0 End Select Formel = Selection Länge = Len(Formel) Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _ PreserveFormatting:=False Selection.TypeText Text:="= " Selection.Fields.ToggleShowCodes Selection.Fields.Update Selection.TypeText (Formel) & "=" & Chr(9) Selection.MoveLeft Unit:=wdCharacter, Count:=2 Selection.MoveLeft Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend 'stellt wahrscheinlich das EQ-Feld wieder her c = 0 For aktuellZeichen = Länge - 2 To 1 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "/" Then c = 1 Exit For End If Next If c = 0 Then For aktuellZeichen = Länge - 3 To 1 Step -1 Tz = Mid(Formel, aktuellZeichen, 3) If Tz = "0,5" Or Tz = "^1/" Then c = 1 Exit For End If Next End If If c = 1 Then d = DNApolymerase() + RNApolymerase(0) Else d = DNApolymerase() End If Application.ScreenUpdating = True End Sub Sub KKTformelumwandler() 'erhöht den Formeltyp Dim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As Integer Dim Formel, Tz As String Application.ScreenUpdating = False Formel = Starten() If Formel = " " Then Exit Sub Formeltyp = Typ() Länge = Len(Formel) Select Case Formeltyp Case -1, 10 d = DNApolymerase() + RNApolymerase(0) Case 1 d = RNApolymerase(0) Case 2 d = Ribosom() Case 3 d = Reversetranslatase(1) + Reversetransskriptase() + DNAse() Case 0 Formel = Selection c = 0 For aktuellZeichen = Länge - 2 To 1 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "/" Then c = 1 Exit For End If Next If c = 0 Then For aktuellZeichen = Länge - 3 To 1 Step -1 Tz = Mid(Formel, aktuellZeichen, 3) If Tz = "0,5" Or Tz = "^1/" Then c = 1 Exit For End If Next End If If c = 1 Then d = DNApolymerase() + RNApolymerase(0) Else d = DNApolymerase() End If End Select Application.ScreenUpdating = True End Sub Sub KKTfurmelumwandler() 'senkt den Formeltyp Dim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As Integer Dim Formel, Tz As String Application.ScreenUpdating = False Formel = Starten() If Formel = " " Then Exit Sub Formeltyp = Typ() Select Case Formeltyp Case 3 d = Reversetranslatase(0) Case 2 d = Reversetransskriptase() Case 1, 10 d = DNAse() Case 0, -1 d = DNApolymerase() + RNApolymerase(1) + Ribosom() End Select Application.ScreenUpdating = True End Sub Function DNApolymerase() As Integer 'Elementar zu chick Dim Länge, Verkürzung, Endzeichen, aktuellZeichen, Klammersumme, c, d As Integer Dim Zeichen, Formel, Tz As String DNApolymerase = 1 'Tauscht ^2 und ^3 gegen ² und ³ aus Formel = Selection Länge = Len(Formel) For aktuellZeichen = Länge - 1 To 2 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "^" Then Zeichen = Mid(Formel, aktuellZeichen + 2, 1) If IstZahl(Zeichen) = 0 Then If Selection.Characters(aktuellZeichen + 1) = "2" Then Selection.Characters(aktuellZeichen) = "²" Selection.Characters(aktuellZeichen + 1) = "" ElseIf Selection.Characters(aktuellZeichen + 1) = "3" Then Selection.Characters(aktuellZeichen) = "³" Selection.Characters(aktuellZeichen + 1) = "" End If End If End If Next ' Ersetzt * durch • Formel = Selection Länge = Len(Formel) aktuellZeichen = 1 For aktuellZeichen = Länge - 1 To 2 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "*" Then Selection.Characters(aktuellZeichen) = "•" End If Next 'stellt hochtief aktuellZeichen = 1 For aktuellZeichen = Länge - 1 To 2 Step -1 Verkürzung = 0 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "^" Then d = 1 ElseIf Tz = "_" Then d = -1 Else d = 0 End If If d <> 0 Then Tz = Mid(Formel, aktuellZeichen + 1, 1) If Tz = " " Then Selection.Characters(aktuellZeichen + 1) = "" Formel = Selection Tz = Mid(Formel, aktuellZeichen + 1, 1) End If Selection.Characters(aktuellZeichen) = "" '+1 im string If Tz = "(" Then Klammersumme = 1 Selection.Characters(aktuellZeichen) = "" While Klammersumme > 0 If d = 1 Then Selection.Characters(aktuellZeichen).Font.Superscript = True ElseIf d = -1 Then Selection.Characters(aktuellZeichen).Font.Subscript = True End If aktuellZeichen = aktuellZeichen + 1 Verkürzung = Verkürzung + 1 Tz = Mid(Formel, aktuellZeichen + 2, 1) Klammersumme = Klammersumme + Klammer(Tz) If Tz = "^" Then Selection.Characters(aktuellZeichen).InsertBefore Tz d = 0 ElseIf Tz = "_" Then Selection.Characters(aktuellZeichen).InsertBefore Tz d = 0 End If Wend Selection.Characters(aktuellZeichen) = "" aktuellZeichen = aktuellZeichen - Verkürzung Else 'Tz <> "(" Tz = Mid(Formel, aktuellZeichen + 1, 1) c = Steuerzeichen(Tz) If Tz = "²" Or Tz = "³" Then c = 1 While c = 0 If d = 1 Then Selection.Characters(aktuellZeichen).Font.Superscript = True Else Selection.Characters(aktuellZeichen).Font.Subscript = True End If aktuellZeichen = aktuellZeichen + 1 Verkürzung = Verkürzung + 1 Tz = Mid(Formel, aktuellZeichen + 1, 1) c = Steuerzeichen(Tz) If Tz = "²" Or Tz = "³" Then c = 1 If Tz = "" Then c = 1 End If Wend aktuellZeichen = aktuellZeichen - Verkürzung End If End If Next End Function Function DNAse() As Integer 'Chick zu elementar Dim Länge, aktuellZeichen As Integer Dim c, d, Endzeichen As Integer Dim Zeichen, Formel, Tz As String DNAse = 1 d = Selection.Fields.Count If d = 1 Then Selection.Fields.ToggleShowCodes Selection.Fields(1).Code.Select Länge = Selection.Characters.Count With Selection .Cut .MoveRight Unit:=wdCharacter, Count:=1 .TypeBackspace .TypeBackspace .Paste .MoveLeft Unit:=wdCharacter, Count:=Länge - 2, Extend:=wdExtend End With Formel = Selection Länge = Länge - 2 Tz = Mid(Formel, Länge, 1) If Tz = " " Then Selection.Characters(Länge) = "" End If Tz = Mid(Formel, 1, 1) If Tz = "Q" Then Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend End If End If Formel = Selection Länge = Len(Formel) For c = 1 To 3 Tz = Mid(Formel, c, 3) If Tz = "EQ " Then d = 1 'EQ Feld ohne Feld und es werden {} statt () verwendet End If Next ' Ersetzt • durch * aktuellZeichen = 2 For aktuellZeichen = 2 To Länge - 1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "•" Or Tz = ChrW(8729) Then Selection.Characters(aktuellZeichen) = "*" End If Next 'Ersetzt ²³ durch ^2^3 For aktuellZeichen = Länge To 1 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "²" Then Selection.Characters(aktuellZeichen).InsertBefore ("^2") Selection.Characters(aktuellZeichen + 2) = "" ElseIf Tz = "³" Then Selection.Characters(aktuellZeichen).InsertBefore ("^3") Selection.Characters(aktuellZeichen + 2) = "" End If Next 'Entstellt hoch Formel = Selection Länge = Len(Formel) For aktuellZeichen = Länge To 1 Step -1 If Selection.Characters(aktuellZeichen).Font.Superscript = True Then Endzeichen = aktuellZeichen c = 0 While Selection.Characters(aktuellZeichen).Font.Superscript = True c = c + Steuerzeichen(Selection.Characters(aktuellZeichen)) Selection.Characters(aktuellZeichen).Font.Superscript = False aktuellZeichen = aktuellZeichen - 1 Wend If d = 1 Then If Endzeichen - aktuellZeichen = 1 Then Selection.Characters(aktuellZeichen).InsertAfter ("^") Else Tz = Mid(Formel, Endzeichen, 1) Selection.Characters(Endzeichen).InsertBefore ("}") Selection.Characters(Endzeichen).InsertBefore (Tz) Selection.Characters(Endzeichen + 2) = "" Selection.Characters(aktuellZeichen).InsertAfter ("^{") End If Else If c > 0 Then Tz = Mid(Formel, Endzeichen, 1) Selection.Characters(Endzeichen).InsertBefore (")") Selection.Characters(Endzeichen).InsertBefore (Tz) Selection.Characters(Endzeichen + 2) = "" Selection.Characters(aktuellZeichen).InsertAfter ("^(") Else Selection.Characters(aktuellZeichen).InsertAfter ("^") End If End If End If Next 'Entstellt tief Formel = Selection Länge = Len(Formel) For aktuellZeichen = Länge To 1 Step -1 If Selection.Characters(aktuellZeichen).Font.Subscript = True Then Endzeichen = aktuellZeichen c = 0 While Selection.Characters(aktuellZeichen).Font.Subscript = True c = c + Steuerzeichen(Selection.Characters(aktuellZeichen)) Selection.Characters(aktuellZeichen).Font.Subscript = False aktuellZeichen = aktuellZeichen - 1 Wend If d = 1 Then If Endzeichen - aktuellZeichen = 1 Then Selection.Characters(aktuellZeichen).InsertAfter ("_") Else Tz = Mid(Formel, Endzeichen, 1) Selection.Characters(Endzeichen).InsertBefore ("}") Selection.Characters(Endzeichen).InsertBefore (Tz) Selection.Characters(Endzeichen + 2) = "" Selection.Characters(aktuellZeichen).InsertAfter ("_{") End If Else If c > 0 Then Tz = Mid(Formel, Endzeichen, 1) Selection.Characters(Endzeichen).InsertBefore (")") Selection.Characters(Endzeichen).InsertBefore (Tz) Selection.Characters(Endzeichen + 2) = "" Selection.Characters(aktuellZeichen).InsertAfter ("_(") Else Selection.Characters(aktuellZeichen).InsertAfter ("_") End If End If End If Next End Function Function RNApolymerase(ByVal Hemmung As Integer) As Integer 'Chick zu EQ Dim Länge, Widerherstellen, Verkürzung, aktuellZeichen, aktuellZeichen2, Klammersumme As Integer Dim c, d, e, Endzeichen, Azeichen, Tausch As Integer Dim Zeichen, Formel, Tz As String RNApolymerase = 1 'bearbeitet Quadratwurzeln Länge = Len(Selection) Formel = Selection aktuellZeichen = Länge aktuellZeichen2 = Länge - 4 For aktuellZeichen = Länge To 3 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "5" Then Tz = Mid(Formel, aktuellZeichen - 1, 1) If Tz = "," Then If Selection.Characters(aktuellZeichen - 2).Font.Superscript = True Then If Selection.Characters(aktuellZeichen - 2) = "0" Then If aktuellZeichen = Länge Then e = 1 ElseIf Selection.Characters(aktuellZeichen + 1).Font.Superscript = False Then e = 1 Else e = 0 End If If e = 1 Then If Selection.Characters(aktuellZeichen - 3).Font.Superscript = True Then If Selection.Characters(aktuellZeichen - 3) = "^" Then Selection.Characters(aktuellZeichen - 3) = "" aktuellZeichen = aktuellZeichen - 1 End If End If End If If e = 1 Then Selection.Characters(aktuellZeichen - 2) = "" Formel = Selection Tz = Mid(Formel, aktuellZeichen - 3, 1) If Tz = ")" Then Selection.Characters(aktuellZeichen - 2) = "" Selection.Characters(aktuellZeichen - 2) = "" Klammersumme = -1 aktuellZeichen2 = aktuellZeichen - 4 While Klammersumme <> 0 Tz = Mid(Formel, aktuellZeichen2, 1) Klammersumme = Klammersumme + Klammer(Tz) aktuellZeichen2 = aktuellZeichen2 - 1 Wend If aktuellZeichen2 < 2 Then Widerherstellen = Len(Selection) + 3 Selection.Characters(aktuellZeichen2 + 1) = "\r(;" If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend End If Else If Selection.Characters(aktuellZeichen2 - 1) = "\" Then Widerherstellen = Len(Selection) + 4 Selection.Characters(aktuellZeichen2 - 1).InsertBefore ("\r(;") If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend End If Selection.Characters(aktuellZeichen).InsertAfter (")") aktuellZeichen = aktuellZeichen + 2 Else Selection.Characters(aktuellZeichen2 + 1) = "\r(;" End If End If Else c = 0 aktuellZeichen2 = aktuellZeichen - 3 Selection.Characters(aktuellZeichen - 2) = ")" Selection.Characters(aktuellZeichen - 1) = "" Selection.Characters(aktuellZeichen - 2).Font.Superscript = False While c = 0 Tz = Mid(Formel, aktuellZeichen2, 1) c = Steuerzeichen(Tz) aktuellZeichen2 = aktuellZeichen2 - 1 If aktuellZeichen2 = 0 Then c = 1 End If Wend If aktuellZeichen2 = 0 Then Selection.Characters(1).InsertBefore ("\r(;") Else Selection.Characters(aktuellZeichen2 + 1).InsertAfter ("\r(;") End If End If End If End If End If End If End If If aktuellZeichen2 = 0 Then Exit For End If Next 'bearbeitet Wurzeln Länge = Len(Selection) Formel = Selection aktuellZeichen = Länge - 2 For aktuellZeichen = Länge - 2 To 2 Step -1 c = 0 Tausch = 0 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "1" Then Tz = Mid(Formel, aktuellZeichen + 1, 1) If Tz = "/" Then If Selection.Characters(aktuellZeichen).Font.Superscript = True Then If Selection.Characters(aktuellZeichen - 1).Font.Superscript = False Then While c = 0 If Länge < aktuellZeichen + Tausch + 2 Then c = 1 ElseIf Selection.Characters(aktuellZeichen + Tausch + 2).Font.Superscript = False Then c = 1 Else c = 0 End If Tausch = Tausch + 1 Wend Tausch = Tausch - 1 Selection.Characters(aktuellZeichen) = "" Selection.Characters(aktuellZeichen) = ")" Selection.Characters(aktuellZeichen).Font.Superscript = False Tz = Mid(Formel, aktuellZeichen - 1, 1) If Tz = ")" Then Selection.Characters(aktuellZeichen) = "" Klammersumme = -1 aktuellZeichen2 = aktuellZeichen - 2 While Klammersumme <> 0 Tz = Mid(Formel, aktuellZeichen2, 1) Klammersumme = Klammersumme + Klammer(Tz) aktuellZeichen2 = aktuellZeichen2 - 1 Wend If aktuellZeichen2 < 2 Then Widerherstellen = Len(Selection) + 2 Selection.Characters(aktuellZeichen2 + 1) = "\r(" If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend End If Else If Selection.Characters(aktuellZeichen2 - 1) = "\" Then aktuellZeichen2 = aktuellZeichen2 - 2 Widerherstellen = Len(Selection) + 3 Selection.Characters(aktuellZeichen2 + 1) = "\r(\" If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend End If Selection.Characters(aktuellZeichen + 2).InsertAfter (")") aktuellZeichen = aktuellZeichen + 2 Else Selection.Characters(aktuellZeichen2 + 1) = "\r(" End If End If aktuellZeichen = aktuellZeichen + 2 d = 1 For d = 1 To Tausch Selection.Characters(aktuellZeichen2 + 3).InsertAfter (Selection.Characters(aktuellZeichen + Tausch - 1)) Selection.Characters(aktuellZeichen + Tausch) = "" Next Selection.Characters(aktuellZeichen2 + 3 + Tausch).InsertAfter (";") Else aktuellZeichen2 = aktuellZeichen - 2 c = 0 If aktuellZeichen2 <> 0 Then While c = 0 Tz = Mid(Formel, aktuellZeichen2, 1) c = Steuerzeichen(Tz) If Tz = ";" Then c = 1 End If aktuellZeichen2 = aktuellZeichen2 - 1 If aktuellZeichen2 = 0 Then c = 1 End If Wend End If Widerherstellen = Len(Selection) + 2 If aktuellZeichen2 = 0 Then Selection.Characters(1).InsertBefore ("\r(") aktuellZeichen2 = aktuellZeichen2 - 1 Else Selection.Characters(aktuellZeichen2 + 1).InsertAfter ("\r(") End If aktuellZeichen = aktuellZeichen + 3 If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend End If d = 1 For d = 1 To Tausch Selection.Characters(aktuellZeichen2 + 4).InsertAfter (Selection.Characters(aktuellZeichen + Tausch)) Selection.Characters(aktuellZeichen + Tausch + 1) = "" Next Selection.Characters(aktuellZeichen2 + 4 + Tausch).InsertAfter (";") End If End If Formel = Selection End If End If End If Next 'Wandelt Brüche um Länge = Len(Selection) aktuellZeichen = Länge - 1 For aktuellZeichen = Länge - 1 To 2 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "/" Then If Selection.Characters(aktuellZeichen + 1) = " " Then Selection.Characters(aktuellZeichen + 1) = "" Länge = Länge - 1 End If If Selection.Characters(aktuellZeichen - 1) = " " Then Selection.Characters(aktuellZeichen - 1) = "" aktuellZeichen = aktuellZeichen - 1 Länge = Länge - 1 End If Formel = Selection 'bearbeitet die rechte Seite '345/54334-123 -> 0) 345/54334)-123 '345/54334 -> 0) 345/54334) '345/5433^34 -> 0) 345/5433^34) '345/(3+5) -> -0 345/3+5) '243/(4*6) -> -0 243/4*6) '345/(3+5)^4 -> 0) 345/(3+5)^4) '354/\r(;23) -> 0) 354/\r(;23)) '354/\r(;23)^56 -> 0) 354/\r(;23)56^) Verkürzung = 0 Tz = Mid(Formel, aktuellZeichen + 1, 1) If Tz = "-" Then aktuellZeichen = aktuellZeichen + 1 Verkürzung = 1 'berücksichtigt nevatives Vorzeichen End If Tz = Mid(Formel, aktuellZeichen + 1, 1) If Tz = "(" Then e = 1 ElseIf Tz = "\" Then 'geändert e = 2 'e entscheidet, wo klammern gesetzt werden Else e = 0 End If 'aktuellzeichen = / oder - If e <> 0 Then If e = 2 Then Endzeichen = aktuellZeichen + 3 Else Endzeichen = aktuellZeichen + 1 End If Klammersumme = 1 While Klammersumme <> 0 Endzeichen = Endzeichen + 1 Tz = Mid(Formel, Endzeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) Wend c = 0 d = 0 'd= hochtiefstellung If Endzeichen < Länge Then While c = 0 Endzeichen = Endzeichen + 1 If Endzeichen > Länge Then c = 1 ElseIf Selection.Characters(Endzeichen).Font.Superscript = True Then c = 0 d = 1 ElseIf Selection.Characters(Endzeichen).Font.Subscript = True Then c = 0 d = -1 ElseIf Selection.Characters(Endzeichen) = "²" Then c = 0 d = 2 ElseIf Selection.Characters(Endzeichen) = "³" Then c = 0 d = 2 Else c = 1 End If Wend End If Endzeichen = Endzeichen - 1 If d <> 0 Or e = 2 Then Selection.Characters(Endzeichen - 1).InsertAfter ("))") Selection.Characters(Endzeichen) = Selection.Characters(Endzeichen + 2) Selection.Characters(Endzeichen + 2) = "" If d = 1 Then Selection.Characters(Endzeichen).Font.Superscript = True ElseIf d = -1 Then Selection.Characters(Endzeichen).Font.Subscript = True ElseIf d = 2 Then Selection.Characters(Endzeichen).Font.Subscript = False Selection.Characters(Endzeichen).Font.Superscript = False End If Selection.Characters(Endzeichen + 1).Font.Subscript = False Selection.Characters(Endzeichen + 1).Font.Superscript = False Else Selection.Characters(aktuellZeichen + 1) = "" End If Else Endzeichen = aktuellZeichen c = 0 While c = 0 Endzeichen = Endzeichen + 1 If Endzeichen > Länge Then c = 1 Else Tz = Mid(Formel, Endzeichen, 1) c = Steuerzeichen(Tz) End If Wend If Endzeichen > Länge - 1 Then Endzeichen = Endzeichen - 1 Else If Selection.Characters(Endzeichen) = "(" And Selection.Characters(Endzeichen - 2) = "\" Then Endzeichen = Endzeichen - 3 Else Endzeichen = Endzeichen - 1 End If End If If Endzeichen = Länge Then If Selection.Characters(Endzeichen).Font.Subscript = True Then With Selection .Characters(Endzeichen - 1).InsertAfter ("))") .Characters(Endzeichen) = Selection.Characters(Endzeichen + 2) .Characters(Endzeichen).Font.Subscript = True .Characters(Endzeichen + 1).Font.Subscript = False .Characters(Endzeichen + 1).Font.Superscript = False .Characters(Endzeichen + 2) = "" End With ElseIf Selection.Characters(Endzeichen).Font.Superscript = True Then With Selection .Characters(Endzeichen - 1).InsertAfter ("))") .Characters(Endzeichen) = Selection.Characters(Endzeichen + 2) .Characters(Endzeichen).Font.Superscript = True .Characters(Endzeichen + 1).Font.Superscript = False .Characters(Endzeichen + 1).Font.Subscript = False .Characters(Endzeichen + 2) = "" End With Else With Selection .Characters(Endzeichen - 1).InsertAfter ("))") .Characters(Endzeichen) = Selection.Characters(Endzeichen + 2) .Characters(Endzeichen + 2) = "" .Characters(Endzeichen).Font.Superscript = False .Characters(Endzeichen).Font.Subscript = False .Characters(Endzeichen + 1).Font.Superscript = False .Characters(Endzeichen + 1).Font.Subscript = False End With End If Else Selection.Characters(Endzeichen).InsertAfter (")") Selection.Characters(Endzeichen + 1).Font.Subscript = False Selection.Characters(Endzeichen + 1).Font.Superscript = False End If End If 'aktuellzeichen wird wieder / aktuellZeichen = aktuellZeichen - Verkürzung 'bearbeitet die linke Seite und berücksichtigt folgende Fälle '345/dfg (0 \F(345;dfg) '2+354/wer (0 2+\F(354;wer) '(2+345)/rzt 0- \F(2+345;rzt) '3+(2+345)/rzt 0- 3+\F(2+345;rzt) '24^3/46 (0 \F(24^3;46) '(3+23)^54/234 (0 \F((3+23)^54;234) '\r(;354)/234 (0 \F(\r(;354);234) '\r(;354)^0,23/234 (0 \F(\r(;354)^0,23;234) '\o(L;\s\up4(_))/4365 (0 \F(\o(L;\s\up4(_));4365) '\o(L;\s\up4(_))_as/4365 (0 \F(\o(L;\s\up4(_))_as;4365) '\s\up4(_)/4365 (0 \F(\s\up4(_);4365) '4*6/45 (0 \F(4*6;45) '2+(3+8)*5/123 (0 2+\F((3+8)*5;123) '2+5*(3+8)/21 (0 2+\F(5*(3+8);21) '(2+5)*(7+s)/afd (0 \F((2+5)*(7+s);afd) extra '4*64/asd (0 \F(4*64;asd) '\r(;354)*sfd/234 (0 \F(\r(;354)*sfd;234) '3sd(345+sfd)/234 (0 \F(3sd(345+sfd);234) irreversibel für Reversetranskriptase '4/34*465/vbn (0 \F(\F(4;34)*465;vbn) '4+3*(4/(3+34)) (0 4+3*(\F(4;3+34)) extra '(345/465)^(1/234) (0 \r(234;\F(345;465)) extra Selection.Characters(aktuellZeichen) = ";" Formel = Selection c = 0 d = 0 e = 0 Azeichen = aktuellZeichen Klammersumme = 0 While c = 0 Azeichen = Azeichen - 1 Tz = Mid(Formel, Azeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) If Klammer(Tz) <> 0 And Klammersumme = 0 Then d = d + 1 'Prüft, ob zwischen den Klammern weitere Klammern enthalten sind End If If Azeichen = 1 Then c = 1 'berücksichtigt selbstständig negative Vorzeichen am Anfang If Klammersumme = 1 Then Azeichen = Azeichen + 1 Else If Tz = "+" And Klammersumme = 0 Then c = 1 Azeichen = Azeichen + 1 End If If (Tz = ";" Or Tz = "=") And Klammersumme = 0 Then c = 1 'Berücksichtigt, ob der Bruch sich z.B. in einer Wurzel befindet Azeichen = Azeichen + 1 End If If (Tz = "-" Or Tz = ChrW(8211)) And Klammersumme = 0 Then c = 1 Azeichen = Azeichen + 1 End If If Klammersumme = 1 Then c = 1 Azeichen = Azeichen + 1 End If End If 'Azeichen = beginn des Bruches Wend If Selection.Characters(Azeichen) = "(" And d < 2 And Selection.Characters(aktuellZeichen - 1) = ")" Then Selection.Characters(aktuellZeichen - 1) = "" If Azeichen = 1 Then Länge = Len(Selection) Selection.Characters(1).InsertBefore ("\F") If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend End If Else Selection.Characters(Azeichen).InsertBefore ("\F") End If Else If Azeichen = 1 Then Länge = Len(Selection) Selection.Characters(1).InsertBefore ("\F(") If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend End If Else Selection.Characters(Azeichen).InsertBefore ("\F(") End If End If Formel = Selection Länge = Len(Formel) End If ' gehört zu If Tz = "/" Then Next 'erkennt große klammern Länge = Len(Selection) Formel = Selection aktuellZeichen = Länge - 2 c = 0 d = 0 e = 0 For aktuellZeichen = Länge - 2 To 1 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "(" Then Azeichen = aktuellZeichen - 2 If aktuellZeichen < 3 Then d = 1 ElseIf Selection.Characters(Azeichen) = "\" Then d = 0 Else e = 0 While e = 0 If Steuerzeichen(Selection.Characters(Azeichen + 1)) = 1 Then e = 1 d = 1 ElseIf Selection.Characters(Azeichen + 1) = "\" Then e = 1 d = 0 End If If Azeichen < 1 Then e = 1 d = 1 End If Azeichen = Azeichen - 1 Wend End If If d = 1 Then d = 0 Endzeichen = aktuellZeichen + 1 Klammersumme = 1 While Klammersumme <> 0 Tz = Mid(Formel, Endzeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) Endzeichen = Endzeichen + 1 Wend Endzeichen = Endzeichen - 1 e = aktuellZeichen For e = aktuellZeichen To Endzeichen Tz = Mid(Formel, e, 1) If Tz = "\" Then d = 1 End If Next End If If d = 1 Then If Azeichen < 0 Then Länge = Len(Selection) Selection.Characters(aktuellZeichen).InsertBefore ("\b") If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend End If Else Selection.Characters(aktuellZeichen).InsertBefore ("\b") End If End If End If Next Länge = Len(Selection) + 3 Selection.Characters(1).InsertBefore ("EQ ") If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend End If If Hemmung = 1 Then Else Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _ PreserveFormatting:=False Selection.Fields.Update Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend End If 'Selection.MoveRight Unit:=wdCharacter, Count:=2 'Selection.EndKey Unit:=wdLine, Extend:=wdExtend 'Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend End Function Function Reversetransskriptase() As Integer 'EQ zu Chick Dim Länge, aktuellZeichen, Klammersumme, Tausch As Integer Dim c, d, e, Endzeichen, Azeichen As Integer Dim Zeichen, Formel, Tz As String Reversetransskriptase = 1 c = Selection.Fields.Count If c = 1 Then Selection.Fields.ToggleShowCodes Selection.Fields(1).Code.Select Länge = Selection.Characters.Count With Selection .Cut .MoveRight Unit:=wdCharacter, Count:=1 .TypeBackspace .TypeBackspace .Paste .MoveLeft Unit:=wdCharacter, Count:=Länge - 2, Extend:=wdExtend End With Formel = Selection Länge = Länge - 2 Tz = Mid(Formel, Länge, 1) If Tz = " " Then Selection.Characters(Länge) = "" End If Tz = Mid(Formel, 1, 1) If Tz = "Q" Then Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend End If End If 'Selection.MoveRight Unit:=wdCharacter, Count:=2 'Selection.EndKey Unit:=wdLine, Extend:=wdExtend 'Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend If Selection.Characters(1) = " " Then If Selection.Characters(2) = " " Then Selection.Characters(2) = "" End If End If Formel = Selection '\B entfernen Länge = Len(Formel) For aktuellZeichen = Länge - 3 To 4 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "B" Or Tz = "b" Then Tz = Mid(Formel, aktuellZeichen - 1, 1) If Tz = "\" Then Selection.Characters(aktuellZeichen) = "" Selection.Characters(aktuellZeichen - 1) = "" End If End If Next '\F umwandeln Formel = Selection Länge = Len(Formel) For aktuellZeichen = Länge - 3 To 4 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "F" Or Tz = "f" Then Tz = Mid(Formel, aktuellZeichen - 1, 1) If Tz = "\" Then Formel = Selection Länge = Len(Formel) Endzeichen = aktuellZeichen + 1 Klammersumme = 1 While Klammersumme <> 0 'aktuellzeichen = F Endzeichen = Endzeichen + 1 'Endzeichen = letzte Klammer) Tz = Mid(Formel, Endzeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) If Selection.Characters(Endzeichen) = ";" And Klammersumme = 1 Then Azeichen = Endzeichen 'Azeichen = ; End If Wend 'entfernt Leerzeichen If Selection.Characters(Azeichen + 1) = " " Then Selection.Characters(Azeichen + 1) = "" Endzeichen = Endzeichen - 1 Formel = Selection End If If Selection.Characters(Azeichen - 1) = " " Then Selection.Characters(Azeichen - 1) = "" Endzeichen = Endzeichen - 1 Azeichen = Azeichen - 1 Formel = Selection End If 'bearbeitet die rechte Seite e = 0 For c = Azeichen + 2 To Endzeichen Tz = Mid(Formel, c, 1) Select Case Tz 'Selection.Characters(c) Case "+", "-", "*", "•", "/", ChrW(8729) e = 0 Exit For Case Else e = 1 End Select Next If e = 1 Then Selection.Characters(Endzeichen) = "" Else Selection.Characters(Azeichen).InsertAfter ("(") End If Selection.Characters(Azeichen) = "/" 'Bearbeitet die linke Seite e = 0 '+3 berücksichtigt negative Vorzeichen For c = aktuellZeichen + 3 To Azeichen - 1 Tz = Mid(Formel, c, 1) Select Case Tz 'Selection.Characters(c) Case "+", "-" e = 1 Exit For Case Else e = 0 ' Klammer entfernen End Select Next If e = 1 Then If Selection.Characters(aktuellZeichen + 2) = "(" Then e = 0 ElseIf Selection.Characters(aktuellZeichen + 2) = "-" And Selection.Characters(aktuellZeichen + 3) = "(" Then e = 0 Else e = 1 'Klammer hinzufügen End If End If If e = 1 Then With Selection.Characters(Azeichen) .InsertBefore (")") .Font.Superscript = False .Font.Superscript = False End With Else Selection.Characters(aktuellZeichen + 1) = "" End If Selection.Characters(aktuellZeichen) = "" Selection.Characters(aktuellZeichen - 1) = "" End If End If Next '\R umwandeln Formel = Selection Länge = Len(Formel) For aktuellZeichen = Länge - 3 To 4 Step -1 Tz = Mid(Formel, aktuellZeichen, 1) If Tz = "R" Or Tz = "r" Then Tz = Mid(Formel, aktuellZeichen - 1, 1) If Tz = "\" Then Endzeichen = aktuellZeichen + 1 Klammersumme = 1 While Klammersumme <> 0 'aktuellzeichen = R Endzeichen = Endzeichen + 1 'Endzeichen = letzte Klammer) Tz = Mid(Formel, Endzeichen, 1) Klammersumme = Klammersumme + Klammer(Tz) If Tz = ";" And Klammersumme = 1 Then Azeichen = Endzeichen 'Azeichen = ; End If Wend 'entfernt Leerzeichen If Selection.Characters(Azeichen + 1) = " " Then Selection.Characters(Azeichen + 1) = "" Endzeichen = Endzeichen - 1 Formel = Selection End If If Selection.Characters(Azeichen - 1) = " " Then Selection.Characters(Azeichen - 1) = "" Endzeichen = Endzeichen - 1 Azeichen = Azeichen - 1 Formel = Selection End If e = 0 Tausch = 0 For c = Azeichen + 1 To Endzeichen Tz = Mid(Formel, c, 1) Select Case Tz Case "+", "-", "*", "•", "/", ChrW(8729), ChrW(8211) e = 1 '1= Klammer hinzufügen Exit For Case Else If Selection.Characters(c).Font.Superscript = True Or Selection.Characters(c).Font.Subscript = True Then If Selection.Characters(aktuellZeichen).Font.Superscript = True Then e = 0 Selection.Characters(Endzeichen).InsertBefore ("^") Endzeichen = Endzeichen + 1 Else e = 1 End If Exit For Else e = 0 End If End Select Next If aktuellZeichen = Azeichen - 2 Then If e = 1 Then ' Berücksichtigt folgende Fälle 'EQ \r(;123) ->-- 123^0,5 'EQ \r(;123+4*(234)-123) ->00 (123+4*(234)-123)^0,5 'EQ \r(;\s\up1(4)) ->-- \s\up1(4)^0,5 'EQ \r(;-354) ->00 (-354)^0,5 'EQ \r(;(354-34)^0,4) ->00 ((354-34)^0,4)^0,5 'EQ \r(;(354-34)_0,4) ->00 ((354-34)_0,4)^0,5 With Selection .Characters(Endzeichen).InsertBefore (")0,5") .Characters(Endzeichen + 4) = "" .Characters(Endzeichen).Font.Superscript = False .Characters(Endzeichen).Font.Subscript = False .Characters(Endzeichen + 1).Font.Superscript = True .Characters(Endzeichen + 2).Font.Superscript = True .Characters(Endzeichen + 3).Font.Superscript = True .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen + 1) = "" .Characters(aktuellZeichen - 1) = "" End With Else With Selection .Characters(Endzeichen).InsertBefore ("0,5") .Characters(Endzeichen + 3) = "" .Characters(Endzeichen).Font.Superscript = True .Characters(Endzeichen + 1).Font.Superscript = True .Characters(Endzeichen + 2).Font.Superscript = True .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen - 1) = "" End With End If Else Tausch = Azeichen - aktuellZeichen - 2 c = 0 For d = 1 To Tausch If Steuerzeichen(Selection.Characters(aktuellZeichen + 1 + d)) = 1 Then If Klammer(Selection.Characters(aktuellZeichen + 1 + d)) = 0 Then c = 1 'erzeugt eine Klammer; irreversibel für RNA-Polymerase End If End If Next If c = 1 Then Selection.Characters(Azeichen).InsertBefore (")") Selection.Characters(aktuellZeichen + 1).InsertAfter ("(") Tausch = Tausch + 2 Endzeichen = Endzeichen + 2 Azeichen = Azeichen + 2 End If For d = 1 To Tausch With Selection .Characters(Endzeichen).InsertBefore (Selection.Characters(aktuellZeichen + 2)) .Characters(Endzeichen).Font.Superscript = True .Characters(aktuellZeichen + 2) = "" End With Next Selection.Characters(Endzeichen) = "" If e = 1 Then With Selection .Characters(Endzeichen - Tausch) = "1/" & Selection.Characters(Endzeichen - Tausch) .Characters(Endzeichen - Tausch - 1).InsertAfter (")") .Characters(Endzeichen - Tausch).Font.Superscript = False .Characters(Endzeichen - Tausch).Font.Subscript = False .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen + 1) = "" .Characters(aktuellZeichen - 1) = "" End With Else With Selection .Characters(Endzeichen - Tausch).InsertBefore "1/" '& Selection.Characters(Endzeichen - Tausch) .Characters(Endzeichen - Tausch).Font.Superscript = True .Characters(Endzeichen - Tausch + 1).Font.Superscript = True .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen) = "" .Characters(aktuellZeichen - 1) = "" End With End If End If End If End If Next For c = 1 To 3 'ganz zum schluss If Selection.Characters(c) = "E" Or Selection.Characters(c) = "e" Then If Selection.Characters(c + 1) = "Q" Or Selection.Characters(c + 1) = "q" Then If Selection.Characters(c + 2) = " " Then If c = 1 Then Länge = Len(Selection) - 3 End If Selection.Characters(c + 2).Delete Selection.Characters(c + 1).Delete Selection.Characters(c).Delete If Len(Selection) = 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend End If Exit For End If End If End If Next End Function Function Ribosom() As Integer 'EQ zu Wikipedia Dim Länge, aktuellZeichen, Klammersumme, Tausch As Integer Dim c, d, e, Endzeichen, Azeichen As Integer Dim Zeichen, Formel, Tz, Schriftart, Schriftart2 As String Ribosom = 1 c = DNAse() Formel = Selection Länge = Len(Formel) ' Tz = Mid(Formel, Länge, 1) & "</math>" '
Selection.Characters(Länge).InsertBefore (Tz)
Selection.Characters(Länge + 8) = ""
Tz = Mid(Formel, 1, 1)
If Tz = " " Then '
Selection.Characters(1) = ":<math>"
d = 1
Tz = Mid(Formel, 2, 1)
Else
Selection.Characters(1).InsertBefore (":<math>")
d = 0 '
End If
Länge = Länge - d + 14
If Len(Selection) = 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
End If
If Tz = "e" Or Tz = "E" Then
Selection.Characters(8) = ""
Selection.Characters(8) = ""
Else
Tz = Mid(Formel, 3, 1)
If Tz = "e" Or Tz = "E" Then
Selection.Characters(9) = ""
Selection.Characters(9) = ""
End If
End If
'große Klammern
Formel = Selection
Länge = Len(Formel)
For aktuellZeichen = Länge - 7 To 8 Step -1
Tz = Mid(Formel, aktuellZeichen, 3)
If Tz = "\b(" Or Tz = "\B(" Then
Klammersumme = 1
Endzeichen = aktuellZeichen + 3
While Klammersumme <> 0
Tz = Mid(Formel, Endzeichen, 1)
Klammersumme = Klammersumme + Klammer(Tz)
Endzeichen = Endzeichen + 1
Wend
Selection.Characters(Endzeichen - 1).InsertBefore ("\right")
Selection.Characters(aktuellZeichen + 1) = "left"
Formel = Selection
End If
Next
'Brüche
Länge = Len(Formel)
For aktuellZeichen = Länge - 7 To 8 Step -1
Tz = Mid(Formel, aktuellZeichen, 3)
If Tz = "\f(" Or Tz = "\F(" Then
Klammersumme = 1
Endzeichen = aktuellZeichen + 3
While Klammersumme <> 0
Tz = Mid(Formel, Endzeichen, 1)
Klammersumme = Klammersumme + Klammer(Tz)
If Tz = ";" And Klammersumme = 1 Then
Azeichen = Endzeichen
End If
Endzeichen = Endzeichen + 1
Wend
'aktuellZeichen= \ Azeichen= ; Endzeichen-1 =)
Selection.Characters(Endzeichen - 1) = "}"
Selection.Characters(Azeichen) = "}{"
Selection.Characters(aktuellZeichen + 2) = "frac{"
Selection.Characters(aktuellZeichen + 1) = ""
Formel = Selection
End If
Next
'Wurzeln
Länge = Len(Formel)
For aktuellZeichen = Länge - 7 To 8 Step -1
Tz = Mid(Formel, aktuellZeichen, 3)
If Tz = "\r(" Or Tz = "\R(" Then
Klammersumme = 1
Endzeichen = aktuellZeichen + 3
While Klammersumme <> 0
Tz = Mid(Formel, Endzeichen, 1)
Klammersumme = Klammersumme + Klammer(Tz)
If Tz = ";" And Klammersumme = 1 Then
Azeichen = Endzeichen
End If
Endzeichen = Endzeichen + 1
Wend
'aktuellZeichen= \ Azeichen= ; Endzeichen-1 =)
If Azeichen = aktuellZeichen + 3 Then
Selection.Characters(Endzeichen - 1) = "}"
Selection.Characters(aktuellZeichen + 3) = ""
Selection.Characters(aktuellZeichen + 1) = "s"
Selection.Characters(aktuellZeichen + 2) = "qrt{"
Else
Selection.Characters(Endzeichen - 1) = "}"
Selection.Characters(Azeichen) = "]{"
Selection.Characters(aktuellZeichen + 1) = "s"
Selection.Characters(aktuellZeichen + 2) = "qrt["
End If
Formel = Selection
End If
Next
'Sonderzeichen Unicode
Länge = Len(Formel)
For aktuellZeichen = Länge - 7 To 8 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
Select Case AscW(Tz)
Case 42
Selection.Characters(aktuellZeichen) = "\cdot "
Case 44
Selection.Characters(aktuellZeichen) = "{,}"
Case 183
Selection.Characters(aktuellZeichen) = "\cdot "
Case 186
Selection.Characters(aktuellZeichen) = "^\circ "
Case 196
Selection.Characters(aktuellZeichen) = "\ddot{A}"
Case 214
Selection.Characters(aktuellZeichen) = "\ddot{O}"
Case 216
Selection.Characters(aktuellZeichen) = "\varnothing "
Case 220
Selection.Characters(aktuellZeichen) = "\ddot{U}"
Case 228
Selection.Characters(aktuellZeichen) = "\ddot{a}"
Case 246
Selection.Characters(aktuellZeichen) = "\ddot{o}"
Case 248
Selection.Characters(aktuellZeichen) = "\varnothing "
Case 252
Selection.Characters(aktuellZeichen) = "\ddot{u}"
Case 913
Selection.Characters(aktuellZeichen) = "\Alpha "
Case 914
Selection.Characters(aktuellZeichen) = "\Beta "
Case 915
Selection.Characters(aktuellZeichen) = "\Gamma "
Case 916
Selection.Characters(aktuellZeichen) = "\Delta "
Case 917
Selection.Characters(aktuellZeichen) = "\Epsilon "
Case 918
Selection.Characters(aktuellZeichen) = "\Zeta "
Case 919
Selection.Characters(aktuellZeichen) = "\Eta "
Case 920
Selection.Characters(aktuellZeichen) = "\Theta "
Case 921
Selection.Characters(aktuellZeichen) = "\Iota "
Case 922
Selection.Characters(aktuellZeichen) = "\Kappa "
Case 923
Selection.Characters(aktuellZeichen) = "\Lambda "
Case 924
Selection.Characters(aktuellZeichen) = "\Mu "
Case 925
Selection.Characters(aktuellZeichen) = "\Nu "
Case 926
Selection.Characters(aktuellZeichen) = "\Omicron "
Case 927
Selection.Characters(aktuellZeichen) = "\Xi "
Case 928
Selection.Characters(aktuellZeichen) = "\Pi "
Case 929
Selection.Characters(aktuellZeichen) = "\Rho "
Case 931
Selection.Characters(aktuellZeichen) = "\Sigma "
Case 932
Selection.Characters(aktuellZeichen) = "\Tau "
Case 933
Selection.Characters(aktuellZeichen) = "\Upsilon "
Case 934
Selection.Characters(aktuellZeichen) = "\Phi "
Case 935
Selection.Characters(aktuellZeichen) = "\Chi "
Case 936
Selection.Characters(aktuellZeichen) = "\Psi "
Case 937
Selection.Characters(aktuellZeichen) = "\Omega "
Case 945
Selection.Characters(aktuellZeichen) = "\alpha "
Case 946
Selection.Characters(aktuellZeichen) = "\beta "
Case 947
Selection.Characters(aktuellZeichen) = "\gamma "
Case 948
Selection.Characters(aktuellZeichen) = "\delta "
Case 949
Selection.Characters(aktuellZeichen) = "\epsilon "
Case 950
Selection.Characters(aktuellZeichen) = "\zeta "
Case 951
Selection.Characters(aktuellZeichen) = "\eta "
Case 952
Selection.Characters(aktuellZeichen) = "\theta "
Case 953
Selection.Characters(aktuellZeichen) = "\iota "
Case 954
Selection.Characters(aktuellZeichen) = "\kappa "
Case 955
Selection.Characters(aktuellZeichen) = "\lambda "
Case 956
Selection.Characters(aktuellZeichen) = "\mu "
Case 957
Selection.Characters(aktuellZeichen) = "\nu "
Case 958
Selection.Characters(aktuellZeichen) = "\xi "
Case 959
Selection.Characters(aktuellZeichen) = "\omicron "
Case 960
Selection.Characters(aktuellZeichen) = "\pi "
Case 961
Selection.Characters(aktuellZeichen) = "\rho "
Case 962
Selection.Characters(aktuellZeichen) = "\varsigma "
Case 963
Selection.Characters(aktuellZeichen) = "\sigma "
Case 964
Selection.Characters(aktuellZeichen) = "\tau "
Case 965
Selection.Characters(aktuellZeichen) = "\upsilon "
Case 966
Selection.Characters(aktuellZeichen) = "\phi "
Case 967
Selection.Characters(aktuellZeichen) = "\chi "
Case 968
Selection.Characters(aktuellZeichen) = "\Psi "
Case 969
Selection.Characters(aktuellZeichen) = "\omega "
Case 8729
Selection.Characters(aktuellZeichen) = "\cdot "
Case 8734
Selection.Characters(aktuellZeichen) = "\infty "
Case 8776
Selection.Characters(aktuellZeichen) = "\approx "
'Case 8800
'Selection.Characters(aktuellZeichen) = "\ungleich "
Case 8804
Selection.Characters(aktuellZeichen) = "\le "
Case 8805
Selection.Characters(aktuellZeichen) = "\ge "
End Select
Next
'Schriftart Symbol
Schriftart = Selection.Font.Name
Formel = Selection
Länge = Len(Formel)
d = 0
If Schriftart = "" Then
d = 1
Schriftart = Selection.Characters(Länge).Font.Name
If Schriftart = "Symbol" Then
Schriftart = Selection.Characters(1).Font.Name
If Schriftart = "Symbol" Then
For c = 2 To Länge - 1
Schriftart = Selection.Characters(c).Font.Name
If Schriftart <> "Symbol" Then Exit For
Next
End If
End If
End If
If d = 1 Or Schriftart = "Symbol" Then 'verhindert Bremse
For aktuellZeichen = Länge To 1 Step -1
If Selection.Characters(aktuellZeichen).Font.Name = "Symbol" Then
Tz = Mid(Formel, aktuellZeichen, 1)
e = AscW(Tz)
e = e Mod 256
If e < 0 Then e = e + 256
If e < 64 Then
Selection.Characters(aktuellZeichen) = Chr(e)
End If
Selection.Characters(aktuellZeichen).Font.Name = Schriftart
Select Case e
Case 65
Selection.Characters(aktuellZeichen) = "\Alpha "
Case 66
Selection.Characters(aktuellZeichen) = "\Beta "
Case 67
Selection.Characters(aktuellZeichen) = "\Chi "
Case 68
Selection.Characters(aktuellZeichen) = "\Delta "
Case 69
Selection.Characters(aktuellZeichen) = "\Epsilon "
Case 70
Selection.Characters(aktuellZeichen) = "\Phi "
Case 71
Selection.Characters(aktuellZeichen) = "\Gamma "
Case 72
Selection.Characters(aktuellZeichen) = "\Eta "
Case 73
Selection.Characters(aktuellZeichen) = "\Iota "
Case 74
Selection.Characters(aktuellZeichen) = "\vartheta "
Case 75
Selection.Characters(aktuellZeichen) = "\Kappa "
Case 76
Selection.Characters(aktuellZeichen) = "\Lambda "
Case 77
Selection.Characters(aktuellZeichen) = "\Mu "
Case 78
Selection.Characters(aktuellZeichen) = "\Nu "
Case 79
Selection.Characters(aktuellZeichen) = "\Omicron "
Case 80
Selection.Characters(aktuellZeichen) = "\Pi "
Case 81
Selection.Characters(aktuellZeichen) = "\Theta "
Case 82
Selection.Characters(aktuellZeichen) = "\Rho "
Case 83
Selection.Characters(aktuellZeichen) = "\Sigma "
Case 84
Selection.Characters(aktuellZeichen) = "\Tau "
Case 85
Selection.Characters(aktuellZeichen) = "\Upsilon "
Case 86
Selection.Characters(aktuellZeichen) = "\varsigma "
Case 87
Selection.Characters(aktuellZeichen) = "\Omega "
Case 88
Selection.Characters(aktuellZeichen) = "\Xi "
Case 89
Selection.Characters(aktuellZeichen) = "\Psi "
Case 90
Selection.Characters(aktuellZeichen) = "\Zeta "
Case 97
Selection.Characters(aktuellZeichen) = "\alpha "
Case 98
Selection.Characters(aktuellZeichen) = "\beta "
Case 99
Selection.Characters(aktuellZeichen) = "\chi "
Case 100
Selection.Characters(aktuellZeichen) = "\delta "
Case 101
Selection.Characters(aktuellZeichen) = "\epsilon "
Case 102
Selection.Characters(aktuellZeichen) = "\phi "
Case 103
Selection.Characters(aktuellZeichen) = "\gamma "
Case 104
Selection.Characters(aktuellZeichen) = "\eta "
Case 105
Selection.Characters(aktuellZeichen) = "\iota "
Case 106
Selection.Characters(aktuellZeichen) = "\kappa "
Case 107
Selection.Characters(aktuellZeichen) = "\lambda "
Case 108
Selection.Characters(aktuellZeichen) = "\mu "
Case 109
Selection.Characters(aktuellZeichen) = "\nu "
Case 110
Selection.Characters(aktuellZeichen) = "\omicron "
Case 111
Selection.Characters(aktuellZeichen) = "\pi "
Case 112
Selection.Characters(aktuellZeichen) = "\theta "
Case 113
Selection.Characters(aktuellZeichen) = "\rho "
Case 114
Selection.Characters(aktuellZeichen) = "\sigma "
Case 115
Selection.Characters(aktuellZeichen) = "\tau "
Case 116
Selection.Characters(aktuellZeichen) = "\upsilon "
Case 117
Selection.Characters(aktuellZeichen) = "\varpi "
Case 118
Selection.Characters(aktuellZeichen) = "\omega "
Case 119
Selection.Characters(aktuellZeichen) = "\xi "
Case 120
Selection.Characters(aktuellZeichen) = "\psi "
Case 121
Selection.Characters(aktuellZeichen) = "\zeta "
Case 163
Selection.Characters(aktuellZeichen) = "\le "
Case 165
Selection.Characters(aktuellZeichen) = "\infty "
Case 176
Selection.Characters(aktuellZeichen) = "^\circ "
Case 177
Selection.Characters(aktuellZeichen) = "\pm "
Case 179
Selection.Characters(aktuellZeichen) = "\ge "
'Case 185
'Selection.Characters(aktuellZeichen) = "ungleich "
Case 187
Selection.Characters(aktuellZeichen) = "\approx "
Case 198
Selection.Characters(aktuellZeichen) = "\varnothing "
Case 213
Selection.Characters(aktuellZeichen) = "\Pi "
Case 229
Selection.Characters(aktuellZeichen) = "\Sigma "
End Select
End If
Next
End If
'bearbeitet Lambdaquer
Formel = Selection
Länge = Len(Formel)
For aktuellZeichen = Länge - 20 To 8 Step -1
Tz = Mid(Formel, aktuellZeichen, 3)
If Tz = "\o(" Then
c = 0
Tz = Mid(Formel, aktuellZeichen + 3, 11)
If Tz = "\lambda ;¯)" Or Tz = "¯;\lambda )" Then c = 1: d = 0
Tz = Mid(Formel, aktuellZeichen + 3, 19)
If Tz = "\lambda ;\s\up1(¯))" Or Tz = "\s\up1(¯);\lambda )" Then c = 1: d = 1
If c = 1 Then
With Selection
.Characters(aktuellZeichen + 2) = "v"
.Characters(aktuellZeichen + 3) = "e"
.Characters(aktuellZeichen + 4) = "r"
.Characters(aktuellZeichen + 5) = "l"
.Characters(aktuellZeichen + 6) = "i"
.Characters(aktuellZeichen + 7) = "n"
.Characters(aktuellZeichen + 8) = "e"
.Characters(aktuellZeichen + 9) = "{"
.Characters(aktuellZeichen + 10) = "\"
.Characters(aktuellZeichen + 11) = "l"
.Characters(aktuellZeichen + 12) = "a"
End With
If d = 0 Then
Selection.Characters(aktuellZeichen + 13) = "mbda }"
Else
With Selection
.Characters(aktuellZeichen + 13) = "m"
.Characters(aktuellZeichen + 14) = "b"
.Characters(aktuellZeichen + 15) = "d"
.Characters(aktuellZeichen + 16) = "a"
.Characters(aktuellZeichen + 17) = " "
.Characters(aktuellZeichen + 18) = "}"
.Characters(aktuellZeichen + 19) = ""
.Characters(aktuellZeichen + 19) = ""
.Characters(aktuellZeichen + 19) = ""
End With
End If
End If
End If
Next
End Function
Function Reversetranslatase(ByVal Hemmung As Integer) As Integer
'Wikipedia zu EQ
Dim Länge, aktuellZeichen, Klammersumme, Tausch As Integer
Dim c, d, e, Endzeichen, Verkürzung, Azeichen As Integer
Dim Zeichen, Formel, Tz, Tt, Symbol, Schriftart, Schriftart2 As String
Reversetranslatase = 1
Formel = Selection
Länge = Len(Formel)
For aktuellZeichen = Länge - 9 To 7 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "\" Then
c = 1
Endzeichen = 1
While c = 1
Tt = Mid(Formel, aktuellZeichen + Endzeichen, 1)
If Tt <> "" Then
d = Asc(Tt)
Else
d = 63
End If
If (d > 64 And d < 91) Or (d > 96 And d < 123) Then
c = 1
Endzeichen = Endzeichen + 1
ElseIf d = 123 Then
Endzeichen = Endzeichen + 3
c = 0
Else
c = 0
End If
Wend
Tt = Mid(Formel, aktuellZeichen + 1, Endzeichen - 1)
e = 1
Select Case Tt
Case "cdot"
Symbol = ChrW(183)
Case "circ"
Symbol = ChrW(186)
aktuellZeichen = aktuellZeichen - 1
Case "ddot{A}"
Symbol = ChrW(196)
Case "ddot{O}"
Symbol = ChrW(214)
Case "ddot{U}"
Symbol = ChrW(220)
Case "ddot{a}"
Symbol = ChrW(228)
Case "ddot{o}"
Symbol = ChrW(246)
Case "varnothing"
Symbol = ChrW(248)
Case "ddot{u}"
Symbol = ChrW(252)
Case "Alpha"
Symbol = ChrW(913)
Case "Beta"
Symbol = ChrW(914)
Case "Gamma"
Symbol = ChrW(915)
Case "Delta"
Symbol = ChrW(916)
Case "Epsilon"
Symbol = ChrW(917)
Case "Zeta"
Symbol = ChrW(918)
Case "Eta"
Symbol = ChrW(919)
Case "Theta"
Symbol = ChrW(920)
Case "Iota"
Symbol = ChrW(921)
Case "Kappa"
Symbol = ChrW(922)
Case "Lambda"
Symbol = ChrW(923)
Case "Mu"
Symbol = ChrW(924)
Case "Nu"
Symbol = ChrW(925)
Case "Omicron"
Symbol = ChrW(926)
Case "Xi"
Symbol = ChrW(927)
Case "Pi"
Symbol = ChrW(928)
Case "Rho"
Symbol = ChrW(929)
Case "Sigma"
Symbol = ChrW(931)
Case "Tau"
Symbol = ChrW(932)
Case "Upsilon"
Symbol = ChrW(933)
Case "Phi"
Symbol = ChrW(934)
Case "Chi"
Symbol = ChrW(935)
Case "Psi"
Symbol = ChrW(936)
Case "Omega"
Symbol = ChrW(937)
Case "alpha"
Symbol = ChrW(945)
Case "beta"
Symbol = ChrW(946)
Case "gamma"
Symbol = ChrW(947)
Case "delta"
Symbol = ChrW(948)
Case "epsilon"
Symbol = ChrW(949)
Case "zeta"
Symbol = ChrW(950)
Case "eta"
Symbol = ChrW(951)
Case "theta"
Symbol = ChrW(952)
Case "iota"
Symbol = ChrW(953)
Case "kappa"
Symbol = ChrW(954)
Case "lambda"
Symbol = ChrW(955)
Case "mu"
Symbol = ChrW(956)
Case "nu"
Symbol = ChrW(957)
Case "xi"
Symbol = ChrW(958)
Case "omicron"
Symbol = ChrW(959)
Case "pi"
Symbol = ChrW(960)
Case "rho"
Symbol = ChrW(961)
Case "varsigma"
Symbol = ChrW(962)
Case "sigma"
Symbol = ChrW(963)
Case "tau"
Symbol = ChrW(964)
Case "upsilon"
Symbol = ChrW(965)
Case "phi"
Symbol = ChrW(966)
Case "chi"
Symbol = ChrW(967)
Case "Psi"
Symbol = ChrW(968)
Case "omega"
Symbol = ChrW(969)
Case "infty"
Symbol = ChrW(8734)
Case "approx"
Symbol = ChrW(8776)
Case "ungleich"
Symbol = ChrW(8800)
Case "le"
Symbol = ChrW(8804)
Case "ge"
Symbol = ChrW(8805)
Case Else
e = 0
End Select
If e = 1 Then
If d = 32 Then
Formel = Mid(Formel, 1, aktuellZeichen - 1) & Symbol & Mid(Formel, aktuellZeichen + Endzeichen + 1)
Else
Formel = Mid(Formel, 1, aktuellZeichen - 1) & Symbol & Mid(Formel, aktuellZeichen + Endzeichen)
End If
End If
End If
Next
'Komma
Länge = Len(Formel)
For aktuellZeichen = Länge - 9 To 7 Step -1
Tz = Mid(Formel, aktuellZeichen, 3)
If Tz = "{,}" Then
Formel = Mid(Formel, 1, aktuellZeichen - 1) & "," & Mid(Formel, aktuellZeichen + 3)
End If
Next
'overline
Länge = Len(Formel)
For aktuellZeichen = Länge - 17 To 7 Step -1 '77
Tz = Mid(Formel, aktuellZeichen, 10)
If Tz = "\overline{" Then
Tt = Mid(Formel, aktuellZeichen + 11, 1)
If Tt = "}" Then
Mid(Formel, aktuellZeichen + 2, 8) = "(\s\up1("
Mid(Formel, aktuellZeichen + 11, 1) = ")"
Formel = Mid(Formel, 1, aktuellZeichen + 9) & "¯);" & Mid(Formel, aktuellZeichen + 10)
End If
End If
Next
'bearbeitet Wurzeln
Länge = Len(Formel)
For aktuellZeichen = Länge - 14 To 7 Step -1
Tz = Mid(Formel, aktuellZeichen, 5)
If Tz = "\sqrt" Then
Formel = Mid(Formel, 1, aktuellZeichen) & "r(" & Mid(Formel, aktuellZeichen + 5)
Endzeichen = aktuellZeichen + 3
Tz = Mid(Formel, Endzeichen, 1)
If Tz = "[" Then
Formel = Mid(Formel, 1, Endzeichen - 1) & Mid(Formel, Endzeichen + 1)
While Tz <> "]"
Endzeichen = Endzeichen + 1
Tz = Mid(Formel, Endzeichen, 1)
If Tz = "" Then Tz = "]"
Wend
Formel = Mid(Formel, 1, Endzeichen - 1) & Mid(Formel, Endzeichen + 1)
Tz = Mid(Formel, Endzeichen, 1)
End If
If Tz = "{" Then
Mid(Formel, Endzeichen, 1) = ";"
Klammersumme = 1
While Klammersumme > 0
Endzeichen = Endzeichen + 1
Tz = Mid(Formel, Endzeichen, 1)
Klammersumme = Klammersumme + Klammer2(Tz)
Wend
Mid(Formel, Endzeichen, 1) = ")"
End If
End If
Next
'Brüche
Länge = Len(Formel)
For aktuellZeichen = Länge - 17 To 7 Step -1
Tz = Mid(Formel, aktuellZeichen, 5)
If Tz = "\frac" Then
Mid(Formel, aktuellZeichen + 5, 1) = "("
Formel = Mid(Formel, 1, aktuellZeichen + 1) & Mid(Formel, aktuellZeichen + 5)
Klammersumme = 1
Endzeichen = aktuellZeichen + 2
While Klammersumme > 0
Endzeichen = Endzeichen + 1
Klammersumme = Klammersumme + Klammer2(Mid(Formel, Endzeichen, 1))
Wend
Formel = Mid(Formel, 1, Endzeichen - 1) & ";" & Mid(Formel, Endzeichen + 2)
Klammersumme = 1
While Klammersumme > 0
Endzeichen = Endzeichen + 1
Klammersumme = Klammersumme + Klammer2(Mid(Formel, Endzeichen, 1))
Wend
Mid(Formel, Endzeichen, 1) = ")"
End If
Next
'große Klammern
Länge = Len(Formel)
For aktuellZeichen = Länge - 13 To 7 Step -1
Tz = Mid(Formel, aktuellZeichen, 6)
If Tz = "\right" Then
Formel = Mid(Formel, 1, aktuellZeichen - 1) & Mid(Formel, aktuellZeichen + 6)
End If
If Tz = "\left(" Then
Formel = Mid(Formel, 1, aktuellZeichen - 1) & "\b" & Mid(Formel, aktuellZeichen + 5)
End If
Next
'^2 ^3
Länge = Len(Formel)
For aktuellZeichen = Länge - 8 To 8 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "^" Then
Tz = Mid(Formel, aktuellZeichen + 1, 1)
If Tz = "2" Then
Formel = Mid(Formel, 1, aktuellZeichen - 1) & "²" & Mid(Formel, aktuellZeichen + 2)
ElseIf Tz = "3" Then
Formel = Mid(Formel, 1, aktuellZeichen - 1) & "³" & Mid(Formel, aktuellZeichen + 2)
End If
End If
Next
Länge = Len(Formel)
Formel = "EQ " & Mid(Formel, 9, Länge - 15)
Länge = Länge - 12
Selection.TypeText Formel
Selection.MoveLeft Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
'stellt hochtief von DNApolymerase mit {} statt ()
aktuellZeichen = 1
For aktuellZeichen = Länge To 5 Step -1
Verkürzung = 0
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "^" Then
d = 1
ElseIf Tz = "_" Then
d = -1
Else
d = 0
End If
If d <> 0 Then
Tz = Mid(Formel, aktuellZeichen + 1, 1)
If Tz = " " Then
Selection.Characters(aktuellZeichen + 1) = ""
Formel = Selection
Tz = Mid(Formel, aktuellZeichen + 1, 1)
End If
Selection.Characters(aktuellZeichen) = "" '+1 im string
If Tz = "{" Then
Klammersumme = 1
Selection.Characters(aktuellZeichen) = ""
While Klammersumme > 0
If d = 1 Then
Selection.Characters(aktuellZeichen).Font.Superscript = True
ElseIf d = -1 Then
Selection.Characters(aktuellZeichen).Font.Subscript = True
End If
aktuellZeichen = aktuellZeichen + 1
Verkürzung = Verkürzung + 1
Tz = Mid(Formel, aktuellZeichen + 2, 1)
Klammersumme = Klammersumme + Klammer2(Tz)
If Tz = "^" Then
Selection.Characters(aktuellZeichen).InsertBefore Tz
d = 0
ElseIf Tz = "_" Then
Selection.Characters(aktuellZeichen).InsertBefore Tz
d = 0
End If
Wend
Selection.Characters(aktuellZeichen) = ""
aktuellZeichen = aktuellZeichen - Verkürzung
Else 'Tz <> "{"
Tz = Mid(Formel, aktuellZeichen + 1, 1)
c = Steuerzeichen(Tz)
While c = 0
If d = 1 Then
Selection.Characters(aktuellZeichen).Font.Superscript = True
Else
Selection.Characters(aktuellZeichen).Font.Subscript = True
End If
aktuellZeichen = aktuellZeichen + 1
Verkürzung = Verkürzung + 1
Tz = Mid(Formel, aktuellZeichen + 1, 1)
c = Steuerzeichen(Tz)
If Tz = "" Or Tz = ";" Then
c = 1
End If
Wend
aktuellZeichen = aktuellZeichen - Verkürzung
End If
End If
Next
If Hemmung = 1 Then
Else
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
PreserveFormatting:=False
Selection.Fields.Update
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End If
End Function
Sub Formelwürfel()
Dim a, b, c, d, e, durch, Steuer As Integer
Dim Klammersumme, Zusatzlänge, Länge, aktuellZeichen As Integer
Dim X, Y, Formel, Tz As String
Dim Ort(3), Position(255) As Integer
Application.ScreenUpdating = False
For d = 1 To 20 'Anzahl der Formeln
Selection.TypeText ("2")
Zusatzlänge = 0
durch = 0
c = 200 'Komplexitzität der Formel
Klammersumme = 0
For b = 1 To c
a = Int((122 - 32 + 1) * Rnd + 32)
X = Chr(a)
If Steuer = 0 Then
For e = 1 To 4
If Steuerzeichen(X) = 0 Then
a = Int((122 - 32 + 1) * Rnd + 32)
X = Chr(a)
End If
If X = "!" Or X = "§" Or X = "%" Then
Exit For
End If
If X = "+" Or X = "j" Or X = "#" Or X = "&" Or X = "$" Then
X = "/"
Exit For
End If
Next
Else
If a < 60 Then
a = a + 20
X = Chr(a)
Steuer = 0
End If
End If
If a = 41 And Klammersumme = 0 Then
a = 40
End If
If a > 65 And a < 122 Then
If Int(4 * Rnd) = 3 Then
a = a + 848
End If
End If
X = ChrW(a)
If b = 1 And (X = "^" Or X = "_") Then
X = "1"
End If
If X = "(" Then
Klammersumme = Klammersumme + 1
ElseIf X = ")" Then
Klammersumme = Klammersumme - 1
End If
If X = "!" Or X = "§" Or X = "%" Or X = "." Or X = "@" Then
If Klammersumme > 0 Then
X = Chr(Int((122 - 98) * Rnd + 97)) & ")^0,5+"
Zusatzlänge = Zusatzlänge + 6
Klammersumme = Klammersumme - 1
Else
X = "^0,5-"
Zusatzlänge = Zusatzlänge + 4
End If
ElseIf X = ":" Or X = ";" Then
Selection.MoveLeft Unit:=wdCharacter, Count:=1
If Steuerzeichen(Selection.Characters(1)) = 0 Then
X = "^(1/" & Chr(Int((122 - 98) * Rnd + 97)) & ")"
Zusatzlänge = Zusatzlänge + 5
Else
X = "*"
End If
Selection.MoveRight Unit:=wdCharacter, Count:=1
ElseIf X = "\" Then
X = "+"
ElseIf X = "j" Or X = "#" Or X = "&" Or X = "$" Then
X = "/"
ElseIf X = "=" Then
If Klammersumme = 0 Then
X = "("
Klammersumme = Klammersumme + 1
Else
X = ")"
Klammersumme = Klammersumme - 1
End If
End If
If X = "/" Or X = "*" Then
If durch = 1 Then
X = "-"
End If
If X = "/" And durch = 0 Then
durch = 1
End If
End If
If X = "+" Or X = "-" Then
durch = 0
End If
If b = c Then
If X = "^" Or X = "_" Then
X = "j"
End If
End If
If X = "/" Then
X = Chr(Int((122 - 98) * Rnd + 97)) & X & Chr(Int((122 - 98) * Rnd + 97))
Zusatzlänge = Zusatzlänge + 2
End If
Selection.TypeText (X)
X = Left(X, 1)
Steuer = Steuerzeichen(X)
Next
If Klammersumme > 0 Then
For b = 1 To Klammersumme
Selection.TypeText (")")
Next
End If
Selection.MoveLeft Unit:=wdCharacter, Count:=c + Zusatzlänge + Klammersumme + 1, Extend:=wdExtend
'Selection.Copy
'Länge = Len(Selection)
'Selection.MoveDown Unit:=wdLine, Count:=1
'Selection.Paste
'Selection.MoveLeft Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
a = DNApolymerase()
a = RNApolymerase(1)
'Selection.Copy
'Länge = Len(Selection)
'Selection.MoveDown Unit:=wdLine, Count:=1
'Selection.Paste
'Selection.MoveLeft Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
'baut große Objekte herum
For c = 1 To 5 'Anzahl der großen Objekte
Formel = Selection
Länge = Len(Formel)
X = ""
Klammersumme = 0
aktuellZeichen = 3
e = 0
While aktuellZeichen < Länge
aktuellZeichen = aktuellZeichen + 1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "\" Then
aktuellZeichen = aktuellZeichen + 2
Tz = Mid(Formel, aktuellZeichen, 1)
End If
If Tz = "(" Then
Klammersumme = 1
aktuellZeichen = aktuellZeichen + 1
Tz = Mid(Formel, aktuellZeichen, 1)
While Klammersumme > 0
Klammersumme = Klammersumme + Klammer(Tz)
aktuellZeichen = aktuellZeichen + 1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "(" And Klammersumme = 0 Then
Klammersumme = 1
aktuellZeichen = aktuellZeichen + 1
Tz = Mid(Formel, aktuellZeichen, 1)
'e = e + 1
'Position(e) = aktuellZeichen
'X = X & Tz
End If
If Tz = "\" And Klammersumme = 0 Then
Klammersumme = 1
aktuellZeichen = aktuellZeichen + 3
Tz = Mid(Formel, aktuellZeichen, 1)
'e = e + 1
'Position(e) = aktuellZeichen
'X = X & Tz
End If
Wend
End If
e = e + 1
Position(e) = aktuellZeichen
X = X & Tz
Wend
e = Len(X)
a = Int(Rnd() * 4 + 1)
If c = 1 Then a = 4
Ort(1) = Int(Rnd() * (e + 1) + 1)
Ort(2) = Int(Rnd() * (e + 1) + 1)
If Ort(1) = Ort(2) Then Ort(2) = Ort(1) + 1
If Ort(2) < Ort(1) Then
Ort(0) = Ort(1) ' Ort 1 ist kleiner
Ort(1) = Ort(2)
Ort(2) = Ort(0)
End If
If Ort(2) > e Then
Position(Ort(2)) = Länge
Ort(1) = Ort(1) - 1
If Ort(1) = 0 Then Ort(1) = 1
End If
If Ort(2) - Ort(1) = 1 Then
If Position(Ort(2)) - Position(Ort(1)) = 1 Then
If Ort(1) > 2 Then Ort(1) = Ort(1) \ 2 + 1
End If
End If
If a = 3 Or a = 4 Then
Ort(3) = (Ort(2) + Ort(1)) \ 2
If Ort(3) = Ort(1) Then a = 2
If Ort(2) = Ort(3) Then a = 1
If Ort(2) - e = 2 Then
a = 1
End If
End If
X = X
If a = 1 Then 'Ort 2 = Ende, Ort 1 = Anfang und Ort 3 = Mitte
Selection.Characters(Position(Ort(2))).InsertBefore (")")
Selection.Characters(Position(Ort(2))).Font.Color = wdColorSkyBlue
Selection.Characters(Position(Ort(1))).InsertAfter ("\B(") 'a
Selection.Characters(Position(Ort(1))).Font.Color = wdColorSkyBlue
End If
If a = 2 Then
Selection.Characters(Position(Ort(2))).InsertBefore (")")
Selection.Characters(Position(Ort(2))).Font.Color = wdColorSkyBlue
Selection.Characters(Position(Ort(1))).InsertAfter ("\r(;") 'a
Selection.Characters(Position(Ort(1))).Font.Color = wdColorSkyBlue
End If
If a = 3 Or a = 4 Then
Selection.Characters(Position(Ort(2))).InsertBefore (")")
Selection.Characters(Position(Ort(2))).Font.Color = wdColorSkyBlue
If Selection.Characters(Position(Ort(3))) = "+" Then
Selection.Characters(Position(Ort(3))) = ";"
Selection.Characters(Position(Ort(3))).Font.Color = wdColorSkyBlue
Else
Selection.Characters(Position(Ort(3))).InsertAfter (";") 'a
Selection.Characters(Position(Ort(3)) + 1).Font.Color = wdColorSkyBlue
End If
Selection.Characters(Position(Ort(1))).InsertAfter ("\F(") 'a
Selection.Characters(Position(Ort(1)) + 1).Font.Color = wdColorSkyBlue
End If
Next
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
PreserveFormatting:=False
Selection.Fields.Update
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
If Selection = "Fehler" Then
d = d + 1
End If
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.TypeParagraph
Selection.MoveUp Unit:=wdLine, Count:=1
Next
Application.ScreenUpdating = True
End Sub
Sub Zeicheneinkreisen()
Dim Zeichenwert, Länge, c, d, e As Integer
Dim Zeichen As String
'c = 11 Or c = 13
Zeichen = Selection
d = Asc(Zeichen)
If d = 11 Or d = 13 Then
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End If
Zeichen = Selection
d = Asc(Zeichen)
If d = 11 Or d = 13 Then
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End If
Zeichen = Selection
Länge = Len(Zeichen)
Zeichenwert = Asc(Zeichen)
c = 0
If (Zeichenwert > 48 And Zeichenwert < 58) And Länge = 1 Then
Zeichenwert = Zeichenwert + 9263
c = 1
End If
If (Zeichenwert > 64 And Zeichenwert < 91) And Länge = 1 Then
Zeichenwert = Zeichenwert + 9333
c = 1
End If
If (Zeichenwert > 96 And Zeichenwert < 123) And Länge = 1 Then
Zeichenwert = Zeichenwert + 9327
c = 1
End If
If Länge = 2 Then
Select Case Zeichen
Case "10"
Zeichenwert = 9321
c = 1
Case "11"
Zeichenwert = 9322
c = 1
Case "12"
Zeichenwert = 9323
c = 1
Case "13"
Zeichenwert = 9324
c = 1
Case "14"
Zeichenwert = 9325
c = 1
Case "15"
Zeichenwert = 9326
c = 1
Case "16"
Zeichenwert = 9327
c = 1
Case "17"
Zeichenwert = 9328
c = 1
Case "18"
Zeichenwert = 9329
c = 1
Case "19"
Zeichenwert = 9330
c = 1
Case "20"
Zeichenwert = 9331
c = 1
End Select
End If
If c = 1 Then
Selection.TypeText ChrW(Zeichenwert)
End If
End Sub