ich habe folgendes Problem: Eine benutzerdefinierte VBA-Funktion soll
als Rückgabewert einen mehrzeiligen Text in eine Zelle eintragen. (Was
man per Tastatur mit <Alt> <Return> bewerkstelligt.)
Ich habe versucht, mit $0d und/oder $0a den Zeilenumbruch festzulegen.
Aber beide Bytes werden dann als "Kästchen" angezeigt.
Vielen Dank im voraus.
- Michael Symonds
'vbNewLine' heißt das Zauberwort.
Grüße,
- Jens -
"Michael Symonds" <Symond...@Loehrke.com> schrieb im Newsbeitrag
news:4cvebtgdsvq2vid7d...@4ax.com...
Hallo Michael,
versuche mal folgendes (Beispiel):
"Text der Zeile 1" & Chr(10) & "Text der Zeile 2" & Chr(10) & "Text der
Zeile 3"
Mit freundlichem Gruss
Wilfried
>Hallo Michael,
>
>'vbNewLine' heißt das Zauberwort.
Vielen Dank fuer den Vorschlag. Das funktioniert seltsamerweise aber
nicht unter Excel97.
Das ganze ist noch etwas merkwürdiger: Ich habe versucht, einen
mehrzeiligen Text als Übergabeparameter einer VBA-Funktion zu
übergeben:
1.) In Zelle A1 befindet sich ein mehrzeiliger Text.
2.) Inhalt von ZelleA2: [=testfunktion(A1) ]
3.) ...und in der Funktion mache ich nichts weiter, als eben diesen
Wert gleich wieder zurueckzugeben:
Function testfunktion(teststring as String) as String
testfunktion= teststring
End Function
==> Ergebnis: Der Zeilenumbruch wird nun nur noch als Kaestchen
angezeigt.
- Michael der ratlose Symonds
Hallo Wilfried,
>"Text der Zeile 1" & Chr(10) & "Text der Zeile 2" & Chr(10) & "Text der
>Zeile 3"
vielen Dank fuer den Vorschlag. Das funktioniert seltsamerweise aber
nicht unter Excel97.
--> siehe bitte auch meine Ausführungen zu der Antwort von Jens
Haeupel.
- Michael Symonds
>On Tue, 20 Mar 2001 17:15:11 +0100, "Jens Häupel"
><jen...@hotmail.com> wrote:
>
>>Hallo Michael,
>>
>>'vbNewLine' heißt das Zauberwort.
>
>Vielen Dank fuer den Vorschlag. Das funktioniert seltsamerweise aber
>nicht unter Excel97.
... und es funktioniert doch: In der Formatierung der Zelle muss der
Zeilenumbruch aktiviert sein.
(Dies wird bei einer manuellen Eingabe eines mehrzeiligen Textes
automatisch von Excel vorgenommen; jedoch nicht, wenn der mehrzeilige
Text aus einer Funktion stammt.)
- Michael dessen Kopfschmerzen langsam wieder zurueckgehen Symonds
>On Wed, 21 Mar 2001 00:30:59 +0100, Wilfried Butzek
><Wilfrie...@t-online.de> wrote:
>
>Hallo Wilfried,
>
>>"Text der Zeile 1" & Chr(10) & "Text der Zeile 2" & Chr(10) & "Text der
>>Zeile 3"
>
>vielen Dank fuer den Vorschlag. Das funktioniert seltsamerweise aber
>nicht unter Excel97.
... und es funktioniert doch: In der Formatierung der Zelle muss der
Hallo Michael,
ich habe zwar immer noch nicht so ganz verstanden,
was Du erreichen willst, aber vielleicht helfen Dir die
folgenden Prozeduren weiter:
In ein allgemeines Modul:
Function Zeilenumbruch()
Dim strErsteZeile As String
Dim strZweiteZeile As String
Dim strDritteZeile As String
Dim lngLaengsteZeile As Long
Dim strAlleZeilen As String
strErsteZeile = "Dieses ist ein"
strZweiteZeile = "dreizeiliger Text"
strDritteZeile = "mit unterschiedlichen Zeilenlängen."
lngLaengsteZeile _
= Application.WorksheetFunction.Max(Len(strErsteZeile), _
Len(strZweiteZeile), Len(strDritteZeile))
strAlleZeilen = strErsteZeile & Chr(10) _
& strZweiteZeile & Chr(10) _
& strDritteZeile
Zeilenumbruch = strAlleZeilen
ActiveCell.RowHeight = 12.75
ActiveCell.RowHeight = ActiveCell.RowHeight * 3
ActiveCell.ColumnWidth = lngLaengsteZeile * 0.833
End Function
Die Multiplikatoren in den beiden Zeilen vor "End Function"
setzen voraus, dass die Zeilenanzahl bekannt und die
Schriftart "Arial" und die Schriftgroesse "10" ist.
In ein Tabellenblatt:
Sub ZeilenumbruchPerFunktion()
Dim vntRueckgabewert As String
vntRueckgabewert = Modul1.Zeilenumbruch
ActiveCell.Value = vntRueckgabewert
End Sub
Mit freundlichem Gruss
Wilfried
>ich habe zwar immer noch nicht so ganz verstanden,
>was Du erreichen willst, aber vielleicht helfen Dir die
>folgenden Prozeduren weiter:
> [......]
Hallo Wilfried,
nochmals vielen Dank für Deine Mühe. Eigentlich hatte ich schon die
Lösung meines Problems gefunden, aber Dein Quelltext gibt nur noch
weitere Anregungen.
Was ich sagen wollte: Was mir zu meinem Glück fehlte und was mein
Problem ausmachte, war, dass in der Formatierung der Zelle der
Zeilenumbruch nicht aktiviert war. Wenn der Zeilenumbruch nicht
aktiviert ist, wird das Chr(10) als "Kästchen" angezeigt und führt
eben nicht zu einem Zeilenumbruch.
- Michael Symonds
Hallo Michael,
bei mir (WIN NT 4.0 SP3, XL97 SR1) wird der
Zeilenumbruch ausschliesslich durch den von
mir geposteten Code bewirkt. Habe manuell den
Zeilenumbruch deaktiviert und die Prozedur gestartet.
Ergebnis:
Zeilenumbruch wurde korrekt gesetzt, d.h. ohne die
beruehmten "Kaestchen". Weder in der Funktion noch
in der aufrufenden Sub wird der Zeilenumbruch explizit
gesetzt.
Welche Konfiguration hast Du?
Mit freundlichem Gruss
Wilfried
>Welche Konfiguration hast Du?
Win98-2 Excel97 (MS-Office97 Service-Pack 2b)
Gruss Michael Symonds
P.S.: Tschuldigung für die langen Antwortzeiten...
Hallo Michael,
falls Du oder jemand anderes es brauchen kannst,
nachfolgend eine verbesserte Prozedur fuer den
Zeilenumbruch innerhalb einer Zelle, falls er per
VBA gesetzt wird. Die Anzahl der Zeilen wird
per Prozedur ermittelt. Klappt aber nur korrekt
mit der Schriftart "Arial" in der Schriftgroesse 10
und der Standardzeilenhoehe von 12,75.
' (Funktion in einem allgemeinen Modul)
Function Zeilenumbruch()
Dim strErsteZeile As String
Dim strZweiteZeile As String
Dim strDritteZeile As String
Dim strVierteZeile As String
Dim vntSuchString As Variant
Dim lngLaengsteZeile As Long
Dim vntArrayZeilen As Variant
Dim intAnzahlZeilen As Integer
Dim vntPosTeilstring As Variant
Dim strAlleZeilen As String
strErsteZeile = "Dieses ist ein"
strZweiteZeile = "dreizeiliger Text"
strDritteZeile = "mit unterschiedlichen Zeilenlängen."
strVierteZeile = "Und es klappt."
vntArrayZeilen _
= Array(strErsteZeile, strZweiteZeile, strDritteZeile, _
strVierteZeile)
vntSuchString = Chr(10)
lngLaengsteZeile _
= Application.WorksheetFunction.Max(Len(strErsteZeile), _
Len(strZweiteZeile), Len(strDritteZeile), Len(strVierteZeile))
strAlleZeilen = strErsteZeile & Chr(10) _
& strZweiteZeile & Chr(10) _
& strDritteZeile & Chr(10) _
& strVierteZeile
For Each vntSuchString In vntArrayZeilen
vntPosTeilstring = InStr(1, strAlleZeilen, vntSuchString, 1)
While vntPosTeilstring <> 0
intAnzahlZeilen = intAnzahlZeilen + 1
vntPosTeilstring = InStr(vntPosTeilstring + 1, _
strAlleZeilen, vntSuchString, 1)
Wend
Next vntSuchString
Zeilenumbruch = strAlleZeilen
ActiveCell.RowHeight = 12.75
ActiveCell.RowHeight = ActiveCell.RowHeight * intAnzahlZeilen
ActiveCell.ColumnWidth = lngLaengsteZeile * 0.833
End Function
' (Aufruf aus Tabelle)
> [....]
>ActiveCell.RowHeight = 12.75
>ActiveCell.RowHeight = ActiveCell.RowHeight * intAnzahlZeilen
>ActiveCell.ColumnWidth = lngLaengsteZeile * 0.833
>End Function
Um die Zeilen-und Spaltenhöhe zu justieren, kann man auch alternativ
die folgenden Objekt-Methoden aufrufen:
Selection.Rows.AutoFit
bzw. Selection.Columns.AutoFit
Das hat den Vorteil, dass auch die anderen Zellen der Spalte bzw.
Zeile gleichzeitig berücksichtigt werden können (je nach Auswahl des
Benutzers) und dass das ganze unabhängig von der Schriftgröße
arbeitet.
- Michael Symonds
>Um die Zeilen-und Spaltenhöhe zu justieren, kann man auch alternativ
>die folgenden Objekt-Methoden aufrufen:
>
> Selection.Rows.AutoFit
Noch etwas besser ist es, vorher die Spaltenbreite auf einen sehr
großen Wert zu setzen:
Selection.Columns.ColumnsWidth = 100
Selection.Rows.AutoFit
Das hat den Vorteil, dass ein u. U. nicht gewünschter Effekt
ausgeschaltet wird: Wenn die Zelle eine genügende Höhe hat, werden
Zeilenumbrüche belassen, die ursprünglich nicht in dem Text vorhanden
sind. Soll heissen: Die Spalte wird u. U. nicht so breit formatiert,
dass ausschließlich nur die gewünschten Zeilenumbrüche gesetzt werden.
- Gruss Michael Symonds
Tippfehler:
> Selection.Columns.ColumnsWidth = 100
> Selection.Rows.AutoFit
richtig:
Selection.Columns.ColumnsWidth = 100
Selection.Columns.AutoFit