Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1068to1072
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
Inhaltsverzeichnis

Formatierte Ausgabae

Formatierte Ausgabae
15.04.2009 18:27:29
Stuart
Hallo,
Josef Ehrensberger hat mir ein tolles makro geschrieben:
....wunderbar, alllerdings mit einem kleinen Vermoutstropfen.
Die Ausgabe ist immer
username:
tatsächlicher inhalt des kommentarfeldes
Ich würde gerne den username: aber inklusive des folgenden Umbruches entfernen, dies gelingt mir nicht mir der Suchen und Ersetzen funktion von Excel.
Wie würde das Macro aussehen wenn man diesen output gleich an der Quelle optimiert?
Danke für Eure Hilfe

Sub copyCommentText()
Dim rng As Range
With ActiveSheet
For Each rng In .Range("X1:X" & .UsedRange.Rows(.UsedRange.Rows.Count).Row)
If Not rng.Comment Is Nothing Then rng.Offset(0, 1) = rng.Comment.Text
Next
End With
End Sub


8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Schau mal in die Comment-Eigenschaften,...
15.04.2009 19:00:45
Luc:-?
...Stuart,
da muss es auch so etwas wie TextFrame o.s.ä. geben. Damit könntest du dann auch per .Characters deinen Text erst ab dem n.Zeichen kopieren. Natürlich könntest du auch mit vbFkt Instr die Position des 1. Zeilenumbruchs ermitteln, der standardmäßig nach dem Usernamen gesetzt wird (wäre n-1) und dann mit vbFkt Mid den Teiltext ab n extrahieren. Lies mal in der VBE-Hilfe nach!
Gruß Luc :-?
AW: Formatierte Ausgabae
15.04.2009 19:20:32
dan
Hallo,
so koennte es gehen, aber ich habe es nicht getestet. Ist es OK? Gruss dan, cz.

Sub copyCommentText()
Dim rng As Range
With ActiveSheet
For Each rng In .Range("X1:X" & .UsedRange.Rows(.UsedRange.Rows.Count).Row)
If (Not rng.Comment Is Nothing) Then
Dim newText As String
Dim userNameWithColon As String
Dim userNameStartIndex As Integer
userNameStartIndex = 0
userNameWithColon = Application.UserName & ":"
userNameStartIndex = InStr(1, rng.Comment.Text, userNameWithColon, vbTextCompare)
If (userNameStartIndex = 1) Then ' [user name:] befindet sich in dem Komentar, an der   _
_
ersten Stelle
newText = Right(rng.Comment.Text, Len(rng.Comment.Text) - Len(userNameWithColon) - 1)
rng.Offset(0, 1) = newText
End If
End If
Next
End With
End Sub


Anzeige
Was ist denn das für ein...
15.04.2009 19:25:49
Luc:-?
...grauenvoll ungeordneter Code, Dan?
Du solltest doch noch mal eingehend die VBE-Hilfe zu rate ziehen... ;-)
Gruß Luc :-?
AW: Formatierte Ausgabae
15.04.2009 19:26:43
Gerd
Hallo Stuart,
unterstellt, dass nach dem Username vor dem Zeilenumbruchzeichen noch ein Doppelpunkt kommt.

Sub copyCommentText3()
Dim rng As Range
With ActiveSheet
For Each rng In .Range("b1:X" & .UsedRange.Rows(.UsedRange.Rows.Count).Row)
If Not rng.Comment Is Nothing Then rng.Offset(0, 1) = Mid$(rng.Comment.Text, Len( _
Application.UserName) + 3)
Next
Gruß Gerd
End With
End Sub


Gruß Gerd

Anzeige
AW: Formatierte Ausgabae
15.04.2009 19:50:53
Erich
Hi,
noch ne Version, die alles vor einem ":" und auch einen nachfolgenden Zeilenwechsel entfernt:

Sub copyCommentText2()
Dim rng As Range, strK As String
With ActiveSheet
For Each rng In .Range("X1:X" & .UsedRange.Rows(.UsedRange.Rows.Count).Row)
If Not rng.Comment Is Nothing Then
strK = rng.Comment.Text
strK = Mid(strK, InStr(strK, ":") + 1)
If Left(strK, 1) = vbLf Then
rng.Offset(0, 1) = Mid(strK, 2)
Else
rng.Offset(0, 1) = strK
End If
End If
Next
End With
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
Warum nicht gleich erst nach Zeilenumbruch...
16.04.2009 05:29:42
Luc:-?
...und das auch nur lesen ohne Nachbehandlung (die 1.Variante), meine Herren... ;->
Hier mal zur Abwechslung als udFkt und etwas universeller...

Function GetComment(Bereich As Range, Optional ByVal nachZchn = 1, _
Optional ByVal Textlg As Long)
Dim pos As Long
If Not Bereich.Comment Is Nothing Then
With Bereich.Comment
If Not WorksheetFunction.IsNumber(nachZchn) Then
pos = InStr(.Text, nachZchn) + Len(nachZchn)
Else: pos = nachZchn
End If
If Textlg = 0 Then Textlg = Len(.Text) - pos + 1
GetComment = .Shape.TextFrame.Characters(pos, Textlg).Text
End With
Else: GetComment = "Kein Kommentar"
End If
End Function


In die Zellen, die den Kommentartext aufnehmen sollen, muss dann nur noch folg Fml eingetragen wdn...
Var1: =GetComment(G15) → für den ganzen Text
Var2: =GetComment(G15;ZEICHEN(10)) → für Text nach 1.Zeilenumbruch
Var3: =GetComment(G15;ZEICHEN(10);8) → für 8 Zeichen Text nach 1.Zeilenumbruch
G15 steht für die potenzielle Kommentarzelle, die hier eingetragen wird. Alles, was in Arg2 (nachZchn) als Text eingetragen wird (auch Zahlen), wird als Kommentartextbestandteil betrachtet, gesucht und die Position des 1. Zeichens nach diesem Textbestandteil als Startposition verwendet. Arg2 darf aus mehreren Zeichen bestehen.
Nach Eintrag des FktKörpers in ein (normales) Modul der Mappe oder ein installiertes eigenes AddIn o.ä. wird die udFkt im Fkt-Assistenten angezeigt.
Natürlich kann der entscheidende Teil (fett) auch in einer Subroutine wie der vorliegenden verwendet wdn.
Gruß Luc :-?

Anzeige
AW: Darum ...
16.04.2009 10:14:17
Erich
Hi Luc,
probier doch mal Kommentare
- ohne Doppelpunkt
- ohne Doppelpunkt, mit Chr(10)
- mit Doppelpunkt, ohne Chr(10)
- mit Doppelpunkt, mit Chr(10)
- und das noch mit oder ohne Leerzeichen am Enfang des eigentlichen Textes.
Hier mein leicht geänderter Code:

Sub copyCommentText3()
Dim rng As Range, strK As String
With ActiveSheet
For Each rng In .Range("X1:X" & .UsedRange.Row + .UsedRange.Rows.Count - 1)
If Not rng.Comment Is Nothing Then
strK = rng.Comment.Text
strK = Mid(strK, InStr(strK, ":") + 1)
If Left(strK, 1) = vbLf Then
rng.Offset(0, 1) = Trim(Mid(strK, 2))
Else
rng.Offset(0, 1) = Trim(strK)
End If
End If
Next
End With
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
...Mit meiner udFkt ist das eh schnurz,...
16.04.2009 21:02:42
Luc:-?
...Erich,
die kann (wie beschrieben) mit allem umgehen... ;-)
Aber Standard ist nunmal "username:" & Chr(10)! Daran hat sich bei mir von xl9 bis xl12 nichts geändert. Oder bezweifelst du, dass meine udF fktniert?
Gruß Luc :-?

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige