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
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
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.
das steht in der leeren Zelle.
Gruß
Manfred
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
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.
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
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.
Kleine MsgBox anzeigen, wenn die Tabellenzelle leer ist
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
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

