Anzeige
Archiv - Navigation
468to472
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
468to472
468to472
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Textdarstellung, Zeilenumbruch über mehrere Zellen

Textdarstellung, Zeilenumbruch über mehrere Zellen
18.08.2004 09:08:59
Andi
Hallo Leute,
ich habe ein Problem, und moechte eigentlich von euch nur die Bestaetigung, dass es dafuer keine Loesung gibt ;-)
Folgendes:
Ich moechte eine Liste erstellen, die einerseits Fliesstext und andererseits Formeln enthaelt.
Nun wird aber gewuenscht, dass ein Zeilenumbruch erfolgt, ohne die Zeile in der Hoehe zu veraendern.
D.h. der Inhalt einer Zelle soll in mehrere Zellen geschrieben werden,
so dass anschliessend weiterhin nur eine Zeile pro Zelle enthalten ist.
Ich hoffe, ich habe mich verstaendlich ausgedrueckt und wuerde mich ueber Antworten sehr freuen...
Gruß,
Andi

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textdarstellung, Zeilenumbruch über mehrere Zellen
18.08.2004 09:12:18
joel
hallo andi
ich habe mühe, die frage zu verstehen.. ein beispiel würde vielleicht helfen.
übrigens, mit vba ist vieles möglich.. :-)
gruss joel
AW: Textdarstellung, Zeilenumbruch über mehrere Zellen
18.08.2004 09:22:41
Andi
Oh, sorry,
also noch ein Versuch:
ich moechte einen Fliesstext in die Zellen einer Spalte schreiben.
Z.B. einen Arbeitsauftrag mit mehreren Arbeitsschritten.
Nun soll aber nach jedem Arbeitsschritt durch Return in die naechste Zeile gesprungen werden, so dass man den einzelnen Schritten Werte zuordnen kann.
Das Problem kann man manuell loesen, indem man einfach nur soviel in eine Zeile schreibt, wie reinpasst und dann in der naechsten Zeile weiterschreibt, aber das ist ja was fuer Amateure ;-)
Hoffe, das war jetzt verstaendlich, ansonsten starte ich gerne noch einen Versuch...
Vielen Dank schon man, Andi
Anzeige
AW: Textdarstellung, Zeilenumbruch über mehrere Zellen
18.08.2004 09:36:00
joel
hallo andi
du hast also eine listbox, aus der du einen eintrag auswählst. dieser soll dann auf mehrere zellen aufgeteilt werden. was sind die kriterien, in die nächste zelle zu springen? sobald eine zelle gefüllt ist, oder sobald eine zahl folgt, ein punkt, etc.?
gruss joel
AW: Textdarstellung, Zeilenumbruch über mehrere Zellen
18.08.2004 09:43:24
Andi
Oh, da macht mir aber jemand Hoffnung ;-)
Das Kriterium fuer den Sprung in die naechste Zeile sollte die volle Zelle sein.
AW: Textdarstellung, Zeilenumbruch über mehrere Zellen
18.08.2004 11:56:22
joel
hallo andi
so, hab da was gebastelt.. musst es evtl. noch ein wenig anpassen, hoffe, das kriegst du hin.
das ganze funzt relativ einfach: er schreibt zeichen für zeichen des textes in die zelle. sobald ein zeilenumbruch folgen würde, wird in die nächste zelle gesprungen
kannst das ganze ausprobieren in einem neuen file, in zelle A1 schreibst du den text, dann TextInZellenSchreiben aufrufen (z.b. mit F5)
'prüfen, ob mit der text nun auf zwei zeilen geschrieben wird

Private Function TextUmbruch(ByVal c As Range) As Boolean
Dim fHoeheOhneUmbruch As Single
Dim fHoeheMitUmbruch As Single
'zeilenhöhe ohne zeilenumbruch
c.WrapText = False
c.EntireRow.AutoFit
fHoeheOhneUmbruch = c.EntireRow.RowHeight
'zeilenhöhe mit zeilenumbruch
c.WrapText = True
c.EntireRow.AutoFit
fHoeheMitUmbruch = c.EntireRow.RowHeight
TextUmbruch = (fHoeheOhneUmbruch < fHoeheMitUmbruch)
End Function

Public Sub TextInZellenSchreiben()
Dim sText As String

Dim lPos As Long 'position in sText
Dim c As Range 'zelle, in die text geschrieben werden soll
Dim s As String 'teil des textes (zeichen 1 bis lPos)

Dim lTextLaenge As Long 'länge des noch zu schreibenden textes

'text auslesen
sText = CStr(Tabelle1.Range("A1").value)

'erste zelle, in die text geschrieben werden soll auslesen
Set c = Tabelle1.Range("A2")

For lPos = 1 To Len(sText)
'nächstes zeichen in zelle schreiben
c.value = c.value & Mid(sText, lPos, 1)

'falls zeilenumbruch erfolgt, letztes zeichen in nächste zelle schreiben
If TextUmbruch(c:=c) = True Then
c.value = Left(c.value, Len(c.value) - 1)
Set c = c.Offset(1, 0)
c.value = Mid(sText, lPos, 1)
End If
Next lPos
End Sub
gruss joel
Anzeige
AW: Textdarstellung, Zeilenumbruch über mehrere Zellen
18.08.2004 14:38:33
Andi
Super, vielen Dank!
Funktioniert so, wie du das geschrieben hast.
Kann das von der Logik auch sehr schoen nachvollziehen.
Programmieren kann ich auch durchaus ein wenig. Nur leider nicht vba.
Wenn du mir noch sagen koenntest, wie ich als Abbruchkriterium nicht nur die volle Zeile, sondern das letze Wort vor Ende der Zeile einbauen kann, waere ich wunschlos gluecklich :-)
Denn so schneidet er ja jedes Wort am Ende der Zeile ab, was natuerlich nicht so schoen lesbar ist.
Noch mal vielen Dank fuer die prompte und ausfuehrliche Hilfe,
Andi
AW: Textdarstellung, Zeilenumbruch über mehrere Zellen
18.08.2004 17:11:02
joel
hallo andi
sorry, dass ich mich erst jetzt wieder melde. hab heut viel um die ohren

Sub TextInZellenSchreiben()
Dim sText As String
Dim lPos As Long        'position in sText
Dim c As Range          'zelle, in die text geschrieben werden soll
Dim lTextLaenge As Long 'länge des noch zu schreibenden textes
'text auslesen
sText = CStr(Tabelle1.Range("A1").Value)
'erste zelle, in die text geschrieben werden soll auslesen und löschen
Set c = Tabelle1.Range("A2")
c.ClearContents
For lPos = 1 To Len(sText)
'nächstes zeichen in zelle schreiben
c.Value = c.Value & Mid(sText, lPos, 1)
'NEU: falls zeilenumbruch erfolgt, letztes wort in nächste zelle schreiben
If TextUmbruch(c:=c) = True Then
'inhalt der folgenden zelle löschen
c.Offset(1, 0).ClearContents
'prüfen, ob ein leerzeichen (oder ähnliches) in der zelle enthalten ist
If InStr(c.Value, " ") >= 1 Or _
InStr(c.Value, "-") >= 1 Or _
InStr(c.Value, "/") >= 1 Then
' - falls ja: text bis zum letzten leerzeichen (oder ähnliches) in
'             die nächste zelle schreiben
Do While (Right(c.Value, 1) Like "[ -/]" = False)
c.Offset(1, 0).Value = Right(c.Value, 1) & c.Offset(1, 0).Value
c.Value = Left(c.Value, Len(c.Value) - 1)
Loop
' - falls nein: nur letztes zeichen in nächste zelle schreiben
Else
c.Offset(1, 0).Value = Right(c.Value, 1)
c.Value = Left(c.Value, Len(c.Value) - 1)
End If
Set c = c.Offset(1, 0)
End If
Next lPos
End Sub

gruss joel
Anzeige
AW: Textdarstellung, Zeilenumbruch über mehrere Zellen
19.08.2004 10:25:13
Andi
Hi,
auch das klappt wiederum bestens. Lob und Anerkennung fuer die gute Unterstuetzung!
Leider bin ich doch noch nicht so wunschlos gluecklich wie ich dachte.
Mein Problem ist nun naemlich der dynamische Zellbezug.
Man kann doch bestimmt in VBA realisieren, dass das Makro nicht fuer eine feste Zelle ausgefuehrt wird, sondern beispielsweise fuer die Zelle, die markiert ist.
Dachte, ich bekomme das selber hin, aber ich habe leider zu wenige Kenntnisse um das entsprechende Wissen aus dem Forum zu ziehen :-(
Gruß,
Andi
AW: Textdarstellung, Zeilenumbruch über mehrere Zellen
19.08.2004 10:45:25
joel
hallo andi
kein problem: selection gibt dir den selektierten bereich zurück. falls nun mehrere zellen selektiert sind, kannst du dies entweder für alle selektierten zellen durchführen (codebeispiel 1) oder aber nur für die erste zelle des selektierten bereichs (codebeispiel 2)
codebeispiel 1:
dim c as range
for each c in selection
'prozedur durchführen mit c
next c
codebeispiel 2:
dim c as range
set c = selection.cells(1,1)
'prozedur durchführen mit c
gruss joel
ps: falls du weitere fragen hast, die sich nicht wirklich auf den ersten titel im thread beziehen, beginne doch bitte neue threads.. die nächsten suchenden werdens dir danken! du kannst ja immer noch einen link zum 'alten' thread reinkopieren
Anzeige
AW: Textdarstellung, Zeilenumbruch über mehrere Zellen
19.08.2004 10:48:39
Andi
Ich glaube ich habe es nun doch selber hinbekommen.
Habe die absoluten Zellbezuege einfach wie folgt abgeaendert:
...
sText = CStr(Selection.Value)
Setc = Selection
C.Clear Contents
...
Scheint soweit auch zu funktionieren...
Vielen Dank Joel fuer deine Muehe,
Andi
AW: Textdarstellung, Zeilenumbruch über mehrere Zellen
19.08.2004 11:27:08
joel
hallo Andi
genau, das klappt so.. falls du mehrere zellen selektierst, liefert dir Selection.value den wert der ersten zelle, also Selection.cells(1,1).value - eine frage der standardeigenschaften und so. für die programmierung ist jedoch die zweite lösung sauberer...
noch etwas:
falls du die prozedur automatisch starten möchtest, sobald du den wert in der listbox änderst, kannst du das mit dem Worksheet_Change - ereignis tun. es liefert dir mit Target die geänderte zelle. nun noch prüfen, ob diese zelle eine liste enthält, falls ja, die prozedur starten.
zum prüfen, ob zelle mit liste:
if Not application.intersect(Target,Tabelle1.cells.specialcells(xlCellTypeValidation) is nothing then
if Target.Validation = xlValidateList then
'prozedur starten
end if
end if
viel spass
gruss joel
Anzeige
AW: Textdarstellung, Zeilenumbruch über mehrere Zellen
19.08.2004 14:16:43
Andi
Hm,
nun hast du mich neugierig gemacht.
Klar waere das umso cooler, wenn das automatisch ginge :-)
Aber wie, das verstehe ich noch nicht ganz.
Verstehe das mit dem Worksheet_Change eh noch nicht so ganz.
Das scheint ja praktisch ein vorgebene VBA-Funktion zu sein.
Wieso benutze ich die dann nicht einfach?
Verschatte ich sie stattdessen, da nur der Funktionsrumpf vorgegeben ist?
Falls du dich noch an den restlichen Code erinnerst, wie rufe ich denn meine Prozedur zum Textumbruch genau auf? So geht's jedenfalls nicht:

Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Application.Intersect(Target, Tabelle1.Cells.SpecialCells(xlCellTypeValidation)) Is Nothing Then
If Target.Validation = xlValidateList Then
Target.TextInZellenSchreiben
End If
End If
End Sub

Allerdings verstehe ich eh noch nicht so recht, wie der Zugriff aufeinander erfolgt.
Gehoert das zusammen in ein Modul, oder wie laeuft das? Was sind ueberhaupt Module in VBA?
Langsam wird mir das echt zu kompliziert ;-)
Gruß,
Andreas
Anzeige
AW: Textdarstellung, Zeilenumbruch über mehrere Zellen
19.08.2004 15:06:14
joel
hallo andreas
ok, lass uns das ganze mal ein wenig entwirren...
wenn du bei deinem projekt in den VB-Editor wechselst, siehst du links dein VBA-projekt:
-thisworkbook
-tabelle1
-tabelle2, etc.
dies sind die microsoft excel-objekte. nun gibt es hier noch formulare, module und klassenmodule. du kannst diese u.a. über den menübefehl "einfügen" einfügen.
rechts davon hast du den codebereich (resp. formularlayout-bereich, falls du ein neues formular einfügst, dass ist dann jedoch wieder eine andere sache...)
im codebereich kannst du nun funktionen, prozeduren, variablen, etc. definieren. etwas, was für dich vielleicht neu ist, sind die ereignisse. diese kannst du ebenfalls selbst definieren. VB nimmt dir hier jedoch einiges an arbeit ab und hat die wichtigsten ereignisse bereits definiert:
oben im codebereich hast du eine listbox mit folgenden einträgen:
-(allgemein)
-worksheet
wähle hier worksheet und klicke nun in die rechte listbox. hier siehst du jetzt alle vordefinierten ereignisse für worksheet.
(falls du im projekt-explorer "thisworkbook" doppelklickst, findest du alle ereignisse des workbooks, z.b. Workbook_open, etc...)
du musst jetzt hier also das ereignis Worksheet_Change auswählen.
in diesem ereignis brauchst du nun also nur noch die prozedur mit dem zeilenumbruch aufzurufen.
hier kein durcheinander machen mit den klassen...
dim c as range: c ist also eine instanz der klasse range. die funktion "TextInZellenSchreiben" gehört nicht zu dieser klasse, sie ist ja nicht in der klasse definiert. vielmehr steht die funktion im "objekt" Tabelle1. das heisst, diese funktion, resp. prozedur ist eine methode des objekts tabelle1. sofern diese "public" ist, kannst du sie also über Tabelle1.TextInZellenSchreiben aufrufen (solange du die prozedur aus tabelle1 aufrufst, kannst du tabelle1 weglassen). Die Zelle c kannst du als Argument übergeben, dazu musst du jedoch die Definition der Prozedur anpassen:
Public

Sub TextInZellenSchreiben(byval c as range)
End Sub

so, soviel mal fürs erste.. damit solltest du ein wenig klarer sehen..
gruss joel
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige