使用VBA在Word 2016中检查一个空的文本框

时间:2018-09-18 15:06:31

标签: vba ms-word word-vba

我在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

当文本框为空时,这些都不返回true吗?这是文本框:

Text Box

似乎文本框中总是包含一个段落标记(我无法删除)。这是VBA手表显示的内容:

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

请注意,手表是两行,这让我觉得里面有CRLF或其他东西吗?

1 个答案:

答案 0 :(得分:1)

在其他情况下为空的文本框中始终会有一个段落中断。因此,您可以按照以下方式使用某些东西:

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