PDA

Vollständige Version anzeigen : VBA: Problem mit leerzeichen von Word Formularfeldern


beat78
28.01.2009, 09:19
Hallo zusammen

Komm nicht weiter. Folgender Code funktioniert einfach nicht. Hab die leerzeichen auch schon mit Trim versucht zu eliminieren. Das Ziel wäre das wen das Feld leer ist den dummy wert "leer,1" abzufüllen.

Problemstelle: If Len(Replace(a, " ", "")) < 2 Then
MsgBox ("Hier ist ein leeres Formularfeld"), vbInformation
End If


For Each Tabelle In wrdDoc.Tables
Tabelle.Rows.ConvertToText Separator:=wdSeparateByCommas
tes = wrdDoc.Range.text

Dim b() As String
Dim z2 As String
Dim d As String


ActiveDocument.Range(0, 0).Select 'An den Anfang positionieren
While Not Selection.Bookmarks.Exists("\EndOfDoc") 'Bis zum Ende des Dokumentes

a = Selection.Bookmarks("\Line").Range.text 'Zeile zurückgeben
a = Replace(a, Chr(13), "") 'ersetzten der Absatzzeichen
If InStr(a, ";") <> 0 Then
If Len(Replace(a, " ", "")) < 2 Then
MsgBox ("Hier ist ein leeres Formularfeld"), vbInformation
End If
z2 = a & ";"
b = VBA.split(z2, ";")
If Right(b(0), 1) = " " Then
b(0) = Left(b(0), Len(b(0)) - 1)
End If


b(0) = Replace(b(0), ".", "")
Set rst = CurrentDb.OpenRecordset("Tbl_Main")
With rst
.MoveLast
.Edit
.Fields(b(0)) = b(1)
.Update
End With
rst.Close
Else
Selection.MoveDown Unit:=wdLine 'Zur nächsten Zeile positionieren
End If

Selection.MoveDown Unit:=wdLine 'Zur nächsten Zeile positionieren
Wend
Next Tabelle

Schreibbüro
31.01.2009, 22:54
Hallo beat,

ist das denn wirklich ein leeres, also genauer: ein nicht ausgefülltes Word-Formularfeld? Das enthält keine Leerzeichen, obwohl man 5 Leerzeichen auf dem Bildschirm sieht. Den Unterschied kann man hier sehen:
Sub Test()

Debug.Print "x" & ActiveDocument.FormFields(1).Result & "x"
Debug.Print "x" & ActiveDocument.FormFields(1).Range.Text & "x"

End Sub
Result enthält das Ergebnis, das ist leer, also "" und kann ausgewertet werden. Der Range.Text enthält die 5 Platzhalterzeichen, Bsp.:
Sub Test3()

If ActiveDocument.Formfields(1).Result = "" Then
MsgBox "Leeres Feld"
End If

End Sub

Oder wird da eine leere Tabellenzelle ausgelesen? In dem Fall müssen die letzten beiden Zeichen (also nicht nur Chr(13), sondern auch Chr(7) abgeschnitten werden, um festzustellen, ob die Zelle leer ist, Beispiel:
Sub Test2()

Dim tbl As Word.Table
Dim cel As Word.Cell

Set tbl = ActiveDocument.Tables(1)

For Each cel In tbl.Range.Cells
If TrimZellenInhalt(cel.Range.Text) = "" Then
cel.Select
MsgBox "Leere Zelle"
End If
Next cel

Set tbl = Nothing

End Sub

Public Function TrimZellenInhalt(str As String)
' entfernt am Ende jeder Zeile Absatzmarke (Chr(13)) und "Zellenende" Chr(7)

str = Left$(str, Len(str) - 2)
TrimZellenInhalt = str

End Function

Gruß
Lisa