Supportnet Computer
Planet of Tech

Supportnet / Forum / Textverarbeitung

Mit VBA Tabellenzelle auf "Leer" prüfen





Frage

Hallo, irgendwie will es mir nicht gelingen, mit VBA in einer Word-Tabelle zu prüfen, ob eine Zelle [u]keinen[/u] Text enthält (also leer ist). Versuche es ungefähr so: If ActiveDocument.Tables(1).Cell(1, 1).Range.Text = "" Then ...mach irgendwas... Scheint am Vergleichswert zu liegen... Darf der nicht "" sein sondern muß irgendein Absatzzeichen oder sowas enthalten? Oder lieg ich mit dem Ansatz ganz falsch? Massaraksch

Antwort 1 von Event

Du liegst damit sicher richtig. Nur habe ich grade festgestellt, daß da schon 2 Bytes Len(ActiveDocument.Tables(1).Cell(1, 1).Range.Text) drinstehen, auch wenn alle im Document sichtbaren Zeichen in zelle (1,1) gelöscht werden.

Gruß
Manfred

Antwort 2 von Massaraksch

Ja scheint wirklich so.

Aber dein Test bringt mich auf eine Idee :-)

Wenn immer mindestens 2 Bytes (was auch immer) drinstehen, dann prüfe ich jetzt eben mal die Länge.

if len(blabla.text) < 3 then ...

Dann müßte die Zelle also leer sein. Mal schauen...

Massaraksch

Antwort 3 von Event

Also ed handdel sich wohl um die Absatzmarke oder was auch iimmer M$ damit definiert.

dim leer as string
leer = str (13) + str(7)  


das steht in der leeren Zelle.

Gruß
Manfred

Antwort 4 von Massaraksch

Scheint mit einer Längenprüfung funktionieren:

If Len(Trim(ActiveDocument.Tables(1).Cell(1,1 ).Range.Text)) = 2 then ... (Zelle ohne Text)

(hab das trim reingenommen um Zellen mit Leerzeichen auch zu erwischen)

Jetzt gäbe es nur noch Probs, wenn zusätzliche Zeilen/Absatzschaltungen drin wären... aber das taucht in meinem konkreten Fall glücklicherweise nicht auf.

Danke für Anregungen.

Massaraksch

Antwort 5 von Massaraksch

Hab mal etwas "rumgespielt" ;-) und mir zur Vereinfachung eine eigene Prüffunktion geschrieben.

Function IsText(Txt As String, Optional Leer As Boolean = False) As Boolean
´Testet, ob ein String (Variable, Range, Markierung) Textzeichen enthält.
´Der optionale Parameter "Leer" steuert, ob Leerzeichen als Text angesehen werden.
´by Massaraksch

Dim i As Long
IsText = False

If Leer Then
    For i = 1 To Len(Txt)
        If Asc(Mid(Txt, i, 1)) > 31 Then IsText = True
    Next i
Else
    For i = 1 To Len(Txt)
        If Asc(Mid(Txt, i, 1)) > 32 Then IsText = True
    Next i
End If

End Function

Da brauch ich dann nur noch sowas zu machen:

If Not IsText(Variable) Then ... (Variable enthält keine Textzeichen ;-)

Vielleicht kann sowas ja jemand mal gebrauchen...

Massaraksch

Antwort 6 von Netzkoordinator

Aus der Word-Hilfe VBA stammend:
Text aus einer Tabellenzelle zurückgeben, ohne Rückgabe der Zellenendemarke

In den folgenden Beispielen wird der Inhalt jeder Zelle in der ersten Zeile der ersten Dokumenttabelle zurückgegeben und angezeigt.



Set oTable = ActiveDocument.Tables(1)
For Each aCell In oTable.Rows(1).Cells
    Set myRange = ActiveDocument.Range(Start:=aCell.Range.Start, _
        End:=aCell.Range.End - 1)
    MsgBox myRange.Text
Next aCell

 


Kleine MsgBox anzeigen, wenn die Tabellenzelle leer ist
Sub Tabellentext()
Set oTable = ActiveDocument.Tables(1)
For Each aCell In oTable.Rows(1).Cells
    Set myRange = ActiveDocument.Range(Start:=aCell.Range.Start, _
        End:=aCell.Range.End - 1)
 ´ Bedingung durch mich hinzugefügt   
    If myRange.Text = "" Then
        MsgBox "Tabellenzelle ist leer!"
            Else
            MsgBox myRange.Text
    End If
Next aCell

End Sub 


Antwort 7 von Massaraksch

Ja, auch interessant. Hatte das vorher leider nicht in der Hilfe gefunden.

Einen Nachteil hat die M$-Lösung jedoch für mich. Sobald andere Steuerzeichen (Bsp. TAB, leere Absätze) oder auch nur Leerzeichen in der Zelle sind, gilt sie als nicht mehr leer.
In meinem speziellen Fall soll sie jedoch auch dann als leer gelten (steht ja nichts relevantes drin). Deshalb meine obige Funktion, die schaut, ob wenigstens irgendein "richtiges" Zeichen drin ist.

Hab auch mal die Trim- und ClearString-Funktion probiert, aber die entfernen leider nicht alle Steuerzeichen.

Trotzdem danke für den Hinweis. Viele Wege führen nach Rom ;-)

Massaraksch

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: