Registriert seit: 25.07.2014
Version(en): 2013
Hallo Leute,
ich glaube ich habe eine schwere Aufgaben für euch. Für eine Zelle, in der ein Satz beliebiger Länge steht, sollen die einzelnen Wörter in Textfelder geschrieben werden. Die Zelle soll nachher so aussehen wie vorher. Die einzelnen Textfelder müssen also unsichtbar gemacht werden. Satzzeichen wie Doppelpunkt, Komma usw. sollen zu dem jeweiligen Wort in das Textfeld. Ich weiß, nicht leicht, aber vielleicht kann jemand mittels VBA so etwas programmieren.
Vielen Dank im voraus.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Kathrin,
sind da schon irgendwo in deiner Exceldatei Textfelder / Textboxen oder müssen die erst erzeugt werden? Wenn ja, wohin sollen die und bekommen die spezielle Namen?
Lösungsansatz: Den Text einer Zelle kannst Du übrigens mit split(cells(1,1)," ") zerlegen. Dann hast Du ein Array und kannst in einer Schleife die einzelnen Bestandteile den Textfeldern zuordnen. Wenn die Satzzeichen direkt hinter den Worten stehen, sind die dann auch beim Wort dabei. Manche schreiben z.B. vor und nach einem Komma ein Leerzeichen, dann hast Du das natürlich extra.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 11.10.2014
Version(en): 12/2007&14/2010
Schwer ist das nicht, Kathrin, André hat dir ja schon das Grundprinzip angedeutet, indem er die vbFunktion Split vorgestellt hat. Üblicherweise sind Satzzeichen kein Problem, da sie laut Vorschrift idR mit einem Leerzeichen gepaart auftreten. Die wenigen anderen Fälle sind sicher zu vernachlässigen, falls sie überhaupt bei dir auftreten. Aber auch dafür gäbe es bereits fertige Lösungen. Man kann das dann auch per Matrixformel und UDF auf Split-Basis in einen Zellbereich ausgeben, die Textfelder auf die einzelnen Zellen des Formelergebnisses verlinken, wenn der Text dort erscheint, die Verlinkung wieder entfernen (Text bleibt erhalten!), die Formelergebnisse löschen und die Textfelder unsichtbar machen. Fertig! Gruß, Castor
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
26.10.2014, 07:27
(Dieser Beitrag wurde zuletzt bearbeitet: 26.10.2014, 07:27 von schauan.)
Hallo Kathrin, ein Zeichen fällt mir gerade noch ein - der Bindestrich. Bei diesem Satz wäre selbiger bei Verwendung von Split ein eigenes Wort. Man müsste für diesem Fall bei meinem Ansatz den Bindestrich vor dem Splitting mit vor- und nachgestelltem Leerzeichen ersetzen ... " - " durch "- " Gibt es da eventuell noch weitere? Geht der Satz über eine Zeile? Eventuell müsste Excel ansonsten ALT+ENTER entfernen und eventuell einen zeilenwechselbedingten Bindestrich mitten im Wort.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 25.07.2014
Version(en): 2013
Hallo Andre,
ich würde sagen alle Satzzeichen wie Doppelpunkt, Semikolon, Bindestrich usw. gehören zum Wort für das Textfeld oder aber das würde die Angelegenheit wohl auch nicht gerade einfacher machen kommen gar nicht ein ein Textfeld. Würde der Programmieraufgrund aufgrunde dessen zu stark ansteigen, können wir interne Satzzeichen auch ganz weglassen. Zu deinem Vorschlag mit Split, nun ja das ist mir auch klar es so zu machen. Das große Problem ist aber bei der ganzen Aufgabe (unabhängig davon das ich mich mit Textfeldern überhaupt nicht auskenne) die paßgenaue Positionierung. Ich kann schließlich nicht irgendwelche Stringoperatoren dafür benutzen. Dazu sollen die Textfelder dann auch wieder unsichtbar werden. Also einfach wird's bestimmt nicht.
Registriert seit: 25.07.2014
Version(en): 2013
Also wenn ich so überlege, sollte die Aufgabe so gelöst werden als wären überhaupt keine Satzzeichen im Satz. Schließlich könnte man mittels Replace Anweisung den ganzen Satz davon schnell bereinigen. Es wird einfach sonst zu kompliziert. Nur Wörter, die lageabhängig dann in Textfelder geschrieben werden. Das wäre mehr als genug.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Kathrin, ich muss trotzdem nochmal wegen der "Textfelder" nachfragen. Also in A1 oder in einer Variable steht der Satz. Was soll nun genau wohin? In eine Textbox über A1 das erste Wort, über B1 das zweite Wort ...? Oder alle über A1 und dann aber einschließlich der Texte unsichtbar? Das wäre mal eine Lösung, wo Du den Satz aus A1 in Textboxen in Zeile 2 bekommst. Das erste Wort kommt zu A2, das zweite zu B2 usw. Das "Unsichtbare hab ich mal auskommentiert, sonst sieht man nicht, was da passiert. Ich weiß da jetzt auch nicht, was mit den unsichtbaren Textboxen noch geschehen soll, wenn ich nicht weiß, wie die heißen ... Satzzeichen sind erst mal noch drin und, wie gesagt, Frau Leuthäuser-Schnarrenberger wäre ohne Bindestrich kaum erfreut, i.d.R. ohne Punkte eventuell auch nicht :21: Code: Sub Satz2Textbox() 'Variablendeklarationen 'Integer Dim iCnt% 'Variant-Array Dim arrSatz 'Satz in Array uebernehmen arrSatz = Split(Cells(1, 1), " ") 'Schleife ueber alle Worte des Satzes For iCnt = 0 To UBound(arrSatz) 'Textfeld zellenweise hinzufuegen, ausfuellen und formatieren With ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _ Cells(2, iCnt + 1).Left, Cells(2, iCnt + 1).Top, 20, 5) .TextFrame.Characters.Text = arrSatz(iCnt) .TextFrame.AutoSize = True '.Visible = False End With 'Ende Schleife ueber alle Worte des Satzes Next End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 25.07.2014
Version(en): 2013
Hallo Andre,
vielen dank, aber das ist nicht das was ich meinte. Die einzelnen Textfelder sollen sich eben nicht über die einzelnen Spalten verteilen. Das ist in der Tat einfach (zumindest so einfach, dass ich es selbst könnte). Die Textfelder sollen hintereiander in der Zelle stehen, in der der Satz stand. Die Größe der Textfelder richtet sich an die Wörtern aus und vor allem die Position der Textfelder richtet sich nach der Lage der einzelnen Wörter im Satz.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Kathrin, Das wäre jetzt erst mal eine Variante über A1 mit angepasster Breite. Code: Sub Satz2Textbox() 'Variablendeklarationen 'Integer Dim iCnt% 'long Dim lHPos As Long 'Variant-Array Dim arrSatz 'Satz in Array uebernehmen arrSatz = Split(Cells(1, 1), " ") 'Schleife ueber alle Worte des Satzes For iCnt = 0 To UBound(arrSatz) 'Textfeld zellenweise hinzufuegen, ausfuellen und formatieren With ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _ lHPos, 0, 20, 5) .TextFrame.Characters.Text = arrSatz(iCnt) .TextFrame.AutoSize = True '.Visible = False 'Gesamtbreite berechnen lHPos = lHPos + .Width 'Ende Textfeld zellenweise hinzufuegen, ausfuellen und formatieren End With 'Ende Schleife ueber alle Worte des Satzes Next End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 25.07.2014
Version(en): 2013
Lieber André,
du hast mir super geholfen. Du bist der Größte! - Hatte schon mit dem Makrorekorder experimentiert und auch recherchiert. Wäre doch viel Arbeit gewesen. Das Problem ist immer das Gleiche aus einer Riesenauswahl von Befehlen das Richtige zu finden.
Danke.
|