Formatierungszeichen in allen Formularen

Moderator: ModerationP

Formatierungszeichen in allen Formularen

Beitragvon TomWest » 18. Okt 2018, 21:49

Guten Abend,

ich bitte um Unterstützung. Ob es nun ein reines Outlook-Thema ist, weiß ich nicht, aber dort tritt der Fehler auf, in anderen Office-Anwendungen hatte ich das Problem noch nie. Wobei ich eher vermute, dass es an der Tabelle liegt. Zur Erläuterung:

Eine ganz simpel mit folgendem Code
Code: Alles auswählen
Dim wdDoc As Word.Document
    Dim wdRange As Word.Range
    Dim wdTable As Word.Table
   
    Set wdDoc = Application.ActiveInspector.WordEditor
    Set wdRange = wdDoc.Range
    Set wdTable = wdDoc.Tables.Add(wdRange, 4, 4)

im Outlook-Kontakt bzw. dessen Notizen (.Body) erstellte Tabelle gibt später ihre Values an Formulare weiter (TextBox, ListBox usw.)
Doch obwohl in der Tabelle selbst keine Formatierungszeichen zu sehen sind, erscheinen diese dann in den Formularen. Genau genommen ist es immer das Absatzzeichen. Selbst wenn eigentlich nichts drin steht, steht dort das Absatzzeichen. Und nein, in der Zelle (der Tabelle) selbst ist kein Absatz.
Woran liegt das und wie kann man das abstellen?

Einlesen tue ich es übrigens wie folgt
Code: Alles auswählen
Private Sub UserForm_Initialize()
    Dim wdDoc As Word.Document
    Dim wdTable As Word.Table
   
    Set wdDoc = Application.ActiveInspector.WordEditor
    Set wdTable = wdDoc.Tables(1)
   
    With wdTable
        Me.txtKdNr.Value = .Cell(1, 2).Range.Text
        Me.txtName.Value = .Cell(1, 4).Range.Text
    End With
End Sub

Das Bild visualisiert noch das Problem.

Vielen Dank schon im Voraus für Eure kompetente Hilfe!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Gruß Tom
TomWest
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 189
Registriert: 18. Jan 2014, 12:14

Re: Formatierungszeichen in allen Formularen

Beitragvon CaBe » 19. Okt 2018, 09:54

Hallo Tom,

puh, das hat mich aber Zeit gekostet. Kenne mich leider mit Word-VBA nur sehr mäßig aus, aber ich fand die Anfrage interessant. Mein Lösungsansatz geht über das Rausfiltern des letzten Zeichens des Zellinhalts.
In einer Tabelle mit 4 Spalten kann die erste Zeile folgendermaßen ausgelesen werden, ohne dass das letzte Formatierungszeichen übernommen wird:
Code: Alles auswählen
Sub ReadTable()
    strText = ""
    With ActiveDocument
        For iCol = 1 To 4
            iBeg = .Tables(1).Cell(1, iCol).Range.Start
            iEnd = .Tables(1).Cell(1, iCol).Range.End - 1
            Set rngTable = .Range(Start:=iBeg, End:=iEnd)
            strText = strText & " " & vbLf & iCol & rngTable.Text
        Next iCol
    End With
    MsgBox strText
End Sub
Freundlichst
Carsten

Keine Antwort wäre wirklich schade! Windows 10 Pro, Office 2016 Pro Deutsch, manchmal Office 2016 Pro Englisch
Jede Änderung meiner Beiträge durch andere Benutzer möge bitte mit Grund und Namen gekennzeichnet werden.
Benutzeravatar
CaBe
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5537
Registriert: 06. Apr 2005, 09:20
Wohnort: Bremen

Re: Formatierungszeichen in allen Formularen

Beitragvon TomWest » 19. Okt 2018, 12:39

Hallo Carsten,

zunächst vielen Dank für Deine wertvolle Zeit!

Ich sitze gerade nicht an dem Rechner, an dem ich das Problem habe, muss es später ausprobieren. Habe aber versucht Deinen Ansatz nachzuvollziehen. Du schreibst:
Mein Lösungsansatz geht über das Rausfiltern des letzten Zeichens des Zellinhalts.

Eigentlich dachte ich genau das schon ausprobiert zu haben, ähnlich wie das hier, was ich gerade fix an einem einfachen Beispiel und einer Zelle einer Tabelle ausprobiert habe:
Code: Alles auswählen
Sub Lesen1()
    MsgBox ActiveDocument.Tables(1).Cell(1, 1).Range.Text
End Sub

Sub Lesen2()
    Dim intZeichen As Integer
    intZeichen = Len(ActiveDocument.Tables(1).Cell(1, 1).Range.Text)
    MsgBox Left(ActiveDocument.Tables(1).Cell(1, 1).Range.Text, intZeichen - 1)
End Sub

Mit Lesen1 habe ich noch ein Formatierungszeichen (bloß ein anderes), mit Lesen2 nicht mehr. Ob das in meinem speziellen Fall auch reicht? Mal schauen.

Aber vielleicht macht Deine letzte Zeile den Unterschied aus:
Code: Alles auswählen
strText = strText & " " & vbLf & iCol & rngTable.Text

Oder vielleicht auch alles ;-)
Also, in Ruhe anschauen bringt immer mehr, drum werde ich das auch zeitnah tun. So oder so nochmals Dankeschön bis hierhin.
Gruß Tom
TomWest
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 189
Registriert: 18. Jan 2014, 12:14

Re: Formatierungszeichen in allen Formularen

Beitragvon DerHoepp » 19. Okt 2018, 13:29

Hi,

Word-Tabellen enthalten an jedem Zell-Ende immer noch die Zeichen 13 und 7 (CarriageReturn und Bell). Ich nehme an, dass diese Kombination in TextBoxen als Absatzmarke dargestellt wird. Aber das Prinzip hat dir Carsten schon erläutert. Ich wollte eigentlich nur ergänzen, dass es den Klimmzug über die doppelte Range-Zuweisung nicht bedarf:
Code: Alles auswählen
With ActiveDocument
        For iCol = 1 To 4
            strText = strText & " " & vbLf & Left(rngTable.Cell(iCol,1).Range.Text,len(rngTable.Cell(iCol,1).Range.Text)-2)
        Next iCol
    End With


Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 7267
Registriert: 14. Mai 2013, 11:08

Re: Formatierungszeichen in allen Formularen

Beitragvon TomWest » 22. Okt 2018, 20:35

So, guten Abend Carsten und derHöpp,

zunächst vielen Dank für Eure Hilfe! Habe jetzt noch mal in Ruhe getestet.

Carstens Lösung ließ sich in mein explizites Beispiel nun nicht direkt einbauen und da ich zugleich immer ein Freund der kurzen Lösungen bin, habe ich gleich derHöpp´s Lösungsansatz ausprobiert.
Da der Ansatz jedoch der gleiche ist, käme sicherlich bei Carsten das gleiche Ergebnis heraus. Und dieses kickt tatsächlich die Absatzmarke am Ende raus, setzt aber interessanterweise eine vor den Text und sogar noch ein (unerwünschtes) Leerzeichen davor.

Doch dann kam ich auf die folgende simple Lösung, hilfreich war zunächst das Verständnis, was derHöpp schrieb, dass an jedem Zell-Ende immer noch die Zeichen 13 und 7 enthalten sind, weshalb er am Ende auch -2 abzieht.

Tatsächlich liefert diese einfache Zeile genau das Ergebnis, das ich gesucht hatte, also einen sauberen Text ohne Leer- und Formatierungszeichen (in meinem Fall die erste Zelle, also .Cell(1,1) mit entsprechender vorangehender Tabellendeklaration):
Code: Alles auswählen
strText = Left(.Cell(1, 1).Range.Text, Len(.Cell(1, 1).Range.Text) - 2)

Super cool. Dank Eurer Hilfe habe ich es verstanden und Problem gelöst ;-) Dankeeeeee!
Gruß Tom
TomWest
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 189
Registriert: 18. Jan 2014, 12:14


Zurück zu Outlook Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste