Vba 内容控制不识别内容

Vba 内容控制不识别内容,vba,error-handling,ms-word,controls,Vba,Error Handling,Ms Word,Controls,我希望有人能帮我弄清楚,当计数值为5时,为什么下面代码中的“F”值继续在ErrorMessage字符串中包含我的错误标签 在文档中,内容控件与所有其他控件(工作正常)一样包含文本,但VBA代码中无法识别此内容控件文本值以映射错误标签 已尝试仅替换控件并检查属性是否匹配。调试消息表明该值刚刚设置为默认内容控制值“单击或点击此处输入文本” 由于缺少数据,我无法测试您的代码,但根据您的描述,我猜必须在每个循环中重置ErrorMessage,因为它在使用时会发生更改,并且在使用后自然会保留修改后的版本

我希望有人能帮我弄清楚,当计数值为5时,为什么下面代码中的“F”值继续在ErrorMessage字符串中包含我的错误标签

在文档中,内容控件与所有其他控件(工作正常)一样包含文本,但VBA代码中无法识别此内容控件文本值以映射错误标签

已尝试仅替换控件并检查属性是否匹配。调试消息表明该值刚刚设置为默认内容控制值“单击或点击此处输入文本”


由于缺少数据,我无法测试您的代码,但根据您的描述,我猜必须在每个循环中重置ErrorMessage,因为它在使用时会发生更改,并且在使用后自然会保留修改后的版本

除了循环之后的内容外,为了理解代码,我仔细查看了您的代码。也许,我所做的改变会对你有所帮助

Option Explicit

Private Sub Create_Click()

    Dim Doc             As Document
    Dim Mandatory()     As String
    Dim ErrorMessage    As String
    Dim ErrorCount      As Integer
    Dim strFilename     As String
    Dim strFileString   As String               ' this appears identical with 'Number'
    Dim Number          As String
    Dim Count           As Integer              ' loop counter
    
    Set Doc = ActiveDocument
    Mandatory = Split("A B C D E F G H I")
    Number = Doc.SelectContentControlsByTitle(Mandatory(0))(1).Range.Text

    For Count = 1 To UBound(Mandatory) + 1
        ErrorMessage = "The following mandatory fields are missing: "
        With Doc.SelectContentControlsByTitle(Mandatory(Count))(1).Range
            MsgBox "Number = " & Number & vbCr & .Text
            If .Text = "Click or tap here to enter text." Or _
               .Text = "0.00" Then
                ErrorMessage = ErrorMessage & vbCrLf & vbCrLf & "- " & Mandatory(Count) & " Label"
                MsgBox (.Text)
                ErrorCount = ErrorCount + 1
            End If
        End With
        If Count = 1 Then Exit For
    Next Count
    
    If ErrorCount > 0 Then
        MsgBox (ErrorMessage)
    Else
        strFileString = Number
        MsgBox (strFileString)
        strFilename = "Some Text Here" & " - " & strFileString & ".pdf"

        With Doc
            NewPath = .Path & "\" & strFilename
            .SaveAs2 FileName:=NewPath, FileFormat:=wdFormatPDF
            .ExportAsFixedFormat OutputFileName:=strFilename, _
                                 ExportFormat:=wdExportFormatPDF, _
                                 OpenAfterExport:=True, _
                                 OptimizeFor:=wdExportOptimizeForPrint, _
                                 Range:=wdExportAllDocument, _
                                 Item:=wdExportDocumentContent
        End With
    End If
 End Sub

您可以让VBA将有用的(有些人会说是必要的)显式选项自动添加到所有新代码模块中。在VBE窗口中选择“工具”>“选项”,并选中“编辑器”选项卡上的“需要变量声明”。

检查文档中没有其他具有相同标题的内容控件。

您能分享代码的用途吗?感谢指点!我已经采取了一些这段代码,并将其应用到我的非常感谢。忘了信用证了。我确定问题在于我复制的其他内容控件的标题名与F内容控件的标题名相同。哼!因此,它将这些视为一个错误。在更改标题时,我的代码非常有效。谢谢你的帮助。
Option Explicit

Private Sub Create_Click()

    Dim Doc             As Document
    Dim Mandatory()     As String
    Dim ErrorMessage    As String
    Dim ErrorCount      As Integer
    Dim strFilename     As String
    Dim strFileString   As String               ' this appears identical with 'Number'
    Dim Number          As String
    Dim Count           As Integer              ' loop counter
    
    Set Doc = ActiveDocument
    Mandatory = Split("A B C D E F G H I")
    Number = Doc.SelectContentControlsByTitle(Mandatory(0))(1).Range.Text

    For Count = 1 To UBound(Mandatory) + 1
        ErrorMessage = "The following mandatory fields are missing: "
        With Doc.SelectContentControlsByTitle(Mandatory(Count))(1).Range
            MsgBox "Number = " & Number & vbCr & .Text
            If .Text = "Click or tap here to enter text." Or _
               .Text = "0.00" Then
                ErrorMessage = ErrorMessage & vbCrLf & vbCrLf & "- " & Mandatory(Count) & " Label"
                MsgBox (.Text)
                ErrorCount = ErrorCount + 1
            End If
        End With
        If Count = 1 Then Exit For
    Next Count
    
    If ErrorCount > 0 Then
        MsgBox (ErrorMessage)
    Else
        strFileString = Number
        MsgBox (strFileString)
        strFilename = "Some Text Here" & " - " & strFileString & ".pdf"

        With Doc
            NewPath = .Path & "\" & strFilename
            .SaveAs2 FileName:=NewPath, FileFormat:=wdFormatPDF
            .ExportAsFixedFormat OutputFileName:=strFilename, _
                                 ExportFormat:=wdExportFormatPDF, _
                                 OpenAfterExport:=True, _
                                 OptimizeFor:=wdExportOptimizeForPrint, _
                                 Range:=wdExportAllDocument, _
                                 Item:=wdExportDocumentContent
        End With
    End If
 End Sub