Discussion:
Kommentar-Text trennen/auswerten
(zu alt für eine Antwort)
Hans Alborg
2016-01-15 14:25:52 UTC
Permalink
Hallo!

<Excel 2007>

In einem Excel- Kalender habe ich meine Termine als Kommentar in die
einzelnen "Tages-Zellen" gesetzt.
Nun will ich alle Termine unter dem Kalenderfeld nochmal in eine extra
Tabelle schreiben, für einen schnellen Überblick und evtl. zum Ausdrucken.

Das, sagen wir "Format" so eines Kommentars ist etwa "10:00 Nudeln kaufen".
Bei 2 Terminen eines Tages dann "10:00 Nudeln kaufen18:00 Kino".

Mir geht's um den 2. Fall mit mehr als einem Termin. Im Kommentar sind beide
Termine untereinander gestellt: so soll es sein. Aber beim Auslesen des
Kommentars test1 = wsTerm.Cells(i, j).Comment.Text bekomme ich einen String
wie oben.

Lassen sich die Termine ohne Schleife trennen, so daß sie separat in die
Tabelle können?

Mehr als 3 Termine pro Tag sollten nicht vorkommen, die jeweilige Länge ist
aber verschieden.

TIA,

Hans
Bernhard Sander
2016-01-15 16:17:47 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
In einem Excel- Kalender habe ich meine Termine als Kommentar in die
einzelnen "Tages-Zellen" gesetzt.
Nun will ich alle Termine unter dem Kalenderfeld nochmal in eine extra
Tabelle schreiben, für einen schnellen Überblick und evtl. zum Ausdrucken.
Das, sagen wir "Format" so eines Kommentars ist etwa "10:00 Nudeln kaufen".
Bei 2 Terminen eines Tages dann "10:00 Nudeln kaufen18:00 Kino".
Mir geht's um den 2. Fall mit mehr als einem Termin. Im Kommentar sind beide
Termine untereinander gestellt: so soll es sein. Aber beim Auslesen des
Kommentars test1 = wsTerm.Cells(i, j).Comment.Text bekomme ich einen String
wie oben.
Lassen sich die Termine ohne Schleife trennen, so daß sie separat in die
Tabelle können?
Mehr als 3 Termine pro Tag sollten nicht vorkommen, die jeweilige Länge ist
aber verschieden.
Dass die beiden Zeilen zu einer zusammengefügt werden ist rein optisch in der Mouse-Over-Anzeige.
Tatsächlich steht als Zeilentrenner ein vbLf (=chr(10)), das in einer Schleife leicht ausgewertet werden kann.

Was hält Dich davon ab, den Kommentar einfach in die Zelle darunter zu schreiben, da werden die Zeilenwechsel sauber mitgenommen:
wsTerm.Cells(i+1, j).Value = wsTerm.Cells(i, j).Comment.Text

Gruß
Bernhard Sander
Hans Alborg
2016-01-15 16:53:34 UTC
Permalink
Hi Bernhard,

"Bernhard Sander" schrieb...
Post by Bernhard Sander
Post by Hans Alborg
"10:00 Nudeln kaufen18:00 Kino".
Dass die beiden Zeilen zu einer zusammengefügt werden ist rein optisch in
der Mouse-Over-Anzeige.
Tatsächlich steht als Zeilentrenner ein vbLf (=chr(10)), das in einer
Schleife leicht ausgewertet werden kann.
Hm, wollte die Schleife ja meiden...
Dann sollte der String "test1" das chr(10) ja enthalten. Unsichtbar? Das
könnte ich sicher auswerten.
Post by Bernhard Sander
Was hält Dich davon ab, den Kommentar einfach in die Zelle darunter zu
wsTerm.Cells(i+1, j).Value = wsTerm.Cells(i, j).Comment.Text
Das würde immer noch beide Zeilen in i+1 setzen (naja, i und j sind
Koordinaten der Kommentare im Kalender, für die Übersichtstabelle gibt's
andere. Tut aber nichts zur Sache).
Ich muß halt den Kommentartext erst trennen um ihn dann untereinander in 2-3
Zeilen zu setzen.

Ich probier mal ob ich ein chr(10) finde.
Ansonsten hatte ich gedacht, nach den Zeiten zu suchen, evtl. mit INSTR oder
so. Und gehofft es ohne Schleife hinzukommen.

...Ähhm,
Post by Bernhard Sander
Was hält Dich davon ab, den Kommentar einfach in die Zelle darunter zu
schreiben
Beim nochmal lesen: meist Du ich soll eine Zeile freilassen und den ganzen
Kommentar in die untere Zeile setzen, wobei die leere Zeile ein höher den
ersten Kommentarteil bekommt?
Find ich zwar unlogisch, aber toll wenn das geht! Probiere ich gleich aus!

Danke,

Hans
Claus Busch
2016-01-15 17:49:43 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Ich probier mal ob ich ein chr(10) finde.
Ansonsten hatte ich gedacht, nach den Zeiten zu suchen, evtl. mit INSTR oder
so. Und gehofft es ohne Schleife hinzukommen.
falls du keinen Zeilenumbruck im Kommentar hast, könntest du den String
an dem Doppelpunkt der Zeiten splitten und dann wieder entsprechend
zusammensetzen:

Sub Test()
Dim com As Comment
Dim varCom As Variant
Dim str1 As String, str2 As String, str3 As String

For Each com In ActiveSheet.Comments
varCom = Split(com.Text, ":")
Select Case UBound(varCom)
Case 0
str1 = varCom(0)
Case 1
str1 = Trim(varCom(0) & ":" & varCom(1))
Case 2
str1 = Trim(varCom(0) & ":" & Left(varCom(1), Len(varCom(1))
- 2))
str2 = Trim(Right(varCom(1), 2) & ":" & varCom(2))
Case 3
str1 = Trim(varCom(0) & ":" & Left(varCom(1), Len(varCom(1))
- 2))
str2 = Trim(Right(varCom(1), 2) & ":" & Left(varCom(2),
Len(varCom(2)) - 2))
str3 = Trim(Right(varCom(2), 2) & ":" & varCom(3))
End Select
Next
End Sub

Du musst nur noch einsetzen, wo die Strings hingeschrieben werden
sollen.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2016-01-15 21:08:43 UTC
Permalink
Hallo Claus,

"Claus Busch" schrieb...
Post by Hans Alborg
Ich probier mal ob ich ein chr(10) finde.
Bernhards Tip hat schon geholfen!
Und zwar suche ich das CHR(10) mit INSTR und bekomme dessen Position im
String. Dann ist es nur noch eine Frage von Left, Right und Len...
[Case]
Haaach, die Case- Methode sollte ich auch öfter nutzen...
Du musst nur noch einsetzen, wo die Strings hingeschrieben werden sollen.
Das ist auch zum Problem geworden, da ich den Abfrageteil in einen anderen
Code integrieren muß. Aber kein Grund hier zu fragen: reine Handwerksarbeit.

Tschüß und Danke,

Hans
Claus Busch
2016-01-15 21:16:59 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Bernhards Tip hat schon geholfen!
Und zwar suche ich das CHR(10) mit INSTR und bekomme dessen Position im
String. Dann ist es nur noch eine Frage von Left, Right und Len...
dann kannst du doch den String an chr(10) splitten und in ein Array
einlesen und dann das Array in einer Schleife in die Zellen schreiben
(Analog zu meinem Vorschlag)
Also varTxt =Split(com.Text, chr(10))


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2016-01-16 22:48:44 UTC
Permalink
Hallo Claus,

"Claus Busch" schrieb...
Post by Claus Busch
Post by Hans Alborg
String. Dann ist es nur noch eine Frage von Left, Right und Len...
dann kannst du doch den String an chr(10) splitten und in ein Array
Das Splitten kappt schon. Ich muß noch sehen wie ich das in die Tabelle
schreibe. Es gibt meist nur einen, und selten zwei Termine am Tag. Drei wäre
eine große Ausnahme. Aber die Splitfunktion ist wirklich flexibel!
Post by Claus Busch
und dann das Array in einer Schleife in die Zellen schreiben
Naja, das ist halt Fleißarbeit. Die Routine ist schon Bestandteil etlicher
Schleifen. Das liegt am Kalender den ich abfrage: 4 Reihen a 3 Monate, das
geht nicht so einfach wenn ich die Tage der Reihe nach durchlaufen lasse.
Die Routine kommt an eine günstige Stelle dieser Abfrage mit rein.
Diese Abfrage sucht übrigens bereits nach den Terminen der nächsten 3 Tage,
und je nach Windows- Version gibt's sogar eine Ansage. Ich hätte nie gedacht
daß Excel mir mal den Text verständlich vorliest, aber unter Win10 geht das!
Mit Win7 kommt halt englischer Standardtext z.B. "your next Termin is
Tomorrow". Naja.

Erstmal muß ich noch entscheiden, ob beim Aufruf (Sheet Activate) immer die
ganze Tabelle wiedergeschrieben wird oder nur das Neue dazukommt.

Hans

Hans Alborg
2016-01-15 21:11:17 UTC
Permalink
"Hans Alborg" schrieb...

Hi Bernhard,
Post by Hans Alborg
Beim nochmal lesen: meist Du ich soll eine Zeile freilassen und den ganzen
Kommentar in die untere Zeile setzen, wobei die leere Zeile ein höher den
ersten Kommentarteil bekommt?
Das ging nicht. Aber ich hab das CHR(10) gefunden und nutze das!

Danke nochmal,

Hans
Claus Busch
2016-01-15 16:50:31 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Das, sagen wir "Format" so eines Kommentars ist etwa "10:00 Nudeln kaufen".
Bei 2 Terminen eines Tages dann "10:00 Nudeln kaufen18:00 Kino".
Mir geht's um den 2. Fall mit mehr als einem Termin. Im Kommentar sind beide
Termine untereinander gestellt: so soll es sein. Aber beim Auslesen des
Kommentars test1 = wsTerm.Cells(i, j).Comment.Text bekomme ich einen String
wie oben.
hast du für den Ausdruck mal getestet: Seite einrichten => Tabelle =>
Kommentare am Ende des Blattes ob sie dabei korrekt dargestellt werden?


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Lesen Sie weiter auf narkive:
Loading...