Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1508to1512
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhalt von Textfeldern (mit Formeln) ersetzen
29.08.2016 15:36:48
Textfeldern
Hallo liebe VBA Profis,
in Excel habe ich eine Reihe von Textfeldern, die u.a. verschiedene Formeln enthalten. Diese Textfelder enthalten ganz am Anfang den Platzhalter welcher, nachdem eine Reihenfolge festgelegt wurden, mit der entsprechenden Nummerierung ersetzt werden soll.
Leider konnte ich weder Excel- noch Textdatein hochladen, somit hier ein Beispiel in Textform.
Beispiel: Es gibt Textfeld1, Textfeld2 und Textfeld3 die alle mit beginnen. Jetzt wird festgelegt, dass man mit Textfeld2 beginnen möchte ( soll durch 1. ersetzte werden), anschließend kommt Textfeld3 ( = 2.) und dann noch Textfeld1 ( = 3.).
Textfeld1: Berechne folgendes Integral Int 7x+3 dx
Textfeld2: Berechne folgendes Integral Int x+3 dx
Textfeld3: Berechne folgendes Integral Int 5x-1 dx
Soll umgewandelt werden in:
Textfeld2: 1. Berechne folgendes Integral Int x+3 dx
Textfeld3: 2. Berechne folgendes Integral Int 5x-1 dx
Textfeld1: 3. Berechne folgendes Integral Int 7x+3 dx
Mit dem folgendem Code schaffe ich es meinen Platzhalter mit einer Nummerierung (zur Vereinfachung alles noch mit Konstanten) zu ersetzen indem ich den Inhalt der Textbox komplett auslese, die Ersetzung vornehme und den Inhalt wieder reinschreibe. Dadurch geht nur leider die Formatierung der Formel verloren..

