Plattenbeulen/ Der Code
- 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