Word VBA: MsgBox, если вход ContentControl остался без ответа - PullRequest
0 голосов
/ 14 июля 2020

У меня есть документ MS Word, где я требую, чтобы пользователи выбирали числовое значение от 1 до 5 в различных элементах управления ContentControl для нескольких вопросов. Я ввел кнопку «Рассчитать» в do c. Когда пользователи нажимают эту кнопку, код вычисляет среднее значение их входных данных и вводит результат в различные ячейки, отмеченные закладками.

Это отлично работает. За исключением случаев, когда некоторые ContentControls оставлены пустыми. Поэтому я хочу, чтобы всплывающее окно появлялось, когда один или несколько входов ContentControl не получили ответа.

Вот моя попытка ввести код:

Private Sub Calculate_Click()
    Dim ccs1 As ContentControls
    Dim cc1 As ContentControl
    Dim content1 As String
    Dim ccs2 As ContentControls
    Dim cc2 As ContentControl
    Dim content2 As String
    Dim MissingData As String
    Dim TotalRating As Double
    Dim OrgRating As Double
    Dim TeamRating As Double
    Dim StratRating As Double
    Dim PandPRating As Double
    Dim EvidenceRating As Double
    Dim ESGRating As Double
    
' Error if Rating1 to Rating 19 are PlaceholderText
    For i = 1 To 19
    TagName1 = "Rating" & i
    TagName2 = "RT" & i
    Set doc = ActiveDocument
    Set ccs1 = doc.SelectContentControlsByTag(TagName1)
    Set cc1 = ccs1(1)
    content1 = cc1.Range
    Set ccs2 = doc.SelectContentControlsByTag(TagName2)
    Set cc2 = ccs2(1)
    content2 = cc2.Range

    If content1 = cc1.PlaceholderText Then
    MissingData = MissingData & vbCrLf & "- " & content2
    End If
    
    Next i
    
    If MissingData <> "" Then
        MsgBox "Please enter the following before submitting:" & MissingData
        End
    End If
    
    Call updateDouble(ActiveDocument, "Rating", 1, 18, "TotalRating")
    Call updateDouble(ActiveDocument, "Rating", 1, 4, "OrgRating")
    Call updateDouble(ActiveDocument, "Rating", 5, 7, "TeamRating")
    Call updateDouble(ActiveDocument, "Rating", 8, 10, "StratRating")
    Call updateDouble(ActiveDocument, "Rating", 11, 14, "PandPRating")
    Call updateDouble(ActiveDocument, "Rating", 15, 18, "EvidenceRating")
    Call updateDouble(ActiveDocument, "Rating", 19, 19, "ESGRating")
    
End Sub
Private Sub updateDouble(doc As Word.Document, CCTitlePrefix As String, StartNum As Integer, EndNum As Integer, CellName As String)
    Dim i As Integer
    Dim Total As Double
    Total = 0
    With doc
     For i = StartNum To EndNum
    Total = Total + CDbl(.SelectContentControlsByTitle(CCTitlePrefix & CStr(i))(1).Range.Text)
     Next
   .Bookmarks(CellName).Range.Paragraphs(1).Range.Text = CStr(Total / (1 + (EndNum - StartNum)))
    End With

End Sub

Закомментированная строка code - это начало обработки ошибок. Может ли кто-нибудь увидеть, где я ошибся? В настоящее время при нажатии кнопки «Рассчитать» я не вижу всплывающего окна MsgBox, и код пытается (и не может) вычислить средние значения.

Заранее большое спасибо.

1 Ответ

1 голос
/ 14 июля 2020

Попробуйте заменить

If content1 = cc1.PlaceholderText Then
  MissingData = MissingData & vbCrLf & "- " & content2
End If

на

If cc1.ShowingPlaceholderText Then
  MissingData = MissingData & vbCrLf & "- " & content2
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...