Sub TextfelderNummerieren()
ActiveSheet.Shapes.Range(Array("TextBox 1")).Select
Inhalt = Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text
Inhalt = Replace(Inhalt, "", "1.")
Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = Inhalt
End Sub
Leider wird über diesen Weg die Formatierung der Formel nicht wieder zurück gegeben. Das ganze Verfahren ist schon ein work around und ich verzweifel einfach an dieser Kombination aus Textfeld und Formel.
Habt ihr einen Tipp für mich?
Besten Dank
Janek

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Inhalt von Textfeldern (mit Formeln) ersetzen
29.08.2016 16:22:57
Textfeldern
Hi Janek,
ohne Datei können wir schlecht nachvollziehen, WIE die Formatierung aussieht.
Den Button "Zum File-Upload" wirst Du ja gefunden haben: das geht nur dann nicht, wenn Dateinamen ungültige Zeichen (wie z.B. Umlaute) enthalten: speichere die Datei nur mit Zeichen aus a..z, A..Z, 0..9 ab, dann dürfte es gehen.
Schöne Grüße,
Michael
AW: Inhalt von Textfeldern (mit Formeln) ersetzen
29.08.2016 16:47:38
Textfeldern
Hallo Michael,
du hattest Recht, im Pfad war ein Sonderzeichen enthalten.. Danke!
Hier die Testdatei: https://www.herber.de/bbs/user/107876.xlsm
Das Integral dient hier jedoch lediglich als Beispiel. Wenn möglich such ich nach einer Lösung, die im Allgemeinen die Verwendung des Formeleditors in Textfeldern erlaubt.
Freue mich über jeden Vorschlag/Idee,
Janek
Anzeige
AW: Inhalt von Textfeldern (mit Formeln) ersetzen
29.08.2016 17:45:54
Textfeldern
Hi Janek,
zum Stichwort Excel formeleditor vba gibt die Recherche nichts recht brauchbares her.
Also habe ich den Makrorekorder angeworfen und in TB2 (ab G5) die 37 durch 39 ersetzt; aufgezeichnet wird dann so was:
Option Explicit
Sub Makro1()
' Makro1 Makro
ActiveSheet.Shapes.Range(Array("TextBox 7")).Select
Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = _
"1. Berechne das folgende Integral:  ?2?5?7?+39 ?"
Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 53).ParagraphFormat. _
FirstLineIndent = 0
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 15).Font
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Size = 11
.Name = "+mn-lt"
End With
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(16, 21).Font
.BaselineOffset = 0
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Size = 11
.Name = "+mn-lt"
End With
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(37, 1).Font
.BaselineOffset = 0
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Size = 11
.Italic = msoTrue
.Name = "Cambria Math"
End With
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(38, 1).Font
.BaselineOffset = 0
.Bold = msoFalse
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Size = 11
.Italic = msoTrue
.Name = "Cambria Math"
End With
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(39, 1).Font
.BaselineOffset = 0
.Bold = msoFalse
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Size = 11
.Italic = msoTrue
.Name = "Cambria Math"
End With
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(40, 1).Font
.BaselineOffset = 0
.Bold = msoFalse
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Size = 11
.Italic = msoTrue
.Name = "Cambria Math"
End With
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(41, 1).Font
.BaselineOffset = 0
.Bold = msoFalse
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Size = 11
.Italic = msoTrue
.Name = "Cambria Math"
End With
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(42, 5).Font
.BaselineOffset = 0
.Bold = msoFalse
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Size = 11
.Italic = msoTrue
.Name = "Cambria Math"
End With
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(47, 1).Font
.BaselineOffset = 0
.Bold = msoFalse
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Size = 11
.Italic = msoTrue
.Name = "Cambria Math"
End With
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(48, 5).Font
.BaselineOffset = 0
.Bold = msoFalse
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Size = 11
.Italic = msoTrue
.Name = "Cambria Math"
End With
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(53, 1).Font
.BaselineOffset = 0
.Bold = msoFalse
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
.Fill.ForeColor.TintAndShade = 0
.Fill.ForeColor.Brightness = 0
.Fill.Transparency = 0
.Fill.Solid
.Size = 11
.Italic = msoTrue
.Name = "Cambria Math"
End With
Range("K8").Select
End Sub
Ich denke, daraus kannst Du Dir einen Ansatz basteln: Du mußt nur aufpassen, denn z.B. !#! (ich spare mir die kleiner/größer) hat 3 Zeichen, "1." nur zwei - damit verschieben sich die Sachen um ein Zeichen nach links.
Aus Zeitmangel kümmere ich mich jetzt nicht selbst darum; mit "VBA gut" wird es schon gehen, hoffe ich.
Schöne Grüße,
Michael
Anzeige
AW: Inhalt von Textfeldern (mit Formeln) ersetzen
29.08.2016 20:24:55
Textfeldern
Danke Micheal,
den Makrorekorder hatte ich natürlich auch schon mal angeworfen und ein ähnliches Ergebnis bekommen. Ich hatte gehofft, dass es einen eleganteren Weg gibt. Aber dann werde ich mal probieren das ganze so allgemein gültig wie möglich aufzubauen. Nochmals besten Dank!
Und wenn noch jmd einen einfacheren Weg kennen sollte, immer gerne :-)
Formel-Editor + VBA - bin überfordert.
30.08.2016 17:18:06
Michael
Hi Janek,
ich habe mal probiert, das zusammenzufassen, indem ich noch ein "eindeutiges Zeichen" direkt nach dem ":" eingesetzt habe, in dem Fall "!#" (aber ist ja wurscht was). Zunächst habe ich dann dessen Position p ermittelt, die zwei Zeichen mit "" zu replacen, um dann von 1 bis p die "erste" Formatierung einzusetzen, von p bis Ende die "zweite" in einem Rutsch: da kommt Mist raus.
Das Problem scheint darin zu liegen, daß die Zeichen wie im Makro aufgezeichnet mit "?" nicht sauber in den String kopiert werden; dabei bin ich über dieses komische Fenster gestolpert:
Userbild
Ehrlich gesagt, die Geschichte überfordert mich vom Fleck weg, deshalb stelle ich die Frage nochmal auf offen.
Vielleicht wäre ein Workaround hilfreich: setze NUR die Formel in eine TB und den Text in eine Zeile drüber in die Tabelle: wenn der TEXT in einer Zelle steht, ist das Austauschen des # kein Thema...
Schöne Grüße,
Michael
Anzeige

320 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige