Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VBA Kombinationsfeld Inhaltssteuerungselement auslesen

Forumthread: VBA Kombinationsfeld Inhaltssteuerungselement auslesen

VBA Kombinationsfeld Inhaltssteuerungselement auslesen
22.09.2025 13:43:56
Hans
Hi,

ich möchte per VBA die Inhalte von Kombinationsfeld-Inhaltssteuerungselemenete aus einem Word Dokument das sich in einer Word Tabelle befindet auslesen. Den Inhalt erhalte ich aber es wird immer wieder eine Leerzeile mitgeschickt. Entfernen kann ich die Leerzeile mit replace nicht bzw. den Zeilenumbruch. Hat jemand eine Idee wie das geht? Wenn ich mir den Inhalt einer Variablen anschau steht immer der Text drin und ein Rechteck das wohl den Zeilenumbruch simbolisiert.

Grüße
Hans
Anzeige
AW: VBA Kombinationsfeld Inhaltssteuerungselement auslesen
22.09.2025 14:08:48
Ulf
Hi,


Public Function ohneAbsatz(ByVal strIn As String) As String
ohneAbsatz = Replace(Replace(strIn, Chr(10), ""), Chr(13), "")
End Function

Public Sub test()
MsgBox Len(ohneAbsatz("A" & vbCrLf))
End Sub

hth
Ulf
Anzeige
AW: VBA Kombinationsfeld Inhaltssteuerungselement auslesen
23.09.2025 12:56:43
daniel
Hi

vielleicht reicht ja auch das:

If wdDokument.Tables(1).Cell(4, 2).Range.Text Like "Apfelmus*" Then


"Like" ist ein Vergleichsoperator vergleichbar mit "=", der aber flexibler ist und bei dem man auch die Jokerzeichen:
"*" beliebige Zeichen in beliebiger Anzahl
"?" ein beliebiges Zeichen
"#" eine Ziffer
verwenden kann.
mit dem "*" am Ende und Like ist es also für einen Treffer egal, ob nach dem "Apfelmus" noch weiter Zeichen folgen oder nicht.

Gruß Daniel
Anzeige
AW: VBA Kombinationsfeld Inhaltssteuerungselement auslesen
23.09.2025 17:08:25
Hans
Danke für den Hinweis Daniel. Für das von mir genannte Beispiel funktioniert es, aber es war nur ein Beispiel von mir. Meistens will ich den Inhalt direkt in eine Excel oder Word Datei übertragen und wenn das der Fall ist wird das unerwünschte Sonderzeichen bzw. das gesperrte mit übertragen.
AW: VBA Kombinationsfeld Inhaltssteuerungselement auslesen
23.09.2025 17:50:45
Hans
Das war keine Kritik. Dein Vorschlag ist an einer anderen Stelle sehr hilfreich. Und ja du hast recht ich hätte mein Problem dann so beschreiben müssen. Manchmal ist es schwer das Ergebnis richtig zu interpretieren oder weiterzugeben was man möchte. Deswegen sorry ich versuch es beim nächsten mal besser zu machen.
Anzeige
AW: VBA Kombinationsfeld Inhaltssteuerungselement auslesen
23.09.2025 17:27:46
daniel
ich kann dir nur für das helfen, was du mir zeigst.
wenn du mir was anderes zeigst, als du hast, musst du die erforderliche Änderung dann selber machen.
Gruß Daniel
AW: VBA Kombinationsfeld Inhaltssteuerungselement auslesen
22.09.2025 18:04:17
Hans
Funktioniert nicht bzw. ändert nichts am Ergebnis. Wenn ich den VBA Code anhalte sehe ich in der Variable ein Rechteck oder zwei eckige Klammern die anscheinend einen Zeilenumbruch verursacht. Den Umbruch bekomme ich nur weg wenn ich immer das letzte Zeichen entferne. Das Problem ist aber das immer das letzte Zeichen entfernt wird selbst wenn kein Umbruch enthalten ist. Hat wer noch eine Idee oder kennt jemand das Problem wenn man in Word auf eine Tabelle zugreift?

Left(Sample.Tables(1).Cell(2, 2).Range.Text, Len(Sample.Tables(1).Cell(2, 2).Range.Text) - 1)
Anzeige
AW: VBA Kombinationsfeld Inhaltssteuerungselement auslesen
22.09.2025 18:20:36
peter
Hallo

Versuch einmal rauszufinden was das letzte Zeichen wirklich ist. Extrahiere das Zeichen und prüfe mit der Funktion ASC ob es ein gültiges ASCII-Code zeichen ist bzw. mit ASCW ob es ein Unicode Zeichen ist.

Mfg.
Peter
AW: VBA Kombinationsfeld Inhaltssteuerungselement auslesen
23.09.2025 01:00:40
Ulf
Hi,
Zugriff über das Objektmodell sollte helfen
Public Sub xx()

Dim wdDokument As Word.Document
Dim wdTabelle As Word.Table
Dim wdComboBox As Word.ContentControl
Dim wdBereich As Word.Range
Dim wdZelle As Word.Cell
Set wdDokument = ThisDocument
Set wdTabelle = wdDokument.Tables(1)
Set wdZelle = wdTabelle.Cell(2, 2)
Set wdBereich = wdZelle.Range
Set wdComboBox = wdBereich.ContentControls(1)
MsgBox (wdComboBox.Range.Text)
End Sub

Da nicht klar ist as Sample ist entsprechend oben einsetzen
hth
Ulf
Anzeige
AW: VBA Kombinationsfeld Inhaltssteuerungselement auslesen
23.09.2025 09:33:16
Hans
Guten Morgen Ulf,

ich glaube ich versteh es nicht ganz deswegen versuche ich die Situation besser zu beschreiben und poste mal die wichtigen Codezeilen. Die Datei kann ich leider nicht hochladen.

Also ich habe ein Word Dokument mit mehreren Tabellen. In den Tabellen sind Inhaltssteuerelemente (Dropdownlisten). Wenn ich so ein Element anklicke kann ich im Dropdownfeld ein Element auswählen z.B. Apfel. Jetzt steht der Begriff in der Tabelle. Den Wert möchte ich in eine Variable schreiben, damit ich das Ergebnis in Excel Tabellen oder andere Word Dokumente übertragen kann. Leider steht am Ende von den Begriffen immer das drin []. Das Symbol bzw. die beiden Klammern bewirken einen Zeilenumbruch. Wie entferne ich das am geschicktesten? Bzw. was mach ich falsch. Ich möchte doch nur den Inhalt und nicht die Klammern. Code sieht wie folgt aus:

Sub SendInput()

Dim wdDokument As Word.Document

' Inhalte aus Tabelle 1
Dim strProdukt, strVariante As String

Set wdDokument= ActiveDocument

' Prüfen ob das Produkt das gesuchte ist
If wdDokument.Tables(1).Cell(4, 2).Range.Text = "Apfelmus" Then
strProdukt = "Apfel"
ElseIf wdDokument.Tables(1).Cell(4, 2).Range.Text = "Birnenbrei" Then
strProdukt= "Birne"
End If

' Befüllung der Variablen
strVariante = wdDokument.Tables(1).Cell(6, 2).Range.Text
Anzeige
So wie ich das sehe, ...
23.09.2025 11:21:06
Case
Moin Hans, :-)

... handelt es sich um "geschützte Leerzeichen". ;-)

Das wäre dann Chr(160). ;-)

Die kannst du in Word-VBA mit der "Application.CleanString-Methode" entfernen, oder in Excel dann mit der Methode von Ulf. ;-)
https://learn.microsoft.com/de-de/office/vba/api/word.application.cleanstring

In Excel VBA setzt du die Wordapplikation davor. ;-)

Servus
Case
Anzeige
Funktioniert. Verständnisfrage noch
23.09.2025 17:26:36
Hans
Hi Case,

vielen Dank für deine Hilfe. Ich habe mir deinen Vorschlag angeschaut und die Zeile wie folgt umgeschrieben:

strVariante = Application.CleanString(wdDokument.Tables(1).Cell(6, 2).Range.Text)


Jetzt werden alle Variablen ohne störende Sonderzeichen/gesperrte Zeichen beschrieben. Also jetzt passt es ;-)

In einer Zelle (Word Tabelle) in der sich kein Inhaltssteuerelemente (Dropdownlisten) befindet, die also einfach nur leer sind und per Hand befüllt werden ist es etwas anders. Da musste ich wie folgt vorgehen:

strGeschmack = Application.CleanString(Replace(wdDokument.Tables(1).Cell(1, 5).Range.Text, Chr(13), ""))


Meine Frage jetzt an dieser Stelle wieso ist das so? Mach ich etwas falsch bzw. habe ich irgendwo mir was verbaut? Ich wäre der Meinung gewesen das ich den Inhalt aus einem Word-Dokument sei es aus einer Word-Tabelle oder Word-Textfeld einfach von A nach B oder in eine Variable schreiben kann. Wieso muss ich das mit Application.CleanString und Chr(13) machen? Ich möchte es gerne verstehen und dazu lernen

Grüße
Hans
Anzeige
Also ich bin nun...
23.09.2025 20:35:31
Case
Moin Hans, :-)

nicht der Word-Crack, aber ich versuche es zu erklären. ;-)

Jede Tabellenzelle in Word enthält immer mindestens ein Absatzzeichen (Chr(13)), selbst wenn sie "leer" aussieht. Das Absatzzeichen ist in Word das grundlegende Container-Zeichen für Textfluss. Ohne dieses Absatzzeichen gibt es die Zelle nicht - das ist Design by Word. Also: Eine völlig leere Tabellenzelle enthält genau ein Chr(13). Schreibst du Text hinein, kommt am Ende immer noch ein Chr(13) dazu (damit du nach dem letzten Zeichen auch wieder den Cursor positionieren kannst). ;-)

Da die "Application.CleanString-Methode" das nicht "anfasst", musst du es extra eliminieren (steht im Link drin). ;-)

Bei einem Steuerelement ist es ähnlich. Jetzt ist die Zelle aber nicht mehr leer. Und die [] sind die Steuerelement-Klammern. Ein Inhaltssteuerelement (egal ob Textfeld, Dropdown, Checkbox) in Word enthält nicht nur seinen Inhalt, sondern auch die Steuerung selbst. Wenn du also Range.Text der Zelle abfragst, bekommst du: den eigentlichen Inhalt, plus die Steuerzeichen, die Word zur Darstellung/Markierung des Inhaltssteuerelements benötigt. ;-)

Das wiederrum kann "Application.CleanString" entfernen. ;-)

Oder du greifst direkt auf den Inhalt zu (das sollte dir den Text ohne die Steuerzeichen ausgeben):

ZelleInTabelle.Range.ContentControls(1).Range.Text

Mit einer kleinen Abfrage vorher checken, ob ein Steuerelement in der Zelle ist, oder nicht. ;-)

Servus
Case
Anzeige
Vielen Dank für die Tolle Erklärung :-)
24.09.2025 10:23:18
Hans
Danke Case nicht nur für die Lösung sondern auch für die Erklärung jetzt verstehe ich es :-)
Dir noch einen schönen Tag.
AW: VBA Kombinationsfeld Inhaltssteuerungselement auslesen
23.09.2025 12:36:25
Ulf
Hi,


Sub SendInput()
Dim wdDokument As Word.Document

' Inhalte aus Tabelle 1
Dim strProdukt, strVariante As String

Set wdDokument= ActiveDocument

' Prüfen ob das Produkt das gesuchte ist
If wdDokument.Tables(1).Cell(4, 2).Range.Text = "Apfelmus" Then
strProdukt = "Apfel"
ElseIf wdDokument.Tables(1).Cell(4, 2).Range.Text = "Birnenbrei" Then
strProdukt= "Birne"
End If

' Befüllung der Variablen
strVariante=wdDokument.Tables(1).Cell(6, 2).Range.ContentControls(1).Range.Text
'strVariante = wdDokument.Tables(1).Cell(6, 2).Range.Text

hth
Ulf
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18