Не удается проверить текстовые поля activex в форме (не в пользовательской форме), только в форме в самом документе Word - PullRequest
0 голосов
/ 06 апреля 2020

Я искал решение для этого, наконец решил, что просто спросить.

У меня есть форма, которую я создал в Word. Это не формальная форма типа userform1, как в проекте VB. Все написано в самом документе Word.

Каждый вечер мне будет приходить ведущий по электронной почте. Мне удалось успешно заставить пользователя нажать кнопку «Отправить» и отправить по электронной почте форму (MS Word (NighlyReport.DOCM)).

На последних этапах сейчас я «безуспешно пытаюсь» проверить все из моих текстовых полей без удачи.

Я хочу сделать каждое текстовое поле обязательным, и если пользователь не вводит значение, я бы хотел, чтобы "setFocus" возвратил пользователя обратно в текстовое поле. Поскольку я не использую официальную «пользовательскую форму», мне кажется, что этот метод мне не доступен - чтобы вернуть пользователя обратно в форму. Я пытался _Change _GotFocus _LostFocus _KeyPress _MouseDown

Все это прекрасно работает, пока я внутри текстового поля. Никто из них не отправляет пользователя обратно.

Кто-нибудь знает способ сделать это. Я хотел получить простую и красивую форму, чтобы заполнить ее и прикрепить к внешнему виду (что я и сделал). Просто нужно проверить текстовые поля. Я также хотел бы проверить все из них с помощью командной кнопки, но все еще не могу вернуть фокус к текстовому полю, которое не было заполнено пользователем.

Ради простоты я публикую только здесь два текстовых поля и моя базовая проверка c, которая не работает. Чтобы было ясно, я не использую сетку пользовательской формы, может быть, это делает все это невозможным.

Заранее спасибо:

Private Sub txt1_Change()

If txt1.Value = "" Then
MsgBox "need your input"
Else
Exit Sub
End If
End Sub


Private Sub txt2_Change()

If txt2.Value = "" Then
MsgBox "need your input"
Else
Exit Sub
End If
End Sub

1 Ответ

0 голосов
/ 07 апреля 2020

Попробуйте что-нибудь вроде:

Dim iShp As InlineShape, StrOut As String
For Each iShp In ActiveDocument.InlineShapes
  With iShp
    If .Type = wdInlineShapeOLEControlObject Then
      If .OLEFormat.ClassType Like "Forms.TextBox.*" Then
        If Trim(.OLEFormat.Object) = "" Then StrOut = StrOut & vbCr & .OLEFormat.Object.Name
      End If
    End If
  End With
Next
If StrOut <> "" Then
  MsgBox "The following controls have not been completed: " & StrOut
  Exit Sub
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...