Проверьте наличие пустого текстового поля в Word 2016 с помощью VBA - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть текстовое поле в документе Word 2016.Это не объект формы TextBox, а обычное текстовое поле, которое вы вставляете здесь на вкладке Вставка:

Insert Menu

Я пытаюсь проверить, является ли онопусто, когда документ открыт.За свою жизнь я не могу понять, как это сделать.Я пробовал все следующее:

If (Len(ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes("Text Box 2").TextFrame.TextRange.Text & vbNullString) = 0) Then
If (IsNull(ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes("Text Box 2").TextFrame.TextRange.Text)) Then
If (LTrim(RTrim(ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes("Text Box 2").TextFrame.TextRange.Text)) = "") Then
If (ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes("Text Box 2").TextFrame.TextRange.Text = "") Then

Ничего из этого не возвращает истину, когда текстовое поле пусто?Это текстовое поле:

Text Box

Кажется, что текстовое поле всегда содержит маркер абзаца (который я не могу удалить).Вот что показывают часы VBA:

Watch :   : ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes("Text Box 2").TextFrame.TextRange.Text : "
" : String : ThisDocument.Document_Open

Обратите внимание, что часы - это две отдельные линии, что заставляет меня думать, что там есть CRLF или что-то еще?

1 Ответ

0 голосов
/ 19 сентября 2018

В пустом текстовом поле всегда есть разрыв абзаца.Соответственно, вы можете использовать что-то вроде:

Private Sub Document_Open()
  With ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes("Text Box 2")
    If Not .TextFrame Is Nothing Then
      If Trim(.TextFrame.TextRange.Text) = vbCr Then
        MsgBox "Empty Text Range"
      End If
    Else
      MsgBox "No Text Range"
    End If
  End With
End Sub
...