Wörter eines Satzes in einzelne Textfelder schreiben
#1
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.
Top
#2
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)
Top
#3
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
Top
#4
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 Wink 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)
Top
#5
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.
Top
#6
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.
Top
#7
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)
Top
#8
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.
Top
#9
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)
Top
#10
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.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste