Разбор блока текста в MS Word и программная отправка его в поля веб-страницы в IE с использованием VBA - PullRequest
0 голосов
/ 23 марта 2019

У меня повторяющаяся задача, которую я пытаюсь автоматизировать.Пользователь чертит кусок текста в Word, который часто насчитывает более 3000 символов.Этот текст необходимо ввести на веб-сайт, который имеет поля через Internet Explorer (IE).Эти поля могут содержать только около 230 символов, включая пробелы.Ограничение: пользователи не могут вводить текст непосредственно в поля IE.

В идеале я хотел бы использовать MS WORD и VBA для чтения фрагмента текста и разделения его на мини-фрагменты по 230 символов, но не для разделения целых слов.в процессе.Затем добавьте эти мини-чанки в буфер обмена и программно доставьте их в поля на веб-странице IE.

Я не могу понять, как разбить большой кусок на 230-символьные мини-чанки, хотя одновременнорасщепление целых слов.Итак, я создал поля текстовой формы и установил максимальную длину в 230 символов.Пользователь вводит текст в поле формы текста 1 до его заполнения, а затем возобновляет ввод в поле формы текста 2 до заполнения, а затем возобновляет ввод в поле формы текста 3 и т. Д.Это решает проблему разделения слов, поскольку пользователь может переходить в новое поле текстовой формы без разделения слов.

Я могу создать командную кнопку 1 и скопировать содержимое поля текстовой формы 1 в буфер обмена, а затем отправить ключ содержимого поля текстовой формы 1 в буфере обмена в первое поле в IE и отправить ключ вкладки для перемещенияточка вставки в следующее пустое поле в IE.

Я могу создать командную кнопку 2 и скопировать содержимое поля текстовой формы 2 в буфер обмена, а затем отправить ключ содержимого поля текстовой формы 1 в буфере обмена во второйполе в IE и sendkey вкладка для перемещения точки вставки в следующее пустое поле в IE… и так далее до тех пор, пока поле N-й текстовой формы и кнопка N-й команды не облегчат перемещение мини-блоков в поля IE.Ограничение: Я не могу изменить ограничение на количество символов, налагаемое веб-сайтом IE.

Это неуклюже, поскольку требует, чтобы пользователь вручную разделил большой кусок текста, введя несколько полей формы текста, а затем щелкнул несколько командкнопки, чтобы получить все отдельные поля текстовой формы, добавленные в буфер обмена и программно доставленные в поля веб-страницы IE.

Я не могу понять, как программно анализировать большой фрагмент.Кроме того, очевидно, что системный буфер обмена может копировать / вставлять только один мини-блок за раз.Насколько я понимаю, буфер обмена Office может хранить 24 уникальных экземпляра копии, но VBA не может получить доступ к буферу обмена Office.Было бы здорово, если бы текст мог быть проанализирован программно.Было бы здорово, если бы был способ перебирать и копировать отдельные поля текстовой формы одним щелчком мыши.

Есть ли способ?

    Private Sub SendToXYZButton1_Click()

    Dim strText As String
        Selection.GoTo What:=wdGoToBookmark, Name:="XYZremarks1"
        strText = Selection.Text

    If Len(strText) = 0 Then
        MsgBox "Sorry, no XYZ Remark(s) was detected in the ""Drafting Field""." & vbCr & vbCr & "The XYZ Remark(s) was not sent to XYZ.  Please complete your XYZ Remark(s) and click ""Send to XYZ"" again!", vbExclamation, "Empty Drafting Field- Not Sent to XYZ"
    Exit Sub

    End If

    If InStr(strText, "*") > 0 Then
        MsgBox "Sorry, one or more asterisks (*) was detected in the ""Drafting Field,"" which indicates one or more drop-down menus or date controls was not yet completed." & vbCr & vbCr & "The XYZ Remark(s) was not sent to XYZ.  Please complete your XYZ Remark(s) and click ""Send to XYZ"" again!", vbExclamation, "Unfinished Statement(s)- Not Sent to XYZ"
        Exit Sub
    ElseIf InStr(strText, "---") > 0 Then
        MsgBox "Sorry, one or more drop-down menus was improperly completed." & vbCr & vbCr & "The XYZ Remark(s) was not sent to XYZ.  Please complete your XYZ Remark(s) and click ""Send to XYZ"" again!", vbExclamation, "Unfinished Statement(s)- Not Sent to XYZ"
        Exit Sub
    ElseIf InStr(strText, "[") > 0 Or InStr(strText, "]") > 0 Then
        MsgBox "Sorry, one or more [freehand text fields] was not yet completed." & vbCr & vbCr & "The XYZ Remark(s) was not sent to XYZ.  Please complete your XYZ Remark(s) and click ""Send to XYZ"" again!", vbExclamation, "Unfinished Statement(s)- Not Sent to XYZ"
        Exit Sub
    End If

        'RunSpellcheck

        Selection.GoTo What:=wdGoToBookmark, Name:="XYZremarks1"
        strText = Selection.Text

    Dim myDO As DataObject
    Set myDO = New DataObject
        myDO.SetText Selection.Text

    myDO.PutInClipboard

      AppActivate ("XYZ, Details Page - Internet Explorer")


    'SendKeys "^V" Explorer versus Chrome is very picky about case of the "v"
    'Restores numlock key to on, BUT irrespective of previous state.
    If Selection.Information(wdNumLock) = False Then
        SendKeys ("^v")
        SendKeys ("{tab}")
        SendKeys ("{tab}")

    Else
        SendKeys ("^v")
        SendKeys ("{tab}")
        SendKeys ("{tab}")
        SendKeys "{NUMLOCK}%s"
End If

    MsgBox "Please inspect and confirm that your completed XYZ Remark(s) correctly populated into the XYZ ""XYZ Remark(s)"" drafting field(s).", vbOKOnly Or vbExclamation, "Warning! Data Sent to XYZ- Please Confirm!"

Exit Sub

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